Skip to content

Commit

Permalink
fix: not initialize cap and len of emptyslice (#438)
Browse files Browse the repository at this point in the history
  • Loading branch information
liuq19 authored May 29, 2023
1 parent fe92cce commit d7db216
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 0 deletions.
2 changes: 2 additions & 0 deletions internal/decoder/assembler_amd64_go116.go
Original file line number Diff line number Diff line change
Expand Up @@ -1656,6 +1656,8 @@ func (self *_Assembler) _asm_OP_check_empty(p *_Instr) {
self.Sjmp("JNE" , "_not_empty_array_{n}") // JNE _not_empty_array_{n}
self.Emit("MOVQ", _AX, _IC) // MOVQ AX, IC
self.StorePtr(_Zero_Base, jit.Ptr(_VP, 0), _AX) // MOVQ $zerobase, (VP)
self.Emit("PXOR" , _X0, _X0) // PXOR X0, X0
self.Emit("MOVOU", _X0, jit.Ptr(_VP, 8)) // MOVOU X0, 8(VP)
self.Xjmp("JMP" , p.vi()) // JMP {p.vi()}
self.Link("_not_empty_array_{n}")
} else {
Expand Down
2 changes: 2 additions & 0 deletions internal/decoder/assembler_amd64_go117.go
Original file line number Diff line number Diff line change
Expand Up @@ -1646,6 +1646,8 @@ func (self *_Assembler) _asm_OP_check_empty(p *_Instr) {
self.Sjmp("JNE" , "_not_empty_array_{n}") // JNE _not_empty_array_{n}
self.Emit("MOVQ", _AX, _IC) // MOVQ AX, IC
self.StorePtr(_Zero_Base, jit.Ptr(_VP, 0), _AX) // MOVQ $zerobase, (VP)
self.Emit("PXOR", _X0, _X0) // PXOR X0, X0
self.Emit("MOVOU", _X0, jit.Ptr(_VP, 8)) // MOVOU X0, 8(VP)
self.Xjmp("JMP" , p.vi()) // JMP {p.vi()}
self.Link("_not_empty_array_{n}")
} else {
Expand Down
42 changes: 42 additions & 0 deletions issue_test/issue437_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
/*
* Copyright 2023 ByteDance Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package issue_test

import (
`github.com/bytedance/sonic`
`encoding/json`
`testing`
`github.com/stretchr/testify/require`
)

// Person document for testing
type Person struct {
Name string `bson:"name,omitempty"`
Age uint `bson:"age,omitempty"`
}


func TestIssue437(t *testing.T) {
stdv := []Person{{Name: "hello world"}}
sonicv := []Person{{Name: "hello world"}}

data := []byte(`[]`)
stde := json.Unmarshal(data, &stdv)
sonice := sonic.ConfigStd.Unmarshal(data, &sonicv)
require.Equal(t, stde, sonice)
require.Equal(t, stdv, sonicv)
}

0 comments on commit d7db216

Please sign in to comment.