{
cm = (MatchedPatterns*)snort_calloc(sizeof(MatchedPatterns));
cm->mpattern = target;
- cm->index = index;
+ cm->index = index + 1;
cm->next = nullptr;
*tmp = cm;
}
static inline uint8_t* continue_buffer_scan(const uint8_t* start, const uint8_t* end, MatchedPatterns* mp,
DetectorHTTPPattern* match)
{
- uint8_t* bp = (uint8_t*) (start) + mp->index + match->pattern_size;
+ uint8_t* bp = (uint8_t*) (start) + mp->index;
if( (bp >= end) || (*bp != ' ' && *bp != 0x09 && *bp != '/') )
return nullptr;
else
goto done;
case APP_ID_GOOGLE_DESKTOP:
- buffPtr = (uint8_t*)start + tmp->index + match->pattern_size;
+ buffPtr = (uint8_t*)start + tmp->index;
+
+ if(buffPtr >= end)
+ break;
+
if (*buffPtr != ')')
{
if (*buffPtr != ' ' && *buffPtr != 0x09 && *buffPtr != '/')
break;
case APP_ID_WGET:
- buffPtr = (uint8_t*)start + tmp->index + match->pattern_size;
+ buffPtr = (uint8_t*)start + tmp->index;
+ if(buffPtr >= end)
+ break;
while (i < MAX_VERSION_SIZE - 1 && buffPtr < end)
{
temp_ver[i++] = *buffPtr++;
temp_ver[0] = 0;
i = 0;
}
- buffPtr = (uint8_t*)start + tmp->index + match->pattern_size;
+ buffPtr = (uint8_t*)start + tmp->index;
+
+ if(buffPtr >= end)
+ break;
+
if (*buffPtr == (uint8_t)'/')
{
buffPtr++;
i =0;
/* if we already collected temp_ver information after seeing 'Version', let's
use that*/
- buffPtr = (uint8_t*)start + tmp->index + match->pattern_size;
+ buffPtr = (uint8_t*)start + tmp->index;
+ if(buffPtr >= end)
+ break;
/* we may have to enter the pattern with the / in it. */
if (*buffPtr == (uint8_t)'/' || *buffPtr == (uint8_t)' ')
buffPtr++;
switch (match->service_id)
{
case APP_ID_SQUID:
- data_ptr = (uint8_t*)data + mp->index + match->pattern_size;
+ data_ptr = (uint8_t*)data + mp->index;
+
+ if (data_ptr >= end)
+ break;
+
if (*data_ptr == '/')
{
data_ptr++;