diff --git a/src/smblib/smbdefs.h b/src/smblib/smbdefs.h index 047da914043711659a871864c4b3158909775c7b..1992841ea123a527468d9ca89bd2423df2b598dc 100644 --- a/src/smblib/smbdefs.h +++ b/src/smblib/smbdefs.h @@ -494,11 +494,13 @@ typedef struct _PACK { ulong number; /* Message number */ ulong time; /* Local time of fingerprinting */ + ulong length; /* Length (in bytes) of source */ uchar source; /* SMB_HASH_SOURCE* (in low 5-bits) */ uchar flags; /* indications of valid hashes and pre-processing */ ushort crc16; /* CRC-16 of source */ ulong crc32; /* CRC-32 of source */ uchar md5[MD5_DIGEST_SIZE]; /* MD5 digest of source */ + uchar reserved[28]; /* sizeof(hash_t) = 64 */ } hash_t; diff --git a/src/smblib/smbhash.c b/src/smblib/smbhash.c index ba600ea4b99cf050e412992728b0ba2baa3a22dd..d5c7ed117d5ca25ab6bc033e1857b3ba1bba0711 100644 --- a/src/smblib/smbhash.c +++ b/src/smblib/smbhash.c @@ -78,6 +78,8 @@ int SMBCALL smb_findhash(smb_t* smb, hash_t** compare, hash_t* found_hash, if(compare[c]->source!=hash.source) continue; /* wrong source */ + if(compare[c]->length!=hash.length) + continue; /* wrong source length */ if(compare[c]->flags&SMB_HASH_MARKED) continue; /* already marked */ if((compare[c]->flags&SMB_HASH_PROC_MASK)!=(hash.flags&SMB_HASH_PROC_MASK)) @@ -180,6 +182,7 @@ hash_t* SMBCALL smb_hash(ulong msgnum, ulong t, unsigned source, unsigned flags hash->number=msgnum; hash->time=t; + hash->length=length; hash->source=source; hash->flags=flags; if(flags&SMB_HASH_CRC16)