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:
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));