From 9645d42d747288b66d7e9c94511e2bfe31a6bc7a Mon Sep 17 00:00:00 2001 From: Thierry FOURNIER Date: Fri, 6 Dec 2013 19:59:28 +0100 Subject: [PATCH] MINOR: standard: The function parse_binary() can use preallocated buffer Let the function support pre-allocated buffers if the argument is not null, or allocate its own buffer if it is null. --- src/standard.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/standard.c b/src/standard.c index 72fd0d6d4..3ed1e2aed 100644 --- a/src/standard.c +++ b/src/standard.c @@ -1367,6 +1367,7 @@ int parse_binary(const char *source, char **binstr, int *binstrlen, char **err) int len; const char *p = source; int i,j; + int alloc; len = strlen(source); if (len % 2) { @@ -1375,12 +1376,24 @@ int parse_binary(const char *source, char **binstr, int *binstrlen, char **err) } len = len >> 1; - *binstrlen = len; - *binstr = calloc(len, sizeof(char)); + if (!*binstr) { - memprintf(err, "out of memory while loading string pattern"); - return 0; + *binstr = calloc(len, sizeof(char)); + if (!*binstr) { + memprintf(err, "out of memory while loading string pattern"); + return 0; + } + alloc = 1; } + else { + if (*binstrlen < len) { + memprintf(err, "no space avalaible in the buffer. expect %d, provides %d", + len, *binstrlen); + return 0; + } + alloc = 0; + } + *binstrlen = len; i = j = 0; while (j < len) { @@ -1394,7 +1407,8 @@ int parse_binary(const char *source, char **binstr, int *binstrlen, char **err) bad_input: memprintf(err, "an hex digit is expected (found '%c')", p[i-1]); - free(binstr); + if (alloc) + free(binstr); return 0; }