Skip to content
This repository was archived by the owner on Mar 8, 2020. It is now read-only.

Commit 535f594

Browse files
committed
add tests to highligh null quoting issue
Signed-off-by: Alexander Bezzubov <[email protected]>
1 parent 6263505 commit 535f594

File tree

4 files changed

+45
-2
lines changed

4 files changed

+45
-2
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,5 @@
44
.sdk
55
.config
66
build
7+
node_modules
8+
.vscode

driver/normalizer/normalizer.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ var Preprocessors = []Mapping{
3636
Map(
3737
Part("_", Obj{
3838
uast.KeyType: String("StringLiteral"),
39-
"value": AnyNode(nil),
39+
"value": Any(),
4040
"extra": Fields{
4141
{Name: "raw", Op: Var("raw")},
4242
{Name: "rawValue", Op: Any()},
@@ -360,7 +360,6 @@ func (op singleQuote) Check(st *State, n nodes.Node) (bool, error) {
360360
if !strings.HasPrefix(s, `'`) || !strings.HasSuffix(s, `'`) {
361361
return false, nil
362362
}
363-
s = s[1 : len(s)-1]
364363
s, err := unquoteSingle(s)
365364
if err != nil {
366365
return false, err

driver/normalizer/strconv.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111

1212
// unquoteSingle is the same as strconv.Unquote, but uses ' as a quote.
1313
func unquoteSingle(s string) (string, error) {
14+
s = s[1 : len(s)-1]
1415
var runeTmp [utf8.UTFMax]byte
1516
buf := make([]byte, 0, 3*len(s)/2)
1617
for len(s) > 0 {

driver/normalizer/strconv_test.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package normalizer
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/require"
7+
)
8+
9+
func TestUnquoteSingle_NullGo(t *testing.T) {
10+
s, err := unquoteSingle("'\x00'")
11+
require.NoError(t, err)
12+
13+
require.Equal(t, "\u0000", s)
14+
}
15+
16+
func TestUnquoteSingle_NullJs(t *testing.T) {
17+
s, err := unquoteSingle(`'\0'`)
18+
require.NoError(t, err)
19+
20+
require.Equal(t, "\u0000", s)
21+
}
22+
23+
func TestUnquoteSingle_NullAndQuoteBack(t *testing.T) {
24+
const o = "'\x00'"
25+
26+
s, err := unquoteSingle(o)
27+
require.NoError(t, err)
28+
q := quoteSingle(s)
29+
30+
require.Equal(t, o, q)
31+
}
32+
33+
func TestUnquoteSingle_StringAndQuoteBack(t *testing.T) {
34+
const o = "'rand'"
35+
36+
s, err := unquoteSingle(o)
37+
require.NoError(t, err)
38+
q := quoteSingle(s)
39+
40+
require.Equal(t, o, q)
41+
}

0 commit comments

Comments
 (0)