summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornesstord <56038047+nesstord@users.noreply.github.com>2022-12-06 23:45:27 +0700
committerGitHub <noreply@github.com>2022-12-07 00:45:27 +0800
commit61fda0b1cad43ef7ce88ab7ad36be69fcd8cf8b3 (patch)
tree9c92c107bd30e575b855da6a6b1cd299fd663f18
parent5e0953d7783ce65707fa89f5a773697b69e82e96 (diff)
Fix binary string regex (#1415)
-rw-r--r--lib.go19
-rw-r--r--lib_test.go7
2 files changed, 8 insertions, 18 deletions
diff --git a/lib.go b/lib.go
index 16170a7..27b5ab7 100644
--- a/lib.go
+++ b/lib.go
@@ -702,8 +702,8 @@ func isNumeric(s string) (bool, int, float64) {
}
var (
- bstrExp = regexp.MustCompile(`_x[a-zA-Z\d]{4}_`)
- bstrEscapeExp = regexp.MustCompile(`x[a-zA-Z\d]{4}_`)
+ bstrExp = regexp.MustCompile(`_x[a-fA-F\d]{4}_`)
+ bstrEscapeExp = regexp.MustCompile(`x[a-fA-F\d]{4}_`)
)
// bstrUnmarshal parses the binary basic string, this will trim escaped string
@@ -729,16 +729,7 @@ func bstrUnmarshal(s string) (result string) {
}
if bstrExp.MatchString(subStr) {
cursor = match[1]
- v, err := strconv.Unquote(`"\u` + s[match[0]+2:match[1]-1] + `"`)
- if err != nil {
- if l > match[1]+6 && bstrEscapeExp.MatchString(s[match[1]:match[1]+6]) {
- result += subStr[:6]
- cursor = match[1] + 6
- continue
- }
- result += subStr
- continue
- }
+ v, _ := strconv.Unquote(`"\u` + s[match[0]+2:match[1]-1] + `"`)
result += v
}
}
@@ -769,12 +760,10 @@ func bstrMarshal(s string) (result string) {
}
if bstrExp.MatchString(subStr) {
cursor = match[1]
- _, err := strconv.Unquote(`"\u` + s[match[0]+2:match[1]-1] + `"`)
- if err == nil {
+ if _, err := strconv.Unquote(`"\u` + s[match[0]+2:match[1]-1] + `"`); err == nil {
result += "_x005F" + subStr
continue
}
- result += subStr
}
}
if cursor < l {
diff --git a/lib_test.go b/lib_test.go
index e96704f..ec5fd64 100644
--- a/lib_test.go
+++ b/lib_test.go
@@ -305,18 +305,19 @@ func TestBstrUnmarshal(t *testing.T) {
"*_x0008_*": "*\b*",
"*_x4F60__x597D_": "*你好",
"*_xG000_": "*_xG000_",
- "*_xG05F_x0001_*": "*_xG05F*",
+ "*_xG05F_x0001_*": "*_xG05F\x01*",
"*_x005F__x0008_*": "*_\b*",
"*_x005F_x0001_*": "*_x0001_*",
"*_x005f_x005F__x0008_*": "*_x005F_\b*",
- "*_x005F_x005F_xG05F_x0006_*": "*_x005F_xG05F*",
+ "*_x005F_x005F_xG05F_x0006_*": "*_x005F_xG05F\x06*",
"*_x005F_x005F_x005F_x0006_*": "*_x005F_x0006_*",
"_x005F__x0008_******": "_\b******",
"******_x005F__x0008_": "******_\b",
"******_x005F__x0008_******": "******_\b******",
+ "_x000x_x005F_x000x_": "_x000x_x000x_",
}
for bstr, expected := range bstrs {
- assert.Equal(t, expected, bstrUnmarshal(bstr))
+ assert.Equal(t, expected, bstrUnmarshal(bstr), bstr)
}
}