diff --git a/src/jansson_private.h b/src/jansson_private.h index 6d7e46c..55532eb 100644 --- a/src/jansson_private.h +++ b/src/jansson_private.h @@ -53,7 +53,7 @@ typedef struct { typedef struct { unsigned long serial; - char key[]; + char key[1]; } object_key_t; const object_key_t *jsonp_object_iter_fullkey(void *iter); diff --git a/src/value.c b/src/value.c index e024fdb..8e0cfa2 100644 --- a/src/value.c +++ b/src/value.c @@ -9,6 +9,7 @@ #include +#include #include #include @@ -124,9 +125,11 @@ int json_object_set_new_nocheck(json_t *json, const char *key, json_t *value) } object = json_to_object(json); - k = malloc(sizeof(object_key_t) + strlen(key) + 1); - if(!k) - return -1; + /* offsetof(...) returns the size of object_key_t without the + last, flexible member. This way, the correct amount is + allocated. */ + k = malloc(offsetof(object_key_t, key) + + strlen(key) + 1); if(!k) return -1; k->serial = object->serial++; strcpy(k->key, key);