@@ -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