Skip to content

Commit a693750

Browse files
committed
Improve binary file verification and fix a little bug
I wrongly typed !VerifyBinaryFile instead of VerifyBinaryFile. As a result, emulator could continue working in case VerifyBinaryFile returned 1 (error) or shutdown if 0 (no errors). Signed-off-by: Ivan Movchan <ivan.movchan.07@gmail.com>
1 parent c3afdf4 commit a693750

1 file changed

Lines changed: 13 additions & 12 deletions

File tree

src/Emulator/Main.cpp

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,13 @@ std::uint64_t ParseMemoryString(const std::string& str) {
7575
return result * multiplier;
7676
}
7777

78-
int VerifyBinaryFile(std::string source, HyperCPU::GenericHeader header) {
79-
if (header.magic != HyperCPU::magic) {
78+
int VerifyBinaryFile(std::int64_t filesize, HyperCPU::GenericHeader header) {
79+
if (filesize < sizeof(HyperCPU::GenericHeader)) {
80+
spdlog::error("Invalid binary header! (excepted {} bytes, got {})", sizeof(HyperCPU::GenericHeader), filesize);
81+
return 1;
82+
}
83+
84+
if (header.magic != HyperCPU::magic) {
8085
spdlog::error("Invalid magic!");
8186
return 1;
8287
}
@@ -101,16 +106,11 @@ int VerifyBinaryFile(std::string source, HyperCPU::GenericHeader header) {
101106
return 1;
102107
}
103108

104-
if (std::filesystem::file_size(source) < sizeof(HyperCPU::GenericHeader)) {
105-
spdlog::error("Invalid binary header! (excepted {} bytes, got {})", sizeof(HyperCPU::GenericHeader), std::filesystem::file_size(source));
109+
if (filesize != (sizeof(HyperCPU::GenericHeader) + header.code_size)) {
110+
spdlog::error("Invalid binary code! (expected {} bytes, got {})", header.code_size, (filesize - sizeof(HyperCPU::GenericHeader)));
106111
return 1;
107112
}
108113

109-
if (std::filesystem::file_size(source) != (sizeof(HyperCPU::GenericHeader) + header.code_size)) {
110-
spdlog::error("Invalid binary code! (expected {} bytes, got {})", header.code_size, (std::filesystem::file_size(source) - sizeof(HyperCPU::GenericHeader)));
111-
return 1;
112-
}
113-
114114
return 0;
115115
}
116116

@@ -155,12 +155,13 @@ int main(int argc, char** argv) {
155155
spdlog::error("The binary file is too small! (No binary header?)");
156156
return 1;
157157
}
158-
159-
std::int64_t binarysize = std::filesystem::file_size(source) - sizeof(HyperCPU::GenericHeader);
158+
159+
std::int64_t filesize = std::filesystem::file_size(source);
160+
std::int64_t binarysize = filesize - sizeof(HyperCPU::GenericHeader);
160161

161162
HyperCPU::GenericHeader header = ParseHeader(file);
162163

163-
if (!VerifyBinaryFile(source, header)) {
164+
if (VerifyBinaryFile(filesize, header)) {
164165
return 1;
165166
}
166167

0 commit comments

Comments
 (0)