Skip to content

test_callf_stack_overflow_by_outputs()

Documentation for tests/osaka/eip7692_eof_v1/eip4750_functions/test_code_validation.py::test_callf_stack_overflow_by_outputs@01f496f4.

Generate fixtures for these test cases for Osaka with:

fill -v tests/osaka/eip7692_eof_v1/eip4750_functions/test_code_validation.py::test_callf_stack_overflow_by_outputs --fork Osaka

Test for invalid EOF code containing CALLF instruction exceeding the runtime stack height limit by calling a function with at least one output. The computed stack height of the code section 0 is always above the maximum allowed in the EOF type section. Therefore, the test declares an invalid max_stack_height.

Source code in tests/osaka/eip7692_eof_v1/eip4750_functions/test_code_validation.py
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
@pytest.mark.parametrize("callee_outputs", [1, 2, MAX_CODE_OUTPUTS - 1, MAX_CODE_OUTPUTS])
@pytest.mark.parametrize(
    "max_stack_height", [0, 1, MAX_OPERAND_STACK_HEIGHT - 1, MAX_OPERAND_STACK_HEIGHT]
)
def test_callf_stack_overflow_by_outputs(eof_test, callee_outputs, max_stack_height):
    """
    Test for invalid EOF code containing CALLF instruction exceeding the runtime stack height limit
    by calling a function with at least one output. The computed stack height of the code section 0
    is always above the maximum allowed in the EOF type section. Therefore, the test declares
    an invalid max_stack_height.
    """
    callf_stack_height = (MAX_RUNTIME_OPERAND_STACK_HEIGHT + 1) - callee_outputs
    container = Container(
        sections=[
            Section.Code(
                Op.PUSH0 * callf_stack_height + Op.CALLF[1] + Op.STOP,
                max_stack_height=max_stack_height,
            ),
            Section.Code(
                Op.PUSH0 + Op.DUP1 + Op.RETF,
                code_outputs=callee_outputs,
                max_stack_height=callee_outputs,
            ),
        ],
    )
    eof_test(container=container, expect_exception=EOFException.STACK_OVERFLOW)

Parametrized Test Cases

The interactive table below is also available as a standalone page.

Test ID (Abbreviated) max_stack_height callee_outputs
...fork_Osaka-eof_test-max_stack_height_0-callee_outputs_1 0 1
...fork_Osaka-eof_test-max_stack_height_0-callee_outputs_2 0 2
...fork_Osaka-eof_test-max_stack_height_0-callee_outputs_126 0 126
...fork_Osaka-eof_test-max_stack_height_0-callee_outputs_127 0 127
...fork_Osaka-eof_test-max_stack_height_1-callee_outputs_1 1 1
...fork_Osaka-eof_test-max_stack_height_1-callee_outputs_2 1 2
...fork_Osaka-eof_test-max_stack_height_1-callee_outputs_126 1 126
...fork_Osaka-eof_test-max_stack_height_1-callee_outputs_127 1 127
...fork_Osaka-eof_test-max_stack_height_1022-callee_outputs_1 1022 1
...fork_Osaka-eof_test-max_stack_height_1022-callee_outputs_2 1022 2
...fork_Osaka-eof_test-max_stack_height_1022-callee_outputs_126 1022 126
...fork_Osaka-eof_test-max_stack_height_1022-callee_outputs_127 1022 127
...fork_Osaka-eof_test-max_stack_height_1023-callee_outputs_1 1023 1
...fork_Osaka-eof_test-max_stack_height_1023-callee_outputs_2 1023 2
...fork_Osaka-eof_test-max_stack_height_1023-callee_outputs_126 1023 126
...fork_Osaka-eof_test-max_stack_height_1023-callee_outputs_127 1023 127
...fork_Osaka-state_test_from_eof_test-max_stack_height_0-callee_outputs_1 0 1
...fork_Osaka-state_test_from_eof_test-max_stack_height_0-callee_outputs_2 0 2
...fork_Osaka-state_test_from_eof_test-max_stack_height_0-callee_outputs_126 0 126
...fork_Osaka-state_test_from_eof_test-max_stack_height_0-callee_outputs_127 0 127
...fork_Osaka-state_test_from_eof_test-max_stack_height_1-callee_outputs_1 1 1
...fork_Osaka-state_test_from_eof_test-max_stack_height_1-callee_outputs_2 1 2
...fork_Osaka-state_test_from_eof_test-max_stack_height_1-callee_outputs_126 1 126
...fork_Osaka-state_test_from_eof_test-max_stack_height_1-callee_outputs_127 1 127
...fork_Osaka-state_test_from_eof_test-max_stack_height_1022-callee_outputs_1 1022 1
...fork_Osaka-state_test_from_eof_test-max_stack_height_1022-callee_outputs_2 1022 2
...fork_Osaka-state_test_from_eof_test-max_stack_height_1022-callee_outputs_126 1022 126
...fork_Osaka-state_test_from_eof_test-max_stack_height_1022-callee_outputs_127 1022 127
...fork_Osaka-state_test_from_eof_test-max_stack_height_1023-callee_outputs_1 1023 1
...fork_Osaka-state_test_from_eof_test-max_stack_height_1023-callee_outputs_2 1023 2
...fork_Osaka-state_test_from_eof_test-max_stack_height_1023-callee_outputs_126 1023 126
...fork_Osaka-state_test_from_eof_test-max_stack_height_1023-callee_outputs_127 1023 127
...fork_Osaka-blockchain_test_from_eof_test-max_stack_height_0-callee_outputs_1 0 1
...fork_Osaka-blockchain_test_from_eof_test-max_stack_height_0-callee_outputs_2 0 2
...fork_Osaka-blockchain_test_from_eof_test-max_stack_height_0-callee_outputs_126 0 126
...fork_Osaka-blockchain_test_from_eof_test-max_stack_height_0-callee_outputs_127 0 127
...fork_Osaka-blockchain_test_from_eof_test-max_stack_height_1-callee_outputs_1 1 1
...fork_Osaka-blockchain_test_from_eof_test-max_stack_height_1-callee_outputs_2 1 2
...fork_Osaka-blockchain_test_from_eof_test-max_stack_height_1-callee_outputs_126 1 126
...fork_Osaka-blockchain_test_from_eof_test-max_stack_height_1-callee_outputs_127 1 127
...fork_Osaka-blockchain_test_from_eof_test-max_stack_height_1022-callee_outputs_1 1022 1
...fork_Osaka-blockchain_test_from_eof_test-max_stack_height_1022-callee_outputs_2 1022 2
...fork_Osaka-blockchain_test_from_eof_test-max_stack_height_1022-callee_outputs_126 1022 126
...fork_Osaka-blockchain_test_from_eof_test-max_stack_height_1022-callee_outputs_127 1022 127
...fork_Osaka-blockchain_test_from_eof_test-max_stack_height_1023-callee_outputs_1 1023 1
...fork_Osaka-blockchain_test_from_eof_test-max_stack_height_1023-callee_outputs_2 1023 2
...fork_Osaka-blockchain_test_from_eof_test-max_stack_height_1023-callee_outputs_126 1023 126
...fork_Osaka-blockchain_test_from_eof_test-max_stack_height_1023-callee_outputs_127 1023 127