Skip to content

Commit 8127c9b

Browse files
committed
Don't allow handling multiple code/data section in EOF1 validation
1 parent 2ccae10 commit 8127c9b

File tree

3 files changed

+22
-1
lines changed

3 files changed

+22
-1
lines changed

lib/evmone/eof.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,13 @@ std::pair<EOF1Header, EOFValidationErrror> validate_eof1(
8383
case DATA_SECTION:
8484
if (section_sizes[CODE_SECTION] == 0)
8585
return {{}, EOFValidationErrror::code_section_missing};
86-
[[fallthrough]];
86+
if (section_sizes[DATA_SECTION] != 0)
87+
return {{}, EOFValidationErrror::multiple_data_sections};
88+
state = State::section_size;
89+
break;
8790
case CODE_SECTION:
91+
if (section_sizes[CODE_SECTION] != 0)
92+
return {{}, EOFValidationErrror::multiple_code_sections};
8893
state = State::section_size;
8994
break;
9095
default:

lib/evmone/eof.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ enum class EOFValidationErrror
3636

3737
incomplete_section_size,
3838
code_section_missing,
39+
multiple_code_sections,
40+
multiple_data_sections,
3941
unknown_section_id,
4042
zero_section_size,
4143
section_headers_not_terminated,

test/unittests/eof_validation_test.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,3 +74,17 @@ TEST(eof_validation, EOF1_data_section_0_size)
7474
EXPECT_EQ(validate_eof(from_hex("EF0001 010001 020000 00 FE")),
7575
EOFValidationErrror::zero_section_size);
7676
}
77+
78+
TEST(eof_validation, EOF1_multiple_code_sections)
79+
{
80+
EXPECT_EQ(validate_eof(from_hex("EF0001 010001 010001 00 FE FE")),
81+
EOFValidationErrror::multiple_code_sections);
82+
EXPECT_EQ(validate_eof(from_hex("EF0001 010001 010001 020001 00 FE FE DA")),
83+
EOFValidationErrror::multiple_code_sections);
84+
}
85+
86+
TEST(eof_validation, EOF1_multiple_data_sections)
87+
{
88+
EXPECT_EQ(validate_eof(from_hex("EF0001 010001 020001 020001 00 FE DA DA")),
89+
EOFValidationErrror::multiple_data_sections);
90+
}

0 commit comments

Comments
 (0)