Skip to content

Commit f3b3e54

Browse files
committed
xdiff: catch memory allocation errors
The xdiff code contains multiple call sites where the results of `xdl_malloc` are not being checked for memory allocation errors. Add checks to fix possible segfaults due to `NULL` pointer accesses.
1 parent c2dd895 commit f3b3e54

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

src/xdiff/xmerge.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -717,10 +717,22 @@ int xdl_merge(mmfile_t *orig, mmfile_t *mf1, mmfile_t *mf2,
717717
status = 0;
718718
if (!xscr1) {
719719
result->ptr = xdl_malloc(mf2->size);
720+
if (!result->ptr) {
721+
xdl_free_script(xscr2);
722+
xdl_free_env(&xe1);
723+
xdl_free_env(&xe2);
724+
return -1;
725+
}
720726
memcpy(result->ptr, mf2->ptr, mf2->size);
721727
result->size = mf2->size;
722728
} else if (!xscr2) {
723729
result->ptr = xdl_malloc(mf1->size);
730+
if (!result->ptr) {
731+
xdl_free_script(xscr1);
732+
xdl_free_env(&xe1);
733+
xdl_free_env(&xe2);
734+
return -1;
735+
}
724736
memcpy(result->ptr, mf1->ptr, mf1->size);
725737
result->size = mf1->size;
726738
} else {

src/xdiff/xpatience.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,9 @@ static struct entry *find_longest_common_sequence(struct hashmap *map)
217217
*/
218218
int anchor_i = -1;
219219

220+
if (!sequence)
221+
return NULL;
222+
220223
for (entry = map->first; entry; entry = entry->next) {
221224
if (!entry->line2 || entry->line2 == NON_UNIQUE)
222225
continue;

0 commit comments

Comments
 (0)