mirror of
https://github.com/ii64/sonic.git
synced 2026-06-22 09:26:44 +08:00
fix: match empty string in path (#387)
This commit is contained in:
parent
8dbcce341b
commit
114b8168d4
8 changed files with 877 additions and 836 deletions
|
|
@ -123,6 +123,7 @@ func TestExportErrNotExist(t *testing.T) {
|
||||||
// {`{"a":null}`, []interface{}{"a", 0}, ErrNotExist},
|
// {`{"a":null}`, []interface{}{"a", 0}, ErrNotExist},
|
||||||
// {`{"a":null}`, []interface{}{"a", "b", 0}, ErrNotExist},
|
// {`{"a":null}`, []interface{}{"a", "b", 0}, ErrNotExist},
|
||||||
{`{"":{"b":123}}`, []interface{}{"b"}, ErrNotExist},
|
{`{"":{"b":123}}`, []interface{}{"b"}, ErrNotExist},
|
||||||
|
{`{"":{"b":123}}`, []interface{}{"", ""}, ErrNotExist},
|
||||||
{`{"a":{"b":123}}`, []interface{}{"b"}, ErrNotExist},
|
{`{"a":{"b":123}}`, []interface{}{"b"}, ErrNotExist},
|
||||||
{`{"a":{"b":123}}`, []interface{}{"a", "c"}, ErrNotExist},
|
{`{"a":{"b":123}}`, []interface{}{"a", "c"}, ErrNotExist},
|
||||||
{`{"a":{"c": null, "b":{}}}`, []interface{}{"a", "b", "c"}, ErrNotExist},
|
{`{"a":{"c": null, "b":{}}}`, []interface{}{"a", "b", "c"}, ErrNotExist},
|
||||||
|
|
@ -209,6 +210,8 @@ func TestSearcher_GetByPathSingle(t *testing.T) {
|
||||||
{`"abc"`, Path{}, "abc", Ok},
|
{`"abc"`, Path{}, "abc", Ok},
|
||||||
{`"a\"\\bc"`, Path{}, "a\"\\bc", Ok},
|
{`"a\"\\bc"`, Path{}, "a\"\\bc", Ok},
|
||||||
{`{"a":1}`, Path{"a"}, 1.0, Ok},
|
{`{"a":1}`, Path{"a"}, 1.0, Ok},
|
||||||
|
{`{"":1}`, Path{""}, 1.0, Ok},
|
||||||
|
{`{"":{"":1}}`, Path{"", ""}, 1.0, Ok},
|
||||||
{`[1,2,3]`, Path{0}, 1.0, Ok},
|
{`[1,2,3]`, Path{0}, 1.0, Ok},
|
||||||
{`[1,2,3]`, Path{1}, 2.0, Ok},
|
{`[1,2,3]`, Path{1}, 2.0, Ok},
|
||||||
{`[1,2,3]`, Path{2}, 3.0, Ok},
|
{`[1,2,3]`, Path{2}, 3.0, Ok},
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -9,7 +9,7 @@ package avx
|
||||||
func __native_entry__() uintptr
|
func __native_entry__() uintptr
|
||||||
|
|
||||||
var (
|
var (
|
||||||
_subr__f32toa = __native_entry__() + 28640
|
_subr__f32toa = __native_entry__() + 28672
|
||||||
_subr__f64toa = __native_entry__() + 448
|
_subr__f64toa = __native_entry__() + 448
|
||||||
_subr__get_by_path = __native_entry__() + 25568
|
_subr__get_by_path = __native_entry__() + 25568
|
||||||
_subr__html_escape = __native_entry__() + 9296
|
_subr__html_escape = __native_entry__() + 9296
|
||||||
|
|
@ -24,8 +24,8 @@ var (
|
||||||
_subr__u64toa = __native_entry__() + 3856
|
_subr__u64toa = __native_entry__() + 3856
|
||||||
_subr__unquote = __native_entry__() + 6928
|
_subr__unquote = __native_entry__() + 6928
|
||||||
_subr__validate_one = __native_entry__() + 22368
|
_subr__validate_one = __native_entry__() + 22368
|
||||||
_subr__validate_utf8 = __native_entry__() + 27392
|
_subr__validate_utf8 = __native_entry__() + 27424
|
||||||
_subr__validate_utf8_fast = __native_entry__() + 28064
|
_subr__validate_utf8_fast = __native_entry__() + 28096
|
||||||
_subr__value = __native_entry__() + 12480
|
_subr__value = __native_entry__() + 12480
|
||||||
_subr__vnumber = __native_entry__() + 16256
|
_subr__vnumber = __native_entry__() + 16256
|
||||||
_subr__vsigned = __native_entry__() + 17872
|
_subr__vsigned = __native_entry__() + 17872
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -9,7 +9,7 @@ package avx2
|
||||||
func __native_entry__() uintptr
|
func __native_entry__() uintptr
|
||||||
|
|
||||||
var (
|
var (
|
||||||
_subr__f32toa = __native_entry__() + 34624
|
_subr__f32toa = __native_entry__() + 34656
|
||||||
_subr__f64toa = __native_entry__() + 736
|
_subr__f64toa = __native_entry__() + 736
|
||||||
_subr__get_by_path = __native_entry__() + 29232
|
_subr__get_by_path = __native_entry__() + 29232
|
||||||
_subr__html_escape = __native_entry__() + 10944
|
_subr__html_escape = __native_entry__() + 10944
|
||||||
|
|
@ -24,8 +24,8 @@ var (
|
||||||
_subr__u64toa = __native_entry__() + 4144
|
_subr__u64toa = __native_entry__() + 4144
|
||||||
_subr__unquote = __native_entry__() + 8336
|
_subr__unquote = __native_entry__() + 8336
|
||||||
_subr__validate_one = __native_entry__() + 26064
|
_subr__validate_one = __native_entry__() + 26064
|
||||||
_subr__validate_utf8 = __native_entry__() + 31056
|
_subr__validate_utf8 = __native_entry__() + 31088
|
||||||
_subr__validate_utf8_fast = __native_entry__() + 32016
|
_subr__validate_utf8_fast = __native_entry__() + 32048
|
||||||
_subr__value = __native_entry__() + 15472
|
_subr__value = __native_entry__() + 15472
|
||||||
_subr__vnumber = __native_entry__() + 19280
|
_subr__vnumber = __native_entry__() + 19280
|
||||||
_subr__vsigned = __native_entry__() + 20896
|
_subr__vsigned = __native_entry__() + 20896
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -9,7 +9,7 @@ package sse
|
||||||
func __native_entry__() uintptr
|
func __native_entry__() uintptr
|
||||||
|
|
||||||
var (
|
var (
|
||||||
_subr__f32toa = __native_entry__() + 29264
|
_subr__f32toa = __native_entry__() + 29312
|
||||||
_subr__f64toa = __native_entry__() + 448
|
_subr__f64toa = __native_entry__() + 448
|
||||||
_subr__get_by_path = __native_entry__() + 26208
|
_subr__get_by_path = __native_entry__() + 26208
|
||||||
_subr__html_escape = __native_entry__() + 9360
|
_subr__html_escape = __native_entry__() + 9360
|
||||||
|
|
@ -24,8 +24,8 @@ var (
|
||||||
_subr__u64toa = __native_entry__() + 3840
|
_subr__u64toa = __native_entry__() + 3840
|
||||||
_subr__unquote = __native_entry__() + 6992
|
_subr__unquote = __native_entry__() + 6992
|
||||||
_subr__validate_one = __native_entry__() + 22576
|
_subr__validate_one = __native_entry__() + 22576
|
||||||
_subr__validate_utf8 = __native_entry__() + 28032
|
_subr__validate_utf8 = __native_entry__() + 28080
|
||||||
_subr__validate_utf8_fast = __native_entry__() + 28704
|
_subr__validate_utf8_fast = __native_entry__() + 28752
|
||||||
_subr__value = __native_entry__() + 12560
|
_subr__value = __native_entry__() + 12560
|
||||||
_subr__vnumber = __native_entry__() + 16416
|
_subr__vnumber = __native_entry__() + 16416
|
||||||
_subr__vsigned = __native_entry__() + 18064
|
_subr__vsigned = __native_entry__() + 18064
|
||||||
|
|
|
||||||
|
|
@ -1781,6 +1781,12 @@ static always_inline long match_key(const GoString *src, long *p, const GoString
|
||||||
/* compare non-escaped strings */
|
/* compare non-escaped strings */
|
||||||
if (likely(v == -1 || v > se)) {
|
if (likely(v == -1 || v > se)) {
|
||||||
long sn = se - si - 1;
|
long sn = se - si - 1;
|
||||||
|
|
||||||
|
// check empty keys
|
||||||
|
if (!sn && !key.len) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
return sn == key.len && xmemcmpeq(src->buf + si, key.buf, key.len);
|
return sn == key.len && xmemcmpeq(src->buf + si, key.buf, key.len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue