diff options
author | ZyX <kp-pav@yandex.ru> | 2016-03-07 08:59:03 +0300 |
---|---|---|
committer | ZyX <kp-pav@yandex.ru> | 2016-04-18 02:48:20 +0300 |
commit | 032ac502ff1378757d9ba56e5760d362570e48e4 (patch) | |
tree | 3de7890a19357b3534a79018c43fade4f80e2663 | |
parent | eb806c96205ff776d9cd5df82da72c14e030f6d6 (diff) | |
download | rneovim-032ac502ff1378757d9ba56e5760d362570e48e4.tar.gz rneovim-032ac502ff1378757d9ba56e5760d362570e48e4.tar.bz2 rneovim-032ac502ff1378757d9ba56e5760d362570e48e4.zip |
eval/decode: Do not loose high surrogates followed by high surrogates
-rw-r--r-- | src/nvim/eval/decode.c | 1 | ||||
-rw-r--r-- | test/functional/eval/json_functions_spec.lua | 2 |
2 files changed, 3 insertions, 0 deletions
diff --git a/src/nvim/eval/decode.c b/src/nvim/eval/decode.c index 266da86b74..604b758344 100644 --- a/src/nvim/eval/decode.c +++ b/src/nvim/eval/decode.c @@ -499,6 +499,7 @@ json_decode_string_cycle_start: hasnul = true; } if (SURROGATE_HI_START <= ch && ch <= SURROGATE_HI_END) { + PUT_FST_IN_PAIR(fst_in_pair, str_end); fst_in_pair = (int) ch; } else if (SURROGATE_LO_START <= ch && ch <= SURROGATE_LO_END && fst_in_pair != 0) { diff --git a/test/functional/eval/json_functions_spec.lua b/test/functional/eval/json_functions_spec.lua index 58030fca72..6379e7fed8 100644 --- a/test/functional/eval/json_functions_spec.lua +++ b/test/functional/eval/json_functions_spec.lua @@ -389,6 +389,8 @@ describe('json_decode() function', function() eq('\t\xED\xB0\x80', funcs.json_decode('"\\t\\uDC00"')) eq('\xED\xA0\x80¬', funcs.json_decode('"\\uD800\\u00AC"')) + + eq('\xED\xA0\x80\xED\xA0\x80', funcs.json_decode('"\\uD800\\uD800"')) end) local sp_decode_eq = function(expected, json) |