Skip to content

Commit 26c0269

Browse files
committed
Check freads in index.c and bail if it fails
1 parent d2de282 commit 26c0269

File tree

1 file changed

+7
-7
lines changed

1 file changed

+7
-7
lines changed

index.c

+7-7
Original file line numberDiff line numberDiff line change
@@ -494,13 +494,13 @@ mm_idx_t *mm_idx_load(FILE *fp)
494494
for (i = 0; i < mi->n_seq; ++i) {
495495
uint8_t l;
496496
mm_idx_seq_t *s = &mi->seq[i];
497-
fread(&l, 1, 1, fp);
497+
if (fread(&l, 1, 1, fp) == 0) { free(mi->seq); free(mi); return 0; }
498498
if (l) {
499499
s->name = (char*)kmalloc(mi->km, l + 1);
500500
fread(s->name, 1, l, fp);
501501
s->name[l] = 0;
502502
}
503-
fread(&s->len, 4, 1, fp);
503+
if (fread(&s->len, 4, 1, fp) == 0) { free(mi->seq); free(mi); return 0; }
504504
s->offset = sum_len;
505505
s->is_alt = 0;
506506
sum_len += s->len;
@@ -510,25 +510,25 @@ mm_idx_t *mm_idx_load(FILE *fp)
510510
uint32_t j, size;
511511
khint_t k;
512512
idxhash_t *h;
513-
fread(&b->n, 4, 1, fp);
513+
if (fread(&b->n, 4, 1, fp) == 0) { free(mi->seq); free(mi); return 0; }
514514
b->p = (uint64_t*)malloc(b->n * 8);
515-
fread(b->p, 8, b->n, fp);
516-
fread(&size, 4, 1, fp);
515+
if (fread(b->p, 8, b->n, fp) == 0) { free(mi->seq); free(mi); return 0; }
516+
if (fread(&size, 4, 1, fp) == 0) { free(mi->seq); free(mi); return 0; }
517517
if (size == 0) continue;
518518
b->h = h = kh_init(idx);
519519
kh_resize(idx, h, size);
520520
for (j = 0; j < size; ++j) {
521521
uint64_t x[2];
522522
int absent;
523-
fread(x, 8, 2, fp);
523+
if (fread(x, 8, 2, fp) == 0) { free(mi->seq); free(mi); return 0; }
524524
k = kh_put(idx, h, x[0], &absent);
525525
assert(absent);
526526
kh_val(h, k) = x[1];
527527
}
528528
}
529529
if (!(mi->flag & MM_I_NO_SEQ)) {
530530
mi->S = (uint32_t*)malloc((sum_len + 7) / 8 * 4);
531-
fread(mi->S, 4, (sum_len + 7) / 8, fp);
531+
if (fread(mi->S, 4, (sum_len + 7) / 8, fp) == 0) { free(mi->seq); free(mi); return 0; }
532532
}
533533
return mi;
534534
}

0 commit comments

Comments
 (0)