Skip to content

Commit 01f6f2d

Browse files
authored
common/hexutil: allow empty strings when decoding JSON (ethereum#3559)
1 parent c5df37c commit 01f6f2d

File tree

2 files changed

+5
-5
lines changed

2 files changed

+5
-5
lines changed

common/hexutil/json.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ func checkJSON(input []byte) (raw []byte, err error) {
237237
return nil, errNonString
238238
}
239239
if len(input) == 2 {
240-
return nil, ErrEmptyString
240+
return nil, nil // empty strings are allowed
241241
}
242242
if !bytesHave0xPrefix(input[1:]) {
243243
return nil, ErrMissingPrefix
@@ -255,7 +255,7 @@ func checkNumberJSON(input []byte) (raw []byte, err error) {
255255
}
256256
input = input[1 : len(input)-1]
257257
if len(input) == 0 {
258-
return nil, ErrEmptyString
258+
return nil, nil // empty strings are allowed
259259
}
260260
if !bytesHave0xPrefix(input) {
261261
return nil, ErrMissingPrefix

common/hexutil/json_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,13 @@ var unmarshalBytesTests = []unmarshalTest{
6060
{input: "", wantErr: errNonString},
6161
{input: "null", wantErr: errNonString},
6262
{input: "10", wantErr: errNonString},
63-
{input: `""`, wantErr: ErrEmptyString},
6463
{input: `"0"`, wantErr: ErrMissingPrefix},
6564
{input: `"0x0"`, wantErr: ErrOddLength},
6665
{input: `"0xxx"`, wantErr: ErrSyntax},
6766
{input: `"0x01zz01"`, wantErr: ErrSyntax},
6867

6968
// valid encoding
69+
{input: `""`, want: referenceBytes("")},
7070
{input: `"0x"`, want: referenceBytes("")},
7171
{input: `"0x02"`, want: referenceBytes("02")},
7272
{input: `"0X02"`, want: referenceBytes("02")},
@@ -125,14 +125,14 @@ var unmarshalBigTests = []unmarshalTest{
125125
{input: "", wantErr: errNonString},
126126
{input: "null", wantErr: errNonString},
127127
{input: "10", wantErr: errNonString},
128-
{input: `""`, wantErr: ErrEmptyString},
129128
{input: `"0"`, wantErr: ErrMissingPrefix},
130129
{input: `"0x"`, wantErr: ErrEmptyNumber},
131130
{input: `"0x01"`, wantErr: ErrLeadingZero},
132131
{input: `"0xx"`, wantErr: ErrSyntax},
133132
{input: `"0x1zz01"`, wantErr: ErrSyntax},
134133

135134
// valid encoding
135+
{input: `""`, want: big.NewInt(0)},
136136
{input: `"0x0"`, want: big.NewInt(0)},
137137
{input: `"0x2"`, want: big.NewInt(0x2)},
138138
{input: `"0x2F2"`, want: big.NewInt(0x2f2)},
@@ -198,7 +198,6 @@ var unmarshalUint64Tests = []unmarshalTest{
198198
{input: "", wantErr: errNonString},
199199
{input: "null", wantErr: errNonString},
200200
{input: "10", wantErr: errNonString},
201-
{input: `""`, wantErr: ErrEmptyString},
202201
{input: `"0"`, wantErr: ErrMissingPrefix},
203202
{input: `"0x"`, wantErr: ErrEmptyNumber},
204203
{input: `"0x01"`, wantErr: ErrLeadingZero},
@@ -207,6 +206,7 @@ var unmarshalUint64Tests = []unmarshalTest{
207206
{input: `"0x1zz01"`, wantErr: ErrSyntax},
208207

209208
// valid encoding
209+
{input: `""`, want: uint64(0)},
210210
{input: `"0x0"`, want: uint64(0)},
211211
{input: `"0x2"`, want: uint64(0x2)},
212212
{input: `"0x2F2"`, want: uint64(0x2f2)},

0 commit comments

Comments
 (0)