diff --git a/src/sample.c b/src/sample.c index f032ec4bb..7b636129a 100644 --- a/src/sample.c +++ b/src/sample.c @@ -2150,11 +2150,11 @@ static int sample_conv_be2hex_check(struct arg *args, struct sample_conv *conv, */ static int sample_conv_be2hex(const struct arg *args, struct sample *smp, void *private) { - struct buffer *trash = get_trash_chunk_sz(smp->data.u.str.data); + struct buffer *trash = get_trash_chunk_sz(smp->data.u.str.data * 2); int chunk_size = args[1].data.sint; const int last = args[2].data.sint ? smp->data.u.str.data - chunk_size + 1 : smp->data.u.str.data; int i; - int max_size; + size_t max_size; int ptr = 0; unsigned char c; @@ -2163,7 +2163,9 @@ static int sample_conv_be2hex(const struct arg *args, struct sample *smp, void * trash->data = 0; if (args[0].data.str.data == 0 && args[2].data.sint == 0) chunk_size = smp->data.u.str.data; - max_size = trash->size - 2 * chunk_size; + if (2 * (size_t)chunk_size > trash->size) + return 0; + max_size = trash->size - 2 * (size_t)chunk_size; while (ptr < last && trash->data <= max_size) { if (ptr) {