From 35086ec63eb3405949aaeb2cd5c64ba9f459967d Mon Sep 17 00:00:00 2001 From: Jedrzej Stuczynski Date: Mon, 20 Jan 2020 16:46:52 +0000 Subject: [PATCH] Checking for plaintext length before sending it to nym-client --- nym-client/src/sockets/ws.rs | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/nym-client/src/sockets/ws.rs b/nym-client/src/sockets/ws.rs index 222a9baf35..e7f0c8ee33 100644 --- a/nym-client/src/sockets/ws.rs +++ b/nym-client/src/sockets/ws.rs @@ -75,6 +75,26 @@ impl ClientRequest { recipient_address: String, mut input_tx: mpsc::UnboundedSender, ) -> ServerResponse { + let message_bytes = msg.into_bytes(); + // TODO: wait until 0.4.0 release to replace those constants with newly exposed + // sphinx::constants::MAXIMUM_PLAINTEXT_LENGTH + // we can't do it now for compatibility reasons as most recent sphinx revision + // has breaking changes due to packet format changes + let maximum_plaintext_length = sphinx::constants::PAYLOAD_SIZE + - sphinx::constants::SECURITY_PARAMETER + - sphinx::constants::DESTINATION_ADDRESS_LENGTH + - 1; + if message_bytes.len() > maximum_plaintext_length { + return ServerResponse::Error { + message: format!( + "too long message. Sent {} bytes while the maximum is {}", + message_bytes.len(), + maximum_plaintext_length + ) + .to_string(), + }; + } + let address_vec = match base64::decode_config(&recipient_address, base64::URL_SAFE) { Err(e) => { return ServerResponse::Error { @@ -95,9 +115,7 @@ impl ClientRequest { let dummy_surb = [0; 16]; - let input_msg = InputMessage(Destination::new(address, dummy_surb), msg.into_bytes()); - - println!("ALMOST ABOUT TO SOMEDAY SEND {:?}", input_msg); + let input_msg = InputMessage(Destination::new(address, dummy_surb), message_bytes); input_tx.send(input_msg).await.unwrap(); ServerResponse::Send