datasets: allocates on the heap if string base64 is long

Ticket: 8110
(cherry picked from commit d6bc718e30)
pull/14599/head
Philippe Antoine 5 months ago committed by Shivani Bhardwaj
parent 32a1b9ae6a
commit d767dfadcd

@ -49,8 +49,8 @@ int StringAsBase64(const void *s, char *out, size_t out_size)
unsigned long len = SCBase64EncodeBufferSize(str->len);
if (len + 2 > out_size) {
// linefeed and final zero
return 0;
// linefeed and final zero : signal we need more space
return len + 2;
}
if (SCBase64Encode((unsigned char *)str->ptr, str->len, (uint8_t *)out, &len) != SC_BASE64_OK)
return 0;

@ -401,7 +401,26 @@ int THashWalk(THashTableContext *ctx, THashFormatFunc FormatterFunc, THashOutput
char output_string[1024] = "";
int size = FormatterFunc(h->data, output_string, sizeof(output_string));
if (size > 0) {
if (OutputterFunc(output_ctx, (const uint8_t *)output_string, size) < 0) {
if (size > 1024) {
// we did not provide enough space on the stack, let's allocate on the heap
char *out_alloc = SCCalloc(1, size);
if (out_alloc == NULL) {
err = true;
break;
}
size = FormatterFunc(h->data, out_alloc, size);
if (size == 0) {
err = true;
SCFree(out_alloc);
break;
}
if (OutputterFunc(output_ctx, (const uint8_t *)out_alloc, size) < 0) {
err = true;
SCFree(out_alloc);
break;
}
SCFree(out_alloc);
} else if (OutputterFunc(output_ctx, (const uint8_t *)output_string, size) < 0) {
err = true;
break;
}

Loading…
Cancel
Save