Skip to content

Commit

Permalink
fix for issue 86
Browse files Browse the repository at this point in the history
  • Loading branch information
awalterschulze committed Jul 30, 2015
1 parent 33a4912 commit 8edb24c
Show file tree
Hide file tree
Showing 81 changed files with 8,824 additions and 1 deletion.
15 changes: 15 additions & 0 deletions plugin/testgen/testgen.go
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,8 @@ func (p *testProto) Generate(imports generator.PluginImports, file *generator.Fi
p.P(`panic(err)`)
p.Out()
p.P(`}`)
p.P(`littlefuzz := make([]byte, len(data))`)
p.P(`copy(littlefuzz, data)`)
p.P(`for i := range data {`)
p.In()
p.P(`data[i] = byte(popr.Intn(256))`)
Expand All @@ -313,6 +315,19 @@ func (p *testProto) Generate(imports generator.PluginImports, file *generator.Fi
p.P(`t.Fatalf("%#v !Proto %#v", msg, p)`)
p.Out()
p.P(`}`)
p.P(`if len(littlefuzz) > 0 {`)
p.In()
p.P(`fuzzamount := 100`)
p.P(`for i := 0; i < fuzzamount; i++ {`)
p.In()
p.P(`littlefuzz[popr.Intn(len(littlefuzz))] = byte(popr.Intn(256))`)
p.P(`littlefuzz = append(littlefuzz, byte(popr.Intn(256)))`)
p.Out()
p.P(`}`)
p.P(`//shouldn't panic`)
p.P(protoPkg.Use(), `.Unmarshal(littlefuzz, msg)`)
p.Out()
p.P(`}`)
p.Out()
p.P(`}`)
p.P()
Expand Down
35 changes: 34 additions & 1 deletion plugin/unmarshal/unmarshal.go
Original file line number Diff line number Diff line change
Expand Up @@ -327,6 +327,11 @@ func (p *unmarshal) mapField(varName string, field *descriptor.FieldDescriptorPr
p.P(`var mapmsglen int`)
p.decodeVarint("mapmsglen", "int")
p.P(`postmsgIndex := iNdEx + mapmsglen`)
p.P(`if mapmsglen < 0 {`)
p.In()
p.P(`return ErrInvalidLength` + p.localName)
p.Out()
p.P(`}`)
p.P(`if postmsgIndex > l {`)
p.In()
p.P(`return `, p.ioPkg.Use(), `.ErrUnexpectedEOF`)
Expand Down Expand Up @@ -577,6 +582,11 @@ func (p *unmarshal) field(file *descriptor.FileDescriptorProto, msg *generator.D
p.P(`var msglen int`)
p.decodeVarint("msglen", "int")
p.P(`postIndex := iNdEx + msglen`)
p.P(`if msglen < 0 {`)
p.In()
p.P(`return ErrInvalidLength` + p.localName)
p.Out()
p.P(`}`)
p.P(`if postIndex > l {`)
p.In()
p.P(`return `, p.ioPkg.Use(), `.ErrUnexpectedEOF`)
Expand Down Expand Up @@ -636,6 +646,11 @@ func (p *unmarshal) field(file *descriptor.FileDescriptorProto, msg *generator.D
case descriptor.FieldDescriptorProto_TYPE_BYTES:
p.P(`var byteLen int`)
p.decodeVarint("byteLen", "int")
p.P(`if byteLen < 0 {`)
p.In()
p.P(`return ErrInvalidLength` + p.localName)
p.Out()
p.P(`}`)
p.P(`postIndex := iNdEx + byteLen`)
p.P(`if postIndex > l {`)
p.In()
Expand Down Expand Up @@ -936,6 +951,11 @@ func (p *unmarshal) Generate(file *generator.FileDescriptor) {
p.P(`return err`)
p.Out()
p.P(`}`)
p.P(`if skippy < 0 {`)
p.In()
p.P(`return ErrInvalidLength`, p.localName)
p.Out()
p.P(`}`)
p.P(`if (iNdEx + skippy) > l {`)
p.In()
p.P(`return `, p.ioPkg.Use(), `.ErrUnexpectedEOF`)
Expand Down Expand Up @@ -975,6 +995,11 @@ func (p *unmarshal) Generate(file *generator.FileDescriptor) {
p.P(`return err`)
p.Out()
p.P(`}`)
p.P(`if skippy < 0 {`)
p.In()
p.P(`return ErrInvalidLength`, p.localName)
p.Out()
p.P(`}`)
p.P(`if (iNdEx + skippy) > l {`)
p.In()
p.P(`return `, p.ioPkg.Use(), `.ErrUnexpectedEOF`)
Expand Down Expand Up @@ -1065,6 +1090,9 @@ func (p *unmarshal) Generate(file *generator.FileDescriptor) {
}
}
iNdEx += length
if length < 0 {
return 0, ErrInvalidLength` + p.localName + `
}
return iNdEx, nil
case 3:
for {
Expand Down Expand Up @@ -1102,7 +1130,12 @@ func (p *unmarshal) Generate(file *generator.FileDescriptor) {
}
}
panic("unreachable")
}`)
}
var (
ErrInvalidLength` + p.localName + ` = ` + fmtPkg.Use() + `.Errorf("proto: negative length found during unmarshaling")
)
`)
}

func init() {
Expand Down
17 changes: 17 additions & 0 deletions test/casttype/combos/both/casttype.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 11 additions & 0 deletions test/casttype/combos/both/casttypepb_test.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 11 additions & 0 deletions test/casttype/combos/marshaler/casttypepb_test.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 11 additions & 0 deletions test/casttype/combos/neither/casttypepb_test.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 17 additions & 0 deletions test/casttype/combos/unmarshaler/casttype.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 11 additions & 0 deletions test/casttype/combos/unmarshaler/casttypepb_test.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 17 additions & 0 deletions test/casttype/combos/unsafeboth/casttype.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 11 additions & 0 deletions test/casttype/combos/unsafeboth/casttypepb_test.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 8edb24c

Please sign in to comment.