sled

Једноставни уређивач текста
git clone https://git.sr.ht/~strahinja/sled
Дневник | Датотеке | Референце | ПРОЧИТАЈМЕ | ЛИЦЕНЦА

чување 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:
Msled.c | 13+++++++------
измењених датотека: 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;