#include "str_buffer.h"
 
const char* str_buffer_make_owned_clone(StrBuffer* buffer, const char* str) {
    char* owned = strdup(str);
    buffer->n_owned_strings++;
    buffer->owned_strings =
        realloc(buffer->owned_strings, buffer->n_owned_strings * sizeof(const char*));
    buffer->owned_strings[buffer->n_owned_strings - 1] = owned;
    return owned;
}
 
void str_buffer_clear_all_clones(StrBuffer* buffer) {
    for(size_t i = 0; i < buffer->n_owned_strings; i++) {
        free(buffer->owned_strings[i]);
    }
    free(buffer->owned_strings);
    buffer->owned_strings = NULL;
}

V701 realloc() possible leak: when realloc() fails in allocating memory, original pointer 'buffer->owned_strings' is lost. Consider assigning realloc() to a temporary pointer.