Disallow changing member key to empty string

This commit is contained in:
rexy712 2020-04-06 11:07:07 -07:00
parent 7395f41ccc
commit e6950db87c
2 changed files with 16 additions and 17 deletions

View File

@ -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_by_key(RJP_value* obj, const char* key);
void rjp_free_member(RJP_value* obj, RJP_value* member); void rjp_free_member(RJP_value* obj, RJP_value* member);
void rjp_set_key_steal(RJP_value* dest, char* key, RJP_index keylen); RJP_value* 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(RJP_value* dest, const char* key, RJP_index keylen);
RJP_index rjp_num_members(const RJP_value* object); RJP_index rjp_num_members(const RJP_value* object);
const RJP_string* rjp_member_key(const RJP_value* member); const RJP_string* rjp_member_key(const RJP_value* member);

View File

@ -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); 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){ RJP_value* rjp_set_key(RJP_value* dest, const char* key, RJP_index keylen){
if(key){ if(!key)
return NULL;
if(!keylen){ if(!keylen){
keylen = strlen(key); if(!(keylen = strlen(key)))
} return NULL;
}else{
keylen = 0;
} }
char* newkey = rjp_alloc(keylen + 1); char* newkey = rjp_alloc(keylen + 1);
strncpy(newkey, key, 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){ RJP_value* rjp_set_key_steal(RJP_value* dest, char* key, RJP_index keylen){
if(key){ if(!key)
return NULL;
if(!keylen){ if(!keylen){
keylen = strlen(key); if(!(keylen = strlen(key)))
} return NULL;
}else{
keylen = 0;
} }
switch(dest->parent->type){ switch(dest->parent->type){
case rjp_json_object: case rjp_json_object:
@ -144,6 +142,7 @@ void rjp_set_key_steal(RJP_value* dest, char* key, RJP_index keylen){
break; break;
default: break; default: break;
}; };
return dest;
} }
RJP_index rjp_num_members(const RJP_value* object){ RJP_index rjp_num_members(const RJP_value* object){
switch(object->type){ switch(object->type){