mirror of
https://github.com/neovim/neovim.git
synced 2025-10-07 10:26:31 +00:00
feat(rpc): allow empty string key in msgpack => Vim conversion
Problem: Sincee057b38e70
#20757 we support empty key in JSON encode/decode, but we don't allow it in RPC object => Vim dict conversion. But empty string is a valid key in Vim dicts and the msgpack spec. Empty string key was disallowed in7c01d5ff92
(2014) but that commit/PR doesn't explicitly discuss it, so presumably it was a "seems reasonable" decision (or Vimscript didn't allow empty keys until later). Solution: Remove the check in `object_to_vim()`. Note that `tv_dict_item_alloc_len` will invoke `memcpy(…, 0)` but that's allowed by the C spec: https://stackoverflow.com/a/3751937/152142
This commit is contained in:
@@ -328,15 +328,6 @@ bool object_to_vim(Object obj, typval_T *tv, Error *err)
|
||||
for (uint32_t i = 0; i < obj.data.dictionary.size; i++) {
|
||||
KeyValuePair item = obj.data.dictionary.items[i];
|
||||
String key = item.key;
|
||||
|
||||
if (key.size == 0) {
|
||||
api_set_error(err, kErrorTypeValidation,
|
||||
"Empty dictionary keys aren't allowed");
|
||||
// cleanup
|
||||
tv_dict_free(dict);
|
||||
return false;
|
||||
}
|
||||
|
||||
dictitem_T *const di = tv_dict_item_alloc(key.data);
|
||||
|
||||
if (!object_to_vim(item.value, &di->di_tv, err)) {
|
||||
|
Reference in New Issue
Block a user