tor

The Tor anonymity network
git clone https://git.dasho.dev/tor.git
Log | Files | Refs | README | LICENSE

commit 6faa0350f2dfb446caa59261c5f337c33501ac2b
parent 4665bb4c708df2047915ada436ba98af38678462
Author: Nick Mathewson <nickm@torproject.org>
Date:   Mon,  5 May 2025 12:24:38 -0400

relay_msg: Use relay_cell_max_payload_size when setting maxlen

Diffstat:
Msrc/core/or/relay_msg.c | 14++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/src/core/or/relay_msg.c b/src/core/or/relay_msg.c @@ -101,7 +101,9 @@ static int encode_v0_cell(const relay_msg_t *msg, cell_t *cell_out) { - IF_BUG_ONCE(msg->length > CELL_PAYLOAD_SIZE - RELAY_HEADER_SIZE_V0) { + size_t maxlen = + relay_cell_max_payload_size(RELAY_CELL_FORMAT_V0, msg->command); + IF_BUG_ONCE(msg->length > maxlen) { return -1; } @@ -123,16 +125,12 @@ encode_v1_cell(const relay_msg_t *msg, cell_t *cell_out) { bool expects_streamid = relay_cmd_expects_streamid_in_v1(msg->command); - size_t maxlen; - if (expects_streamid) { - maxlen = CELL_PAYLOAD_SIZE - RELAY_HEADER_SIZE_V1_WITH_STREAM_ID; - } else { - maxlen = CELL_PAYLOAD_SIZE - RELAY_HEADER_SIZE_V1_NO_STREAM_ID; - } - + size_t maxlen = + relay_cell_max_payload_size(RELAY_CELL_FORMAT_V1, msg->command); IF_BUG_ONCE(msg->length > maxlen) { return -1; } + uint8_t *out = cell_out->payload; out[V1_CMD_OFFSET] = msg->command; set_uint16(out+V1_LEN_OFFSET, htons(msg->length));