X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fcore%2Fdata.c;h=d34a4dd711250041cd26d463575535bd70522f4a;hb=6d8389c7e3f2bad7ffd21c132451a8ee2c4bda8a;hp=8c54c9390842f0014df803009af11358fe6fbc76;hpb=e77d39dc08f318db6fcf233e85c93e347a03f80f;p=sysdb.git diff --git a/src/core/data.c b/src/core/data.c index 8c54c93..d34a4dd 100644 --- a/src/core/data.c +++ b/src/core/data.c @@ -1042,12 +1042,17 @@ sdb_data_format(const sdb_data_t *datum, char *buf, size_t buflen, int quoted) } /* sdb_data_format */ int -sdb_data_parse(char *str, int type, sdb_data_t *data) +sdb_data_parse(const char *str, int type, sdb_data_t *data) { sdb_data_t tmp; char *endptr = NULL; + if (! str) { + errno = EINVAL; + return -1; + } + errno = 0; if (type == SDB_TYPE_INTEGER) { tmp.data.integer = strtoll(str, &endptr, 0); @@ -1056,16 +1061,20 @@ sdb_data_parse(char *str, int type, sdb_data_t *data) tmp.data.decimal = strtod(str, &endptr); } else if (type == SDB_TYPE_STRING) { - tmp.data.string = str; + tmp.data.string = strdup(str); + if (! tmp.data.string) + return -1; } else if (type == SDB_TYPE_DATETIME) { double datetime = strtod(str, &endptr); tmp.data.datetime = DOUBLE_TO_SDB_TIME(datetime); } else if (type == SDB_TYPE_BINARY) { - /* we don't support any binary information containing 0-bytes */ + /* we don't support any binary information containing 0-bytes here */ + tmp.data.binary.datum = (unsigned char *)strdup(str); + if (! tmp.data.binary.datum) + return -1; tmp.data.binary.length = strlen(str); - tmp.data.binary.datum = (unsigned char *)str; } else if (type == SDB_TYPE_REGEX) { tmp.data.re.raw = strdup(str);