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