@@ -790,10 +790,10 @@ fn test_jumps(factory: super::Factory) {
790
790
evm_test ! { test_subs_simple: test_subs_simple_int}
791
791
fn test_subs_simple ( factory : super :: Factory ) {
792
792
// as defined in https://eips.ethereum.org/EIPS/eip-2315
793
- let code = hex ! ( "6004b300b2b7 " ) . to_vec ( ) ;
793
+ let code = hex ! ( "60045e005c5d " ) . to_vec ( ) ;
794
794
795
795
let mut params = ActionParams :: default ( ) ;
796
- params. gas = U256 :: from ( 13 ) ;
796
+ params. gas = U256 :: from ( 18 ) ;
797
797
params. code = Some ( Arc :: new ( code) ) ;
798
798
let mut ext = FakeExt :: new_berlin ( ) ;
799
799
@@ -808,10 +808,10 @@ fn test_subs_simple(factory: super::Factory) {
808
808
evm_test ! { test_subs_two_levels: test_subs_two_levels_int}
809
809
fn test_subs_two_levels ( factory : super :: Factory ) {
810
810
// as defined in https://eips.ethereum.org/EIPS/eip-2315
811
- let code = hex ! ( "6800000000000000000cb300b26011b3b7b2b7 " ) . to_vec ( ) ;
811
+ let code = hex ! ( "6800000000000000000c5e005c60115e5d5c5d " ) . to_vec ( ) ;
812
812
813
813
let mut params = ActionParams :: default ( ) ;
814
- params. gas = U256 :: from ( 26 ) ;
814
+ params. gas = U256 :: from ( 36 ) ;
815
815
params. code = Some ( Arc :: new ( code) ) ;
816
816
let mut ext = FakeExt :: new_berlin ( ) ;
817
817
@@ -826,7 +826,7 @@ fn test_subs_two_levels(factory: super::Factory) {
826
826
evm_test ! { test_subs_invalid_jump: test_subs_invalid_jump_int}
827
827
fn test_subs_invalid_jump ( factory : super :: Factory ) {
828
828
// as defined in https://eips.ethereum.org/EIPS/eip-2315
829
- let code = hex ! ( "6801000000000000000cb300b26011b3b7b2b7 " ) . to_vec ( ) ;
829
+ let code = hex ! ( "6801000000000000000c5e005c60115e5d5c5d " ) . to_vec ( ) ;
830
830
831
831
let mut params = ActionParams :: default ( ) ;
832
832
params. gas = U256 :: from ( 24 ) ;
@@ -845,7 +845,7 @@ fn test_subs_invalid_jump(factory: super::Factory) {
845
845
evm_test ! { test_subs_shallow_return_stack: test_subs_shallow_return_stack_int}
846
846
fn test_subs_shallow_return_stack ( factory : super :: Factory ) {
847
847
// as defined in https://eips.ethereum.org/EIPS/eip-2315
848
- let code = hex ! ( "b75858 " ) . to_vec ( ) ;
848
+ let code = hex ! ( "5d5858 " ) . to_vec ( ) ;
849
849
850
850
let mut params = ActionParams :: default ( ) ;
851
851
params. gas = U256 :: from ( 24 ) ;
@@ -865,7 +865,9 @@ evm_test!{test_subs_substack_limit: test_subs_substack_limit_int}
865
865
fn test_subs_substack_limit ( factory : super :: Factory ) {
866
866
867
867
// PUSH <recursion_limit>
868
+ // JUMP :a
868
869
// :s BEGINSUB
870
+ // :a JUMPDEST
869
871
// DUP1
870
872
// JUMPI :c
871
873
// STOP
@@ -875,7 +877,7 @@ fn test_subs_substack_limit(factory: super::Factory) {
875
877
// SUB
876
878
// JUMPSUB :s
877
879
878
- let mut code = hex ! ( "610400b280600957005b600190036003b3 " ) . to_vec ( ) ;
880
+ let mut code = hex ! ( "6104006007565c5b80600d57005b6001900360065e " ) . to_vec ( ) ;
879
881
code[ 1 ..3 ] . copy_from_slice ( & ( MAX_SUB_STACK_SIZE as u16 ) . to_be_bytes ( ) [ ..] ) ;
880
882
881
883
let mut params = ActionParams :: default ( ) ;
@@ -888,12 +890,12 @@ fn test_subs_substack_limit(factory: super::Factory) {
888
890
test_finalize ( vm. exec ( & mut ext) . ok ( ) . unwrap ( ) ) . unwrap ( )
889
891
} ;
890
892
891
- assert_eq ! ( gas_left, U256 :: from( 963_115 ) ) ;
893
+ assert_eq ! ( gas_left, U256 :: from( 959_049 ) ) ;
892
894
}
893
895
894
896
evm_test ! { test_subs_substack_out: test_subs_substack_out_int}
895
897
fn test_subs_substack_out ( factory : super :: Factory ) {
896
- let mut code = hex ! ( "610400b280600957005b600190036003b3 " ) . to_vec ( ) ;
898
+ let mut code = hex ! ( "6104006007565c5b80600d57005b6001900360065e " ) . to_vec ( ) ;
897
899
code[ 1 ..3 ] . copy_from_slice ( & ( ( MAX_SUB_STACK_SIZE +1 ) as u16 ) . to_be_bytes ( ) [ ..] ) ;
898
900
899
901
let mut params = ActionParams :: default ( ) ;
@@ -912,10 +914,10 @@ fn test_subs_substack_out(factory: super::Factory) {
912
914
913
915
evm_test ! { test_subs_sub_at_end: test_subs_sub_at_end_int}
914
916
fn test_subs_sub_at_end ( factory : super :: Factory ) {
915
- let code = hex ! ( "600556b2b75b6003b3 " ) . to_vec ( ) ;
917
+ let code = hex ! ( "6005565c5d5b60035e " ) . to_vec ( ) ;
916
918
917
919
let mut params = ActionParams :: default ( ) ;
918
- params. gas = U256 :: from ( 25 ) ;
920
+ params. gas = U256 :: from ( 30 ) ;
919
921
params. code = Some ( Arc :: new ( code) ) ;
920
922
let mut ext = FakeExt :: new_berlin ( ) ;
921
923
@@ -927,6 +929,24 @@ fn test_subs_sub_at_end(factory: super::Factory) {
927
929
assert_eq ! ( gas_left, U256 :: from( 0 ) ) ;
928
930
}
929
931
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
+
930
950
evm_test ! { test_calls: test_calls_int}
931
951
fn test_calls ( factory : super :: Factory ) {
932
952
let code = hex ! ( "600054602d57600160005560006000600060006050610998610100f160006000600060006050610998610100f25b" ) . to_vec ( ) ;
0 commit comments