Skip to content

Commit 21da532

Browse files
committed
[fix] Guard short token datasets in ANE and dynamic trainers (upstream PR maderix#38)
1 parent f290f79 commit 21da532

2 files changed

Lines changed: 18 additions & 6 deletions

File tree

‎training/train_large_ane.m‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,12 @@ int main(int argc, char *argv[]) {
284284
uint16_t *token_data = (uint16_t*)mmap(NULL, data_len, PROT_READ, MAP_PRIVATE, data_fd, 0);
285285
if (token_data == MAP_FAILED) { printf("mmap failed\n"); return 1; }
286286
size_t n_tokens = data_len / 2;
287+
if (n_tokens <= (size_t)(SEQ + 1)) {
288+
printf("Token data too short: need at least %d tokens, got %zu\n", SEQ + 2, n_tokens);
289+
munmap(token_data, data_len);
290+
close(data_fd);
291+
return 1;
292+
}
287293
printf("Token data: %zu tokens (%.1f MB)\n", n_tokens, data_len/1e6);
288294

289295
// Gradient buffers

‎training/training_dynamic/train.m‎

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -335,12 +335,18 @@ int main(int argc, char *argv[]) {
335335
// mmap token data
336336
int data_fd = open(DATA_PATH, O_RDONLY);
337337
if (data_fd < 0) { printf("Cannot open %s\n", DATA_PATH); return 1; }
338-
struct stat st; fstat(data_fd, &st);
339-
size_t data_len = st.st_size;
340-
uint16_t *token_data = (uint16_t*)mmap(NULL, data_len, PROT_READ, MAP_PRIVATE, data_fd, 0);
341-
if (token_data == MAP_FAILED) { printf("mmap failed\n"); return 1; }
342-
size_t n_tokens = data_len / 2;
343-
printf("Token data: %zu tokens (%.1f MB)\n", n_tokens, data_len/1e6);
338+
struct stat st; fstat(data_fd, &st);
339+
size_t data_len = st.st_size;
340+
uint16_t *token_data = (uint16_t*)mmap(NULL, data_len, PROT_READ, MAP_PRIVATE, data_fd, 0);
341+
if (token_data == MAP_FAILED) { printf("mmap failed\n"); return 1; }
342+
size_t n_tokens = data_len / 2;
343+
if (n_tokens <= (size_t)(SEQ + 1)) {
344+
printf("Token data too short: need at least %d tokens, got %zu\n", SEQ + 2, n_tokens);
345+
munmap(token_data, data_len);
346+
close(data_fd);
347+
return 1;
348+
}
349+
printf("Token data: %zu tokens (%.1f MB)\n", n_tokens, data_len/1e6);
344350

345351
// Vocab compaction: map 32K sparse vocab → ~9K compact
346352
VocabMap vm = vocab_map_build(token_data, n_tokens, VOCAB);

0 commit comments

Comments
 (0)