From e6950db87c0aa70ea12c2ccaba2de04aaedd0169 Mon Sep 17 00:00:00 2001 From: rexy712 Date: Mon, 6 Apr 2020 11:07:07 -0700 Subject: [PATCH] Disallow changing member key to empty string --- include/rjp.h | 4 ++-- src/rjp_object.c | 29 ++++++++++++++--------------- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/include/rjp.h b/include/rjp.h index 2d3537d..82c626f 100644 --- a/include/rjp.h +++ b/include/rjp.h @@ -171,8 +171,8 @@ RJP_value* rjp_remove_member(RJP_value* obj, RJP_value* member); void rjp_free_member_by_key(RJP_value* obj, const char* key); void rjp_free_member(RJP_value* obj, RJP_value* member); -void rjp_set_key_steal(RJP_value* dest, char* key, RJP_index keylen); -void rjp_set_key(RJP_value* dest, const char* key, RJP_index keylen); +RJP_value* rjp_set_key_steal(RJP_value* dest, char* key, RJP_index keylen); +RJP_value* rjp_set_key(RJP_value* dest, const char* key, RJP_index keylen); RJP_index rjp_num_members(const RJP_value* object); const RJP_string* rjp_member_key(const RJP_value* member); diff --git a/src/rjp_object.c b/src/rjp_object.c index c280883..5aa2bc5 100644 --- a/src/rjp_object.c +++ b/src/rjp_object.c @@ -115,25 +115,23 @@ void rjp_free_member(RJP_value* obj, RJP_value* member){ rjp_free_member_by_key(obj, ((RJP_object_member*)member)->name.value); } -void rjp_set_key(RJP_value* dest, const char* key, RJP_index keylen){ - if(key){ - if(!keylen){ - keylen = strlen(key); - } - }else{ - keylen = 0; +RJP_value* rjp_set_key(RJP_value* dest, const char* key, RJP_index keylen){ + if(!key) + return NULL; + if(!keylen){ + if(!(keylen = strlen(key))) + return NULL; } char* newkey = rjp_alloc(keylen + 1); strncpy(newkey, key, keylen+1); - rjp_set_key_steal(dest, newkey, keylen); + return rjp_set_key_steal(dest, newkey, keylen); } -void rjp_set_key_steal(RJP_value* dest, char* key, RJP_index keylen){ - if(key){ - if(!keylen){ - keylen = strlen(key); - } - }else{ - keylen = 0; +RJP_value* rjp_set_key_steal(RJP_value* dest, char* key, RJP_index keylen){ + if(!key) + return NULL; + if(!keylen){ + if(!(keylen = strlen(key))) + return NULL; } switch(dest->parent->type){ case rjp_json_object: @@ -144,6 +142,7 @@ void rjp_set_key_steal(RJP_value* dest, char* key, RJP_index keylen){ break; default: break; }; + return dest; } RJP_index rjp_num_members(const RJP_value* object){ switch(object->type){