/* Now we have full length */
frame_len = session->cur_frame_state & 0x3FFF;
- if (frame_len > sizeof(struct rspamd_fuzzy_encrypted_shingle_cmd)) {
+ if (frame_len > FUZZY_TCP_BUFFER_LENGTH || frame_len == 0) {
msg_err("invalid frame length %d from %s, closing connection",
(int) frame_len,
rspamd_inet_address_to_string(session->common.addr));
time_since_failure,
rspamd_upstream_name(upstream),
rule->tcp_retry_delay);
+ /* g_ptr_array_remove automatically calls fuzzy_tcp_connection_unref via free_func */
g_ptr_array_remove(rule->tcp_connections, conn);
- FUZZY_TCP_RELEASE(conn); /* Release reference held by array */
conn = NULL;
}
}
}
else {
/* Writing data */
- write_ptr = buf->data + (buf->bytes_written - sizeof(buf->size_hdr));
- remaining = buf->total_len - buf->bytes_written;
+ gsize data_offset = buf->bytes_written - sizeof(buf->size_hdr);
+ gsize data_len = buf->total_len - sizeof(buf->size_hdr);
+ write_ptr = buf->data + data_offset;
+ remaining = data_len - data_offset;
}
r = write(conn->fd, write_ptr, remaining);