diff --git a/src/sbbs3/smbutil.c b/src/sbbs3/smbutil.c index 21c156a6116a7163e3f46528eeba9c0ab0461d2a..e0c16643c6d66e816cedbfa290b8cda55c44edec 100644 --- a/src/sbbs3/smbutil.c +++ b/src/sbbs3/smbutil.c @@ -1002,6 +1002,13 @@ void packmsgs(ulong packable) printf("Analyzing data blocks...\n"); length=filelength(fileno(smb.sda_fp)); + if(length < 0) { + printf("\r!ERROR %d getting %s SDA file length.\n\n", errno, smb.file); + smb_close_ha(&smb); + smb_close_da(&smb); + smb_unlocksmbhdr(&smb); + return; + } fseek(smb.sda_fp,0L,SEEK_SET); for(l=m=0;l<length;l+=2) { @@ -1016,6 +1023,13 @@ void packmsgs(ulong packable) printf("\rAnalyzing header blocks...\n"); length=filelength(fileno(smb.sha_fp)); + if(length < 0) { + printf("\r!ERROR %d getting %s SHA file length.\n\n", errno, smb.file); + smb_close_ha(&smb); + smb_close_da(&smb); + smb_unlocksmbhdr(&smb); + return; + } fseek(smb.sha_fp,0L,SEEK_SET); for(l=n=0;l<length;l++) { @@ -1059,6 +1073,13 @@ void packmsgs(ulong packable) printf("Analyzing %s\n",smb.file); length=filelength(fileno(smb.shd_fp)); + if(length < 0) { + printf("\r!ERROR %d getting %s SHD file length.\n\n", errno, smb.file); + smb_close_ha(&smb); + smb_close_da(&smb); + smb_unlocksmbhdr(&smb); + return; + } m=n=0; for(l=smb.status.header_offset;l<length;l+=size) { printf("\r%2lu%% ",(long)(100.0/((float)length/l))); @@ -1852,7 +1873,7 @@ int main(int argc, char **argv) ,beep,i,smb.last_error,smb.file); continue; } - if(!filelength(fileno(smb.shd_fp))) { + if(filelength(fileno(smb.shd_fp)) < 1) { if(!create) { printf("Empty\n"); smb_close(&smb);