From: John Marriott Date: Tue, 15 Apr 2025 16:15:24 +0000 (+0200) Subject: patch 9.1.1303: missing out-of-memory check in linematch.c X-Git-Tag: v9.1.1303^0 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2137710b436e481168382c50aa4838a4b9730163;p=thirdparty%2Fvim.git patch 9.1.1303: missing out-of-memory check in linematch.c Problem: missing out-of-memory check in linematch.c Solution: return early in case of memory allocation failure, move the pow() calculation ouside of the for() loop (John Marriott) closes: #17118 Signed-off-by: John Marriott Signed-off-by: Christian Brabandt --- diff --git a/src/linematch.c b/src/linematch.c index 17e932d003..1fab282760 100644 --- a/src/linematch.c +++ b/src/linematch.c @@ -410,12 +410,16 @@ linematch_nbuffers( // create the flattened path matrix diffcmppath_T *diffcmppath = lalloc(sizeof(diffcmppath_T) * memsize, TRUE); + if (diffcmppath == NULL) + return 0; + // allocate memory here + size_t n = (size_t)pow(2.0, (double)ndiffs); for (size_t i = 0; i < memsize; i++) { diffcmppath[i].df_lev_score = 0; diffcmppath[i].df_path_n = 0; - for (size_t j = 0; j < (size_t)pow(2, (double)ndiffs); j++) + for (size_t j = 0; j < n; j++) diffcmppath[i].df_choice_mem[j] = -1; } @@ -428,6 +432,12 @@ linematch_nbuffers( diffcmppath_T *startNode = &diffcmppath[u]; *decisions = lalloc(sizeof(int) * memsize_decisions, TRUE); + if (*decisions == NULL) + { + vim_free(diffcmppath); + return 0; + } + size_t n_optimal = 0; test_charmatch_paths(startNode, 0); while (startNode->df_path_n > 0) diff --git a/src/version.c b/src/version.c index 90ddf0bab4..e2314ca12f 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1303, /**/ 1302, /**/