File tree Expand file tree Collapse file tree 1 file changed +52
-0
lines changed
Expand file tree Collapse file tree 1 file changed +52
-0
lines changed Original file line number Diff line number Diff line change @@ -147,3 +147,55 @@ def test_call_memory_expands_on_early_revert(
147147 )
148148 },
149149 )
150+
151+
152+ # TODO: There's an issue with gas definitions on forks previous to Berlin, remove this when fixed.
153+ # https://github.com/ethereum/execution-spec-tests/pull/1952#discussion_r2237634275
154+ @pytest .mark .with_all_call_opcodes
155+ @pytest .mark .valid_from ("Berlin" )
156+ def test_call_large_args_offset_size_zero (
157+ state_test : StateTestFiller ,
158+ pre : Alloc ,
159+ fork : Fork ,
160+ call_opcode : Op ,
161+ ):
162+ """
163+ Test xCALL with an extremely large args_offset and args_size set to zero.
164+ Since the size is zero, the large offset should not cause a revert.
165+ """
166+ sender = pre .fund_eoa ()
167+
168+ gsc = fork .gas_costs ()
169+ very_large_offset = 2 ** 100
170+
171+ call_measure = CodeGasMeasure (
172+ code = call_opcode (gas = 0 , args_offset = very_large_offset , args_size = 0 ),
173+ overhead_cost = gsc .G_VERY_LOW * len (call_opcode .kwargs ), # Cost of pushing xCALL args
174+ extra_stack_items = 1 , # Because xCALL pushes 1 item to the stack
175+ sstore_key = 0 ,
176+ )
177+
178+ contract = pre .deploy_contract (call_measure )
179+
180+ tx = Transaction (
181+ gas_limit = 500_000 ,
182+ to = contract ,
183+ value = 0 ,
184+ sender = sender ,
185+ )
186+
187+ # this call cost is just the address_access_cost
188+ call_cost = gsc .G_COLD_ACCOUNT_ACCESS
189+
190+ state_test (
191+ env = Environment (),
192+ pre = pre ,
193+ tx = tx ,
194+ post = {
195+ contract : Account (
196+ storage = {
197+ 0 : call_cost ,
198+ },
199+ )
200+ },
201+ )
You can’t perform that action at this time.
0 commit comments