Commit Diff


commit - 8cba9b5e693b0da4da8e2f83b51ab6ad42430851
commit + dabc100859385b31dcfbe62d04187d6947a12795
blob - 9f5f1eb495d016441ffc8a94e8401c15f8a67df9
blob + bb6e626bf9c86e3fa8598f4710496f81737f2c17
--- include/diff/arraylist.h
+++ include/diff/arraylist.h
@@ -77,7 +77,7 @@
 
 #define ARRAYLIST_INSERT(NEW_ITEM_P, ARRAY_LIST, AT_IDX) do { \
 		ARRAYLIST_ADD(NEW_ITEM_P, ARRAY_LIST); \
-		if ((AT_IDX) < (ARRAY_LIST).len) \
+		if ((NEW_ITEM_P) && (AT_IDX) < (ARRAY_LIST).len) \
 			memmove(&(ARRAY_LIST).head[(AT_IDX) + 1], \
 				&(ARRAY_LIST).head[AT_IDX], \
 				((ARRAY_LIST).len - (AT_IDX)) \
blob - ef073fa60e05e919ff3a03ae8837019c276589fe
blob + 90ed1983d9b6b7ad3005b3a3b77230d52c12ba2d
--- lib/diff_output.c
+++ lib/diff_output.c
@@ -108,6 +108,8 @@ diff_output_lines(struct diff_output_info *outinfo, FI
 		outlen += rc;
 		if (outinfo) {
 			ARRAYLIST_ADD(offp, outinfo->line_offsets);
+			if (offp == NULL)
+				return ENOMEM;
 			outoff += outlen;
 			*offp = outoff;
 		}
@@ -195,6 +197,10 @@ diff_output_info_alloc(void)
 	if (output_info != NULL) {
 		ARRAYLIST_INIT(output_info->line_offsets, 128);
 		ARRAYLIST_ADD(offp, output_info->line_offsets);
+		if (offp == NULL) {
+			diff_output_info_free(output_info);
+			return NULL;
+		}
 		*offp = 0;
 	}
 	return output_info;
blob - 0d570314af3d662046e4e1266c1bd783c95848a6
blob + 7d291c0f3ff566488d546354867dd8406c5f0291
--- lib/diff_output_unidiff.c
+++ lib/diff_output_unidiff.c
@@ -134,6 +134,8 @@ output_unidiff_chunk(struct diff_output_info *outinfo,
 			return errno;
 		if (outinfo) {
 			ARRAYLIST_ADD(offp, outinfo->line_offsets);
+			if (offp == NULL)
+				return ENOMEM;
 			outoff += rc;
 			*offp = outoff;
 
@@ -143,6 +145,8 @@ output_unidiff_chunk(struct diff_output_info *outinfo,
 			return errno;
 		if (outinfo) {
 			ARRAYLIST_ADD(offp, outinfo->line_offsets);
+			if (offp == NULL)
+				return ENOMEM;
 			outoff += rc;
 			*offp = outoff;
 
@@ -157,6 +161,8 @@ output_unidiff_chunk(struct diff_output_info *outinfo,
 		return errno;
 	if (outinfo) {
 		ARRAYLIST_ADD(offp, outinfo->line_offsets);
+		if (offp == NULL)
+			return ENOMEM;
 		outoff += rc;
 		*offp = outoff;