SetVarValueByIndex(value, data->var_number);
/* advance cursor */
- c.add_pos(bytes_read);
+ c.add_pos(data->offset + bytes_read);
/* this rule option always "matches" if the read is performed correctly */
return MATCH;
}
const uint8_t* const start_ptr = c.buffer();
- const int dsize = c.size();
- const uint8_t* const end_ptr = start_ptr + dsize;
+ const uint8_t* const end_ptr = start_ptr + c.size();
const uint8_t* const base_ptr = offset +
((bjd->relative_flag) ? c.start() : start_ptr);
}
}
- if (!bjd->from_beginning_flag && !bjd->from_end_flag)
- {
- jump += payload_bytes_grabbed;
- jump += c.get_pos();
- }
+ uint32_t pos;
+
+ if ( bjd->from_beginning_flag )
+ pos = jump;
+
+ else if ( bjd->from_end_flag )
+ pos = c.size() + jump;
- if (bjd->from_end_flag)
- jump += dsize;
else
- jump += offset;
+ pos = c.get_pos() + offset + payload_bytes_grabbed + jump;
- jump += post_offset;
+ pos += post_offset;
- if ( !c.set_pos(jump) )
+ if ( !c.set_pos(pos) )
return NO_MATCH;
return MATCH;
if (config.rvalue_var >= 0 && config.rvalue_var < NUM_IPS_OPTIONS_VARS)
{
GetVarValueByIndex(&rvalue, config.rvalue_var);
- if (rvalue == 0)
+ if (rvalue == 0 and config.oper == BM_DIVIDE)
return NO_MATCH;
}
else