@@ -790,10 +790,10 @@ fn test_jumps(factory: super::Factory) {
790790evm_test ! { test_subs_simple: test_subs_simple_int}
791791fn test_subs_simple ( factory : super :: Factory ) {
792792 // as defined in https://eips.ethereum.org/EIPS/eip-2315
793- let code = hex ! ( "6004b300b2b7 " ) . to_vec ( ) ;
793+ let code = hex ! ( "60045e005c5d " ) . to_vec ( ) ;
794794
795795 let mut params = ActionParams :: default ( ) ;
796- params. gas = U256 :: from ( 13 ) ;
796+ params. gas = U256 :: from ( 18 ) ;
797797 params. code = Some ( Arc :: new ( code) ) ;
798798 let mut ext = FakeExt :: new_berlin ( ) ;
799799
@@ -808,10 +808,10 @@ fn test_subs_simple(factory: super::Factory) {
808808evm_test ! { test_subs_two_levels: test_subs_two_levels_int}
809809fn test_subs_two_levels ( factory : super :: Factory ) {
810810 // as defined in https://eips.ethereum.org/EIPS/eip-2315
811- let code = hex ! ( "6800000000000000000cb300b26011b3b7b2b7 " ) . to_vec ( ) ;
811+ let code = hex ! ( "6800000000000000000c5e005c60115e5d5c5d " ) . to_vec ( ) ;
812812
813813 let mut params = ActionParams :: default ( ) ;
814- params. gas = U256 :: from ( 26 ) ;
814+ params. gas = U256 :: from ( 36 ) ;
815815 params. code = Some ( Arc :: new ( code) ) ;
816816 let mut ext = FakeExt :: new_berlin ( ) ;
817817
@@ -826,7 +826,7 @@ fn test_subs_two_levels(factory: super::Factory) {
826826evm_test ! { test_subs_invalid_jump: test_subs_invalid_jump_int}
827827fn test_subs_invalid_jump ( factory : super :: Factory ) {
828828 // as defined in https://eips.ethereum.org/EIPS/eip-2315
829- let code = hex ! ( "6801000000000000000cb300b26011b3b7b2b7 " ) . to_vec ( ) ;
829+ let code = hex ! ( "6801000000000000000c5e005c60115e5d5c5d " ) . to_vec ( ) ;
830830
831831 let mut params = ActionParams :: default ( ) ;
832832 params. gas = U256 :: from ( 24 ) ;
@@ -845,7 +845,7 @@ fn test_subs_invalid_jump(factory: super::Factory) {
845845evm_test ! { test_subs_shallow_return_stack: test_subs_shallow_return_stack_int}
846846fn test_subs_shallow_return_stack ( factory : super :: Factory ) {
847847 // as defined in https://eips.ethereum.org/EIPS/eip-2315
848- let code = hex ! ( "b75858 " ) . to_vec ( ) ;
848+ let code = hex ! ( "5d5858 " ) . to_vec ( ) ;
849849
850850 let mut params = ActionParams :: default ( ) ;
851851 params. gas = U256 :: from ( 24 ) ;
@@ -865,7 +865,9 @@ evm_test!{test_subs_substack_limit: test_subs_substack_limit_int}
865865fn test_subs_substack_limit ( factory : super :: Factory ) {
866866
867867 // PUSH <recursion_limit>
868+ // JUMP :a
868869 // :s BEGINSUB
870+ // :a JUMPDEST
869871 // DUP1
870872 // JUMPI :c
871873 // STOP
@@ -875,7 +877,7 @@ fn test_subs_substack_limit(factory: super::Factory) {
875877 // SUB
876878 // JUMPSUB :s
877879
878- let mut code = hex ! ( "610400b280600957005b600190036003b3 " ) . to_vec ( ) ;
880+ let mut code = hex ! ( "6104006007565c5b80600d57005b6001900360065e " ) . to_vec ( ) ;
879881 code[ 1 ..3 ] . copy_from_slice ( & ( MAX_SUB_STACK_SIZE as u16 ) . to_be_bytes ( ) [ ..] ) ;
880882
881883 let mut params = ActionParams :: default ( ) ;
@@ -888,12 +890,12 @@ fn test_subs_substack_limit(factory: super::Factory) {
888890 test_finalize ( vm. exec ( & mut ext) . ok ( ) . unwrap ( ) ) . unwrap ( )
889891 } ;
890892
891- assert_eq ! ( gas_left, U256 :: from( 963_115 ) ) ;
893+ assert_eq ! ( gas_left, U256 :: from( 959_049 ) ) ;
892894}
893895
894896evm_test ! { test_subs_substack_out: test_subs_substack_out_int}
895897fn test_subs_substack_out ( factory : super :: Factory ) {
896- let mut code = hex ! ( "610400b280600957005b600190036003b3 " ) . to_vec ( ) ;
898+ let mut code = hex ! ( "6104006007565c5b80600d57005b6001900360065e " ) . to_vec ( ) ;
897899 code[ 1 ..3 ] . copy_from_slice ( & ( ( MAX_SUB_STACK_SIZE +1 ) as u16 ) . to_be_bytes ( ) [ ..] ) ;
898900
899901 let mut params = ActionParams :: default ( ) ;
@@ -912,10 +914,10 @@ fn test_subs_substack_out(factory: super::Factory) {
912914
913915evm_test ! { test_subs_sub_at_end: test_subs_sub_at_end_int}
914916fn test_subs_sub_at_end ( factory : super :: Factory ) {
915- let code = hex ! ( "600556b2b75b6003b3 " ) . to_vec ( ) ;
917+ let code = hex ! ( "6005565c5d5b60035e " ) . to_vec ( ) ;
916918
917919 let mut params = ActionParams :: default ( ) ;
918- params. gas = U256 :: from ( 25 ) ;
920+ params. gas = U256 :: from ( 30 ) ;
919921 params. code = Some ( Arc :: new ( code) ) ;
920922 let mut ext = FakeExt :: new_berlin ( ) ;
921923
@@ -927,6 +929,24 @@ fn test_subs_sub_at_end(factory: super::Factory) {
927929 assert_eq ! ( gas_left, U256 :: from( 0 ) ) ;
928930}
929931
932+ evm_test ! { test_subs_walk_into_subroutine: test_subs_walk_into_subroutine_int}
933+ fn test_subs_walk_into_subroutine ( factory : super :: Factory ) {
934+ let code = hex ! ( "5c5d00" ) . to_vec ( ) ;
935+
936+ let mut params = ActionParams :: default ( ) ;
937+ params. gas = U256 :: from ( 100 ) ;
938+ params. code = Some ( Arc :: new ( code) ) ;
939+ let mut ext = FakeExt :: new_berlin ( ) ;
940+
941+ let current = {
942+ let vm = factory. create ( params, ext. schedule ( ) , ext. depth ( ) ) ;
943+ test_finalize ( vm. exec ( & mut ext) . ok ( ) . unwrap ( ) )
944+ } ;
945+
946+ let expected = Result :: Err ( vm:: Error :: InvalidSubEntry ) ;
947+ assert_eq ! ( current, expected) ;
948+ }
949+
930950evm_test ! { test_calls: test_calls_int}
931951fn test_calls ( factory : super :: Factory ) {
932952 let code = hex ! ( "600054602d57600160005560006000600060006050610998610100f160006000600060006050610998610100f25b" ) . to_vec ( ) ;
0 commit comments