1
0
mirror of https://github.com/golang/go synced 2024-11-21 22:54:40 -07:00

asn1 incorrectly encoded signed integers. When determining the

encoded length it was not taking into account the sign bit.

Fixes #997.

R=agl1, gri
CC=golang-dev
https://golang.org/cl/1870047
This commit is contained in:
Nicholas Waples 2010-08-09 10:25:54 -04:00 committed by Adam Langley
parent bc4a9caa41
commit e2c7e53dcf
2 changed files with 16 additions and 5 deletions

View File

@ -123,13 +123,20 @@ func marshalInt64(out *forkableWriter, i int64) (err os.Error) {
}
func int64Length(i int64) (numBytes int) {
if i == 0 {
return 1
numBytes = 1
if i > 0 {
for i > 127 {
numBytes++
i >>= 8
}
}
for i > 0 {
numBytes++
i >>= 8
if i < 0 {
for i < -128 {
numBytes++
i >>= 8
}
}
return

View File

@ -59,6 +59,10 @@ type marshalTest struct {
var marshalTests = []marshalTest{
marshalTest{10, "02010a"},
marshalTest{127, "02017f"},
marshalTest{128, "02020080"},
marshalTest{-128, "020180"},
marshalTest{-129, "0202ff7f"},
marshalTest{intStruct{64}, "3003020140"},
marshalTest{twoIntStruct{64, 65}, "3006020140020141"},
marshalTest{nestedStruct{intStruct{127}}, "3005300302017f"},