[PECL-CVS] [pecl-text-xdiff] fix-memory-issues: address reviews

[email protected] (Rasmus Lerdorf) Sun, 5 Apr 2026 18:17:45 +0000
Newsgroups php.pecl.cvs
Message-ID <[email protected]>
Author: Rasmus Lerdorf (rlerdorf)
Date: 2026-04-05T14:17:40-04:00

Commit: https://github.com/php/pecl-text-xdiff/commit/66a84b55aac05187ce83d152e64efcbf5e448252
Raw diff: https://github.com/php/pecl-text-xdiff/commit/66a84b55aac05187ce83d152e64efcbf5e448252.diff

address reviews

Changed paths:
  M  xdiff.c


Diff:

diff --git a/xdiff.c b/xdiff.c
index ce67501..8f1f4f7 100644
--- a/xdiff.c
+++ b/xdiff.c
@@ -71,11 +71,11 @@ extern char libxdiff_version[];
 
 struct string_buffer {
 	char *ptr;
-	unsigned long size;
+	size_t size;
 };
 
 static int load_mm_file(const char *filepath, mmfile_t *dest);
-static int load_into_mm_file(const char *buffer, unsigned long size, mmfile_t *dest);
+static int load_into_mm_file(const char *buffer, size_t size, mmfile_t *dest);
 static int append_string(void *ptr, mmbuffer_t *buffer, int array_size);
 static int append_stream(void *ptr, mmbuffer_t *buffer, int array_size);
 static int init_string(struct string_buffer *string);
@@ -732,8 +732,10 @@ static int load_mm_file(const char *filepath, mmfile_t *dest)
 		goto out_stream_close;
 
 	filesize = stat.sb.st_size;
+	if (filesize < 0 || filesize > LONG_MAX)
+		goto out_stream_close;
 
-	retval = xdl_init_mmfile(dest, filesize, XDL_MMF_ATOMIC);
+	retval = xdl_init_mmfile(dest, (long) filesize, XDL_MMF_ATOMIC);
 	if (retval < 0)
 		goto out_stream_close;
 
@@ -756,12 +758,15 @@ static int load_mm_file(const char *filepath, mmfile_t *dest)
 	return 0;
 }
 
-static int load_into_mm_file(const char *buffer, unsigned long size, mmfile_t *dest)
+static int load_into_mm_file(const char *buffer, size_t size, mmfile_t *dest)
 {
 	int retval;
 	void *ptr;
 
-	retval = xdl_init_mmfile(dest, size, XDL_MMF_ATOMIC);
+	if (size > LONG_MAX)
+		goto out;
+
+	retval = xdl_init_mmfile(dest, (long) size, XDL_MMF_ATOMIC);
 	if (retval < 0)
 		goto out;