ipfs / ipfs/go-ipld-cbor

when serialize Bignum, it drop the negative sign for bignum, would cause error in deserialize

Open
#69 1 comment 0 reactions 1 assignee Claimed by @whyrusleeping View on GitHub
kind/bug
Dominant language
Go
Stars
37
Forks
26
PR merge metrics
No merged PRs in 30d

Description

marshal for bigint is like:
https://github.com/ipfs/go-ipld-cbor/blob/e249008b68731703a093b723253be5175d518ed0/refmt.go#L27-L36
```go
var BigIntAtlasEntry = atlas.BuildEntry(big.Int{}).Transform().
TransformMarshal(atlas.MakeMarshalTransformFunc(
func(i big.Int) ([]byte, error) {
return i.Bytes(), nil
})).
TransformUnmarshal(atlas.MakeUnmarshalTransformFunc(
func(x []byte) (big.Int, error) {
return *big.NewInt(0).SetBytes(x), nil
})).
Complete()
```
but `i.Bytes()` would drop the sign for bignum!
```go
// Bytes returns the absolute value of x as a big-endian byte slice.
func (x *Int) Bytes() []byte {
buf := make([]byte, len(x.abs)*_S)
return buf[x.abs.bytes(buf):]
}
```

and when deserialize, the bigint just fill for `big.NewInt(0)`, it's a positive number. So the negative sign is dropped.

I think it not in expectation

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.