@ -17,6 +17,7 @@
package vm
import (
"math/bits"
"testing"
"github.com/ethereum/go-ethereum/crypto"
@ -28,24 +29,27 @@ func TestJumpDestAnalysis(t *testing.T) {
exp byte
which int
} {
{ [ ] byte { byte ( PUSH1 ) , 0x01 , 0x01 , 0x01 } , 0x40 , 0 } ,
{ [ ] byte { byte ( PUSH1 ) , byte ( PUSH1 ) , byte ( PUSH1 ) , byte ( PUSH1 ) } , 0x50 , 0 } ,
{ [ ] byte { byte ( PUSH8 ) , byte ( PUSH8 ) , byte ( PUSH8 ) , byte ( PUSH8 ) , byte ( PUSH8 ) , byte ( PUSH8 ) , byte ( PUSH8 ) , byte ( PUSH8 ) , 0x01 , 0x01 , 0x01 } , 0x7F , 0 } ,
{ [ ] byte { byte ( PUSH8 ) , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 } , 0x80 , 1 } ,
{ [ ] byte { 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , byte ( PUSH2 ) , byte ( PUSH2 ) , byte ( PUSH2 ) , 0x01 , 0x01 , 0x01 } , 0x03 , 0 } ,
{ [ ] byte { 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , byte ( PUSH2 ) , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 } , 0x00 , 1 } ,
{ [ ] byte { byte ( PUSH3 ) , 0x01 , 0x01 , 0x01 , byte ( PUSH1 ) , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 } , 0x74 , 0 } ,
{ [ ] byte { byte ( PUSH3 ) , 0x01 , 0x01 , 0x01 , byte ( PUSH1 ) , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 } , 0x00 , 1 } ,
{ [ ] byte { 0x01 , byte ( PUSH8 ) , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 } , 0x3F , 0 } ,
{ [ ] byte { 0x01 , byte ( PUSH8 ) , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 } , 0xC0 , 1 } ,
{ [ ] byte { byte ( PUSH16 ) , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 } , 0x7F , 0 } ,
{ [ ] byte { byte ( PUSH16 ) , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 } , 0xFF , 1 } ,
{ [ ] byte { byte ( PUSH16 ) , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 } , 0x80 , 2 } ,
{ [ ] byte { byte ( PUSH8 ) , 0x01 , 0x02 , 0x03 , 0x04 , 0x05 , 0x06 , 0x07 , 0x08 , byte ( PUSH1 ) , 0x01 } , 0x7f , 0 } ,
{ [ ] byte { byte ( PUSH8 ) , 0x01 , 0x02 , 0x03 , 0x04 , 0x05 , 0x06 , 0x07 , 0x08 , byte ( PUSH1 ) , 0x01 } , 0xA0 , 1 } ,
{ [ ] byte { byte ( PUSH32 ) } , 0x7F , 0 } ,
{ [ ] byte { byte ( PUSH32 ) } , 0xFF , 1 } ,
{ [ ] byte { byte ( PUSH32 ) } , 0xFF , 2 } ,
{ [ ] byte { byte ( PUSH1 ) , 0x01 , 0x01 , 0x01 } , 0b0000_0010 , 0 } ,
{ [ ] byte { byte ( PUSH1 ) , byte ( PUSH1 ) , byte ( PUSH1 ) , byte ( PUSH1 ) } , 0b0000_1010 , 0 } ,
{ [ ] byte { 0x00 , byte ( PUSH1 ) , 0x00 , byte ( PUSH1 ) , 0x00 , byte ( PUSH1 ) , 0x00 , byte ( PUSH1 ) } , 0b0101_0100 , 0 } ,
{ [ ] byte { byte ( PUSH8 ) , byte ( PUSH8 ) , byte ( PUSH8 ) , byte ( PUSH8 ) , byte ( PUSH8 ) , byte ( PUSH8 ) , byte ( PUSH8 ) , byte ( PUSH8 ) , 0x01 , 0x01 , 0x01 } , bits . Reverse8 ( 0x7F ) , 0 } ,
{ [ ] byte { byte ( PUSH8 ) , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 } , 0b0000_0001 , 1 } ,
{ [ ] byte { 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , byte ( PUSH2 ) , byte ( PUSH2 ) , byte ( PUSH2 ) , 0x01 , 0x01 , 0x01 } , 0b1100_0000 , 0 } ,
{ [ ] byte { 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , byte ( PUSH2 ) , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 } , 0b0000_0000 , 1 } ,
{ [ ] byte { byte ( PUSH3 ) , 0x01 , 0x01 , 0x01 , byte ( PUSH1 ) , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 } , 0b0010_1110 , 0 } ,
{ [ ] byte { byte ( PUSH3 ) , 0x01 , 0x01 , 0x01 , byte ( PUSH1 ) , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 } , 0b0000_0000 , 1 } ,
{ [ ] byte { 0x01 , byte ( PUSH8 ) , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 } , 0b1111_1100 , 0 } ,
{ [ ] byte { 0x01 , byte ( PUSH8 ) , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 } , 0b0000_0011 , 1 } ,
{ [ ] byte { byte ( PUSH16 ) , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 } , 0b1111_1110 , 0 } ,
{ [ ] byte { byte ( PUSH16 ) , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 } , 0b1111_1111 , 1 } ,
{ [ ] byte { byte ( PUSH16 ) , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 } , 0b0000_0001 , 2 } ,
{ [ ] byte { byte ( PUSH8 ) , 0x01 , 0x02 , 0x03 , 0x04 , 0x05 , 0x06 , 0x07 , 0x08 , byte ( PUSH1 ) , 0x01 } , 0b1111_1110 , 0 } ,
{ [ ] byte { byte ( PUSH8 ) , 0x01 , 0x02 , 0x03 , 0x04 , 0x05 , 0x06 , 0x07 , 0x08 , byte ( PUSH1 ) , 0x01 } , 0b0000_0101 , 1 } ,
{ [ ] byte { byte ( PUSH32 ) } , 0b1111_1110 , 0 } ,
{ [ ] byte { byte ( PUSH32 ) } , 0b1111_1111 , 1 } ,
{ [ ] byte { byte ( PUSH32 ) } , 0b1111_1111 , 2 } ,
{ [ ] byte { byte ( PUSH32 ) } , 0b1111_1111 , 3 } ,
{ [ ] byte { byte ( PUSH32 ) } , 0b0000_0001 , 4 } ,
}
for i , test := range tests {
ret := codeBitmap ( test . code )