Skip to content

Commit 6667d92

Browse files
committed
error checking
1 parent 2548ce9 commit 6667d92

1 file changed

Lines changed: 58 additions & 5 deletions

File tree

src/Weights_Reader/reader_weights.cpp

Lines changed: 58 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,27 +23,80 @@ json read_json(const std::string& filename) {
2323
#ifdef _WIN32
2424
HANDLE file = CreateFileA(filename.c_str(), GENERIC_READ, FILE_SHARE_READ,
2525
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
26+
if (file == INVALID_HANDLE_VALUE) {
27+
throw std::runtime_error("Cannot open file: " + filename);
28+
}
29+
30+
DWORD size = GetFileSize(file, NULL);
31+
if (size == 0) {
32+
CloseHandle(file);
33+
throw std::runtime_error("File is empty: " + filename);
34+
}
35+
2636
HANDLE mapping = CreateFileMapping(file, NULL, PAGE_READONLY, 0, 0, NULL);
37+
if (mapping == NULL) {
38+
CloseHandle(file);
39+
throw std::runtime_error("Cannot create file mapping: " + filename);
40+
}
41+
2742
char* data = (char*)MapViewOfFile(mapping, FILE_MAP_READ, 0, 0, 0);
28-
size_t size = GetFileSize(file, NULL);
43+
if (data == NULL) {
44+
CloseHandle(mapping);
45+
CloseHandle(file);
46+
throw std::runtime_error("Cannot map view of file: " + filename);
47+
}
2948

30-
json result = json::parse(data, data + size);
49+
json result;
50+
try {
51+
result = json::parse(data, data + size);
52+
} catch (...) {
53+
UnmapViewOfFile(data);
54+
CloseHandle(mapping);
55+
CloseHandle(file);
56+
throw;
57+
}
3158

3259
UnmapViewOfFile(data);
3360
CloseHandle(mapping);
3461
CloseHandle(file);
62+
return result;
63+
3564
#else
3665
int fd = open(filename.c_str(), O_RDONLY);
66+
if (fd == -1) {
67+
throw std::runtime_error("Cannot open file: " + filename);
68+
}
69+
3770
struct stat sb;
38-
fstat(fd, &sb);
71+
if (fstat(fd, &sb) == -1) {
72+
close(fd);
73+
throw std::runtime_error("Cannot stat file: " + filename);
74+
}
75+
76+
if (sb.st_size == 0) {
77+
close(fd);
78+
throw std::runtime_error("File is empty: " + filename);
79+
}
80+
3981
char* data = (char*)mmap(NULL, sb.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
82+
if (data == MAP_FAILED) {
83+
close(fd);
84+
throw std::runtime_error("Cannot mmap file: " + filename);
85+
}
4086

41-
json result = json::parse(data, data + sb.st_size);
87+
json result;
88+
try {
89+
result = json::parse(data, data + sb.st_size);
90+
} catch (...) {
91+
munmap(data, sb.st_size);
92+
close(fd);
93+
throw;
94+
}
4295

4396
munmap(data, sb.st_size);
4497
close(fd);
45-
#endif
4698
return result;
99+
#endif
47100
}
48101

49102
void extract_values_from_json(const json& j, std::vector<float>& values) {

0 commit comments

Comments
 (0)