Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit e2dec5f

Browse files
committedAug 21, 2023
Check freads in index.c and bail if it fails
1 parent ace990c commit e2dec5f

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
@@ -516,13 +516,13 @@ mm_idx_t *mm_idx_load(FILE *fp)
516516
for (i = 0; i < mi->n_seq; ++i) {
517517
uint8_t l;
518518
mm_idx_seq_t *s = &mi->seq[i];
519-
fread(&l, 1, 1, fp);
519+
if (fread(&l, 1, 1, fp) == 0) { free(mi->seq); free(mi); return 0; }
520520
if (l) {
521521
s->name = (char*)kmalloc(mi->km, l + 1);
522522
fread(s->name, 1, l, fp);
523523
s->name[l] = 0;
524524
}
525-
fread(&s->len, 4, 1, fp);
525+
if (fread(&s->len, 4, 1, fp) == 0) { free(mi->seq); free(mi); return 0; }
526526
s->offset = sum_len;
527527
s->is_alt = 0;
528528
sum_len += s->len;
@@ -532,25 +532,25 @@ mm_idx_t *mm_idx_load(FILE *fp)
532532
uint32_t j, size;
533533
khint_t k;
534534
idxhash_t *h;
535-
fread(&b->n, 4, 1, fp);
535+
if (fread(&b->n, 4, 1, fp) == 0) { free(mi->seq); free(mi); return 0; }
536536
b->p = (uint64_t*)malloc(b->n * 8);
537-
fread(b->p, 8, b->n, fp);
538-
fread(&size, 4, 1, fp);
537+
if (fread(b->p, 8, b->n, fp) == 0) { free(mi->seq); free(mi); return 0; }
538+
if (fread(&size, 4, 1, fp) == 0) { free(mi->seq); free(mi); return 0; }
539539
if (size == 0) continue;
540540
b->h = h = kh_init(idx);
541541
kh_resize(idx, h, size);
542542
for (j = 0; j < size; ++j) {
543543
uint64_t x[2];
544544
int absent;
545-
fread(x, 8, 2, fp);
545+
if (fread(x, 8, 2, fp) == 0) { free(mi->seq); free(mi); return 0; }
546546
k = kh_put(idx, h, x[0], &absent);
547547
assert(absent);
548548
kh_val(h, k) = x[1];
549549
}
550550
}
551551
if (!(mi->flag & MM_I_NO_SEQ)) {
552552
mi->S = (uint32_t*)malloc((sum_len + 7) / 8 * 4);
553-
fread(mi->S, 4, (sum_len + 7) / 8, fp);
553+
if (fread(mi->S, 4, (sum_len + 7) / 8, fp) == 0) { free(mi->seq); free(mi); return 0; }
554554
}
555555
return mi;
556556
}

0 commit comments

Comments
 (0)
Please sign in to comment.