Merge pull request #367 from orisano/fix/#335

Fix validation of decoding of UTF-8 character
This commit is contained in:
Masaaki Goshima 2022-05-02 14:07:50 +09:00 committed by GitHub
commit 41b2e78a03
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 0 deletions

View File

@ -3959,3 +3959,12 @@ func TestIssue362(t *testing.T) {
assertErr(t, err)
assertEq(t, "TestEmbeddedPrimitiveAlias", originalCombiner, newCombiner)
}
func TestIssue335(t *testing.T) {
var v []string
in := []byte(`["\u","A"]`)
err := json.Unmarshal(in, &v)
if err == nil {
t.Errorf("unexpected success")
}
}

View File

@ -2,6 +2,7 @@ package decoder
import (
"bytes"
"fmt"
"reflect"
"unicode"
"unicode/utf16"
@ -323,6 +324,12 @@ func (d *stringDecoder) decodeByte(buf []byte, cursor int64) ([]byte, int64, err
if cursor+5 >= buflen {
return nil, 0, errors.ErrUnexpectedEndOfJSON("escaped string", cursor)
}
for i := int64(1); i <= 4; i++ {
c := char(b, cursor+i)
if !(('0' <= c && c <= '9') || ('a' <= c && c <= 'f') || ('A' <= c && c <= 'F')) {
return nil, 0, errors.ErrSyntax(fmt.Sprintf("json: invalid character %c in \\u hexadecimal character escape", c), cursor+i)
}
}
cursor += 5
default:
return nil, 0, errors.ErrUnexpectedEndOfJSON("escaped string", cursor)