<div dir="ltr">Hello,<div>  I'm trying to write a rule which extracts a size field (single byte) using byte_extract then checks to make sure there is no data at that size by using a negated isdataat check. </div><div><br></div><div>I contrived a pcap where byte offset 12 is the packet size and offset 13 is the packet size + 1. So, I'd expect the following rules to cause alerts:</div><div><br></div><div>alert tcp any any -> any any (msg:"isdataat data_size 103 - should alert";  byte_extract:1,12,data_size; isdataat:!data_size; sid:123129; rev:1;) </div><div>alert tcp any any -> any any (msg:"isdataat data_size 104 - should alert";  byte_extract:1,13,data_size; isdataat:!data_size; sid:123130; rev:1;) <br></div><div><br></div><div>However, they do not cause alerts. An alert is caused by removing the negation on isdataat. </div><div><br></div><div><br></div><div>Attached is the sample pcap, the fast.log output, and the rules file. The rules file contains some additional rules than where described in this email to help illustrate the problem. </div><div><br></div><div>I also added some SCLogDebug() output in detect-byte-extract.c and detect-engine-content-inspection.c to help give a better idea of the what the extracted and isdataat value checks are. It looks like the correct value is being extracted but when checked with isdataat it is zero. Although, I'm not entirely confident I've done that correctly but am happy to share and discuss if there is interest. </div><div><br></div><div>Thanks,</div><div>  Harley</div><div><br></div></div>