[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;