if (SEQ_LT(stream->last_ack, (seg->seq + seg->payload_len))) {
if (SEQ_LT(stream->last_ack, (rd->ra_base_seq + 1))) {
- payload_len = (stream->last_ack - seg->seq);
- SCLogDebug("payload_len %u", payload_len);
+ return 1;
} else {
payload_len = (stream->last_ack - seg->seq) - payload_offset;
SCLogDebug("payload_len %u", payload_len);
/* copy the data into the buffer */
uint16_t copy_size = sizeof(rd->data) - rd->data_len;
+ if (copy_size + payload_offset > seg->payload_len) {
+ copy_size = seg->payload_len - payload_offset;
+ }
if (copy_size > payload_len) {
copy_size = payload_len;
}
if (SCLogDebugEnabled()) {
BUG_ON(copy_size > sizeof(rd->data));
+ BUG_ON(copy_size+payload_offset > seg->payload_len);
+ BUG_ON(copy_size+payload_offset > seg->pool_size);
}
+
SCLogDebug("copy_size is %"PRIu16"", copy_size);
memcpy(rd->data + rd->data_len, seg->payload + payload_offset, copy_size);
rd->data_len += copy_size;
if (SEQ_LT(stream->last_ack, (seg->seq + seg->payload_len))) {
if (SEQ_LT(stream->last_ack, rd->ra_base_seq)) {
- payload_len = (stream->last_ack - seg->seq);
+ return 1;
} else {
payload_len = (stream->last_ack - seg->seq) - payload_offset;
}
/* copy the data into the smsg */
uint32_t copy_size = rd->smsg->data_size - rd->smsg_offset;
+ if (copy_size + payload_offset > seg->payload_len) {
+ copy_size = seg->payload_len - payload_offset;
+ }
if (copy_size > payload_len) {
copy_size = payload_len;
}