handle incomplete versionstamp attempting to be packed into vanilla tuple

This commit is contained in:
Ryan Worl 2019-03-09 11:11:22 -05:00
parent 8066556753
commit 92167fd03f
1 changed files with 8 additions and 4 deletions

View File

@ -307,7 +307,7 @@ func (p *packer) encodeVersionstamp(v Versionstamp) {
p.putBytes(v.Bytes()) p.putBytes(v.Bytes())
} }
func (p *packer) encodeTuple(t Tuple, nested bool) { func (p *packer) encodeTuple(t Tuple, nested bool, versionstamps bool) {
if nested { if nested {
p.putByte(nestedCode) p.putByte(nestedCode)
} }
@ -315,7 +315,7 @@ func (p *packer) encodeTuple(t Tuple, nested bool) {
for i, e := range t { for i, e := range t {
switch e := e.(type) { switch e := e.(type) {
case Tuple: case Tuple:
p.encodeTuple(e, true) p.encodeTuple(e, true, versionstamps)
case nil: case nil:
p.putByte(nilCode) p.putByte(nilCode)
if nested { if nested {
@ -352,6 +352,10 @@ func (p *packer) encodeTuple(t Tuple, nested bool) {
case UUID: case UUID:
p.encodeUUID(e) p.encodeUUID(e)
case Versionstamp: case Versionstamp:
if versionstamps == false && e.TransactionVersion == incompleteTransactionVersion {
panic(fmt.Sprintf("Incomplete Versionstamp included in vanilla tuple pack"))
}
p.encodeVersionstamp(e) p.encodeVersionstamp(e)
default: default:
panic(fmt.Sprintf("unencodable element at index %d (%v, type %T)", i, t[i], t[i])) panic(fmt.Sprintf("unencodable element at index %d (%v, type %T)", i, t[i], t[i]))
@ -379,7 +383,7 @@ func (p *packer) encodeTuple(t Tuple, nested bool) {
// //
func (t Tuple) Pack() []byte { func (t Tuple) Pack() []byte {
p := newPacker() p := newPacker()
p.encodeTuple(t, false) p.encodeTuple(t, false, false)
return p.buf return p.buf
} }
@ -409,7 +413,7 @@ func (t Tuple) PackWithVersionstamp(prefix []byte) ([]byte, error) {
p.putBytes(prefix) p.putBytes(prefix)
} }
p.encodeTuple(t, false) p.encodeTuple(t, false, true)
if hasVersionstamp { if hasVersionstamp {
var scratch [4]byte var scratch [4]byte