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.
diff --git a/src/standard.c b/src/standard.c
index 72fd0d6..3ed1e2a 100644
--- a/src/standard.c
+++ b/src/standard.c
@@ -1367,6 +1367,7 @@
int len;
const char *p = source;
int i,j;
+ int alloc;
len = strlen(source);
if (len % 2) {
@@ -1375,12 +1376,24 @@
}
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 @@
bad_input:
memprintf(err, "an hex digit is expected (found '%c')", p[i-1]);
- free(binstr);
+ if (alloc)
+ free(binstr);
return 0;
}