summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2024-10-02 12:56:07 +0200
committerJunio C Hamano <gitster@pobox.com>2024-10-02 16:53:54 +0200
commit694af039f514eeca632903e000acbb21ff27a53c (patch)
tree399fed662885ef3ebc58ce001f6fe3122492fc42
parentreftable/stack: handle allocation failures in `reftable_new_stack()` (diff)
downloadgit-694af039f514eeca632903e000acbb21ff27a53c.tar.xz
git-694af039f514eeca632903e000acbb21ff27a53c.zip
reftable/stack: handle allocation failures in `stack_compact_range()`
Handle allocation failures in `stack_compact_range()`. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--reftable/stack.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/reftable/stack.c b/reftable/stack.c
index 1b77c9d014..2e6dd513d7 100644
--- a/reftable/stack.c
+++ b/reftable/stack.c
@@ -1131,6 +1131,11 @@ static int stack_compact_range(struct reftable_stack *st,
* from the point of view of the newer process.
*/
REFTABLE_CALLOC_ARRAY(table_locks, last - first + 1);
+ if (!table_locks) {
+ err = REFTABLE_OUT_OF_MEMORY_ERROR;
+ goto done;
+ }
+
for (i = last + 1; i > first; i--) {
stack_filename(&table_name, st, reader_name(st->readers[i - 1]));
@@ -1312,8 +1317,18 @@ static int stack_compact_range(struct reftable_stack *st,
* thus have to allocate `readers_len + 1` many entries.
*/
REFTABLE_CALLOC_ARRAY(names, st->merged->readers_len + 1);
- for (size_t i = 0; i < st->merged->readers_len; i++)
- names[i] = xstrdup(st->readers[i]->name);
+ if (!names) {
+ err = REFTABLE_OUT_OF_MEMORY_ERROR;
+ goto done;
+ }
+
+ for (size_t i = 0; i < st->merged->readers_len; i++) {
+ names[i] = reftable_strdup(st->readers[i]->name);
+ if (!names[i]) {
+ err = REFTABLE_OUT_OF_MEMORY_ERROR;
+ goto done;
+ }
+ }
first_to_replace = first;
last_to_replace = last;
}