* Implementation of keyval object
*/
+#define _GNU_SOURCE
#include <stdlib.h>
#include "keyval_type.h"
const int type, const void *val, const size_t size)
{
int must_free_obj = kv ? 0 : 1;
+ char *str;
if (!kv) {
kv = calloc(1, sizeof(keyval_t));
keyval_free(kv, must_free_obj);
return NULL;
}
- if (val)
+ if (val) {
memcpy(kv->val, val, size);
+ if (type == BUNDLE_TYPE_STR) {
+ str = (char *)kv->val;
+ if (str[size - 1] != '\0')
+ str[size - 1] = '\0';
+ }
+ }
}
kv->method = &method;
byte_size -= sz_keysize;
p += sz_keysize;
key = (char *)p;
- if ((strlen(key) + 1) != keysize)
- return 0;
if (byte_size < keysize)
return 0;
+ if (!key || (strnlen(key, keysize) + 1) != keysize)
+ return 0;
+
byte_size -= keysize;
p += keysize;
size = *((size_t *)p);