чување 9b5d8320dcb8d4fd9db780a7571701fecfd13297
родитељ e257772180568343938307f3e3cab1c6339a0cf6
Аутор: Страхиња Радић <sr@strahinja.org>
Датум: Wed, 17 Jul 2024 20:14:20 +0200
sled.c(do_search_replace): Bugfix: prevent memory leak by freeing buf
Diffstat:
измењених датотека: 1, додавања: 7(+), брисања: 6(-)
diff --git a/sled.c b/sled.c
@@ -264,7 +264,7 @@ do_search_replace(struct DrawState* state)
buf = calloc(bufsize, sizeof(uint32_t));
if (!buf)
- goto do_search_replace_error;
+ goto do_search_replace_alloc_error;
for (int row = start_row; row < end_row; row++)
{
@@ -279,7 +279,7 @@ do_search_replace(struct DrawState* state)
*found = 0;
buflen = u32_strlen(before);
ENSURE_SIZE(buf, temp, bufsize, buflen + 1, buflen + 1,
- do_search_replace_error, uint32_t);
+ do_search_replace_alloc_error, uint32_t);
U32_MEMCCPY(buf, before, bufsize, temp);
after = found + search_len;
*(after - 1) = 0;
@@ -288,7 +288,7 @@ do_search_replace(struct DrawState* state)
old_buflen = buflen;
buflen += input_len;
ENSURE_SIZE(buf, temp, bufsize, buflen + 1, buflen + 1,
- do_search_replace_error, uint32_t);
+ do_search_replace_alloc_error, uint32_t);
U32_MEMCCPY((buf + old_buflen), state->input,
input_len + 1, temp);
before = after;
@@ -299,7 +299,7 @@ do_search_replace(struct DrawState* state)
old_buflen = buflen;
buflen += after_len;
ENSURE_SIZE(buf, temp, bufsize, buflen + 1, buflen + 1,
- do_search_replace_error, uint32_t);
+ do_search_replace_alloc_error, uint32_t);
U32_MEMCCPY((buf + old_buflen), after, after_len + 1,
temp);
if (found) /* new found, after before */
@@ -310,13 +310,14 @@ do_search_replace(struct DrawState* state)
}
U32_SAFE_COPY(state->buffer[row].text, temp,
state->buffer[row].size, buf, bufsize,
- do_search_replace_error);
+ do_search_replace_alloc_error);
state->buffer[row].length = buflen;
}
free(buf);
return 0;
-do_search_replace_error:
+do_search_replace_alloc_error:
+ free(buf);
MEMCCPY(state->error, errors[ERR_CANT_ALLOC], LINE_DEFAULT, temp);
state->running = 0;
return 1;