diff --git a/src/sbbs3/chksmb.c b/src/sbbs3/chksmb.c index 5957fc0a41a68c33e08c1feba7cf1bd405973377..d6e9109326334512150521113fe2eb4620fe5e01 100644 --- a/src/sbbs3/chksmb.c +++ b/src/sbbs3/chksmb.c @@ -130,7 +130,7 @@ int main(int argc, char **argv) ulong l,m,n,length,size,total=0,orphan=0,deleted=0,headers=0 ,*offset,*number,xlaterr ,delidx - ,delhdrblocks,deldatblocks,hdrerr=0,lockerr=0,hdrnumerr=0 + ,delhdrblocks,deldatblocks,hdrerr=0,lockerr=0,hdrnumerr=0,hdrlenerr=0 ,acthdrblocks,actdatblocks ,dfieldlength=0,dfieldoffset=0 ,dupenum=0,dupenumhdr=0,dupeoff=0,attr=0,actalloc=0 @@ -142,7 +142,7 @@ int main(int argc, char **argv) idxrec_t idx; smbmsg_t msg; - fprintf(stderr,"\nCHKSMB v2.11 - Check Synchronet Message Base - " + fprintf(stderr,"\nCHKSMB v2.12 - Check Synchronet Message Base - " "Copyright 2002 Rob Swindell\n"); if(argc<2) { @@ -272,6 +272,15 @@ int main(int argc, char **argv) strip_ctrl(msg.from); fprintf(stderr,"#%-5lu (%06lX) %-25.25s ",msg.hdr.number,l,msg.from); + if(msg.hdr.length!=smb_getmsghdrlen(&msg)) { + fprintf(stderr,"%sHeader length mismatch\n",beep); + msgerr=1; + if(extinfo) + printf("MSGERR: Header length (%hu) does not match calculcated length (%lu)\n" + ,msg.hdr.length,smb_getmsghdrlen(&msg)); + hdrlenerr++; + } + lzhmsg=0; if(msg.hdr.attr&MSG_DELETE) { deleted++; @@ -447,6 +456,8 @@ int main(int argc, char **argv) ,msg.hdr.version); printf("%-20s: %u\n","Length" ,msg.hdr.length); + printf("%-20s: %u\n","Calculated Length" + ,smb_getmsghdrlen(&msg)); printf("%-20s: %04hXh\n","Attributes" ,msg.hdr.attr); printf("%-20s: %08lXh\n","Auxilary Attributes" @@ -651,6 +662,10 @@ int main(int argc, char **argv) printf("%-35.35s (!): %lu\n" ,"Out-Of-Range Header Numbers" ,hdrnumerr); + if(hdrlenerr) + printf("%-35.35s (!): %lu\n" + ,"Mismatched Header Lengths" + ,hdrlenerr); if(attr) printf("%-35.35s (!): %lu\n" ,"Mismatched Header Attributes"