diff --git a/src/pkg/asn1/marshal.go b/src/pkg/asn1/marshal.go index d4f8f782d45..328042b2b2c 100644 --- a/src/pkg/asn1/marshal.go +++ b/src/pkg/asn1/marshal.go @@ -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 diff --git a/src/pkg/asn1/marshal_test.go b/src/pkg/asn1/marshal_test.go index 67878f9bb93..492f39dace3 100644 --- a/src/pkg/asn1/marshal_test.go +++ b/src/pkg/asn1/marshal_test.go @@ -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"},