@@ -576,11 +576,12 @@ non_null()
576576static int new_sendback (Onion_Client * onion_c , uint32_t num , const uint8_t * public_key , const IP_Port * ip_port ,
577577 uint32_t path_num , uint64_t * sendback )
578578{
579- uint8_t data [sizeof (uint32_t ) + CRYPTO_PUBLIC_KEY_SIZE + sizeof ( IP_Port ) + sizeof (uint32_t )];
579+ uint8_t data [sizeof (uint32_t ) + CRYPTO_PUBLIC_KEY_SIZE + SIZE_IPPORT + sizeof (uint32_t )];
580580 memcpy (data , & num , sizeof (uint32_t ));
581- memcpy (data + sizeof (uint32_t ), public_key , CRYPTO_PUBLIC_KEY_SIZE );
582- memcpy (data + sizeof (uint32_t ) + CRYPTO_PUBLIC_KEY_SIZE , ip_port , sizeof (IP_Port ));
583- memcpy (data + sizeof (uint32_t ) + CRYPTO_PUBLIC_KEY_SIZE + sizeof (IP_Port ), & path_num , sizeof (uint32_t ));
581+ memcpy (& data [sizeof (uint32_t )], public_key , CRYPTO_PUBLIC_KEY_SIZE );
582+ const int packed_len = pack_ip_port (onion_c -> logger , & data [sizeof (uint32_t ) + CRYPTO_PUBLIC_KEY_SIZE ], SIZE_IPPORT , ip_port );
583+ memzero (& data [sizeof (uint32_t ) + CRYPTO_PUBLIC_KEY_SIZE + packed_len ], SIZE_IPPORT - packed_len );
584+ memcpy (& data [sizeof (uint32_t ) + CRYPTO_PUBLIC_KEY_SIZE + SIZE_IPPORT ], & path_num , sizeof (uint32_t ));
584585 * sendback = ping_array_add (onion_c -> announce_ping_array , onion_c -> mono_time , onion_c -> rng , data , sizeof (data ));
585586
586587 if (* sendback == 0 ) {
@@ -607,15 +608,15 @@ static uint32_t check_sendback(Onion_Client *onion_c, const uint8_t *sendback, u
607608{
608609 uint64_t sback ;
609610 memcpy (& sback , sendback , sizeof (uint64_t ));
610- uint8_t data [sizeof (uint32_t ) + CRYPTO_PUBLIC_KEY_SIZE + sizeof ( IP_Port ) + sizeof (uint32_t )];
611+ uint8_t data [sizeof (uint32_t ) + CRYPTO_PUBLIC_KEY_SIZE + SIZE_IPPORT + sizeof (uint32_t )];
611612
612613 if (ping_array_check (onion_c -> announce_ping_array , onion_c -> mono_time , data , sizeof (data ), sback ) != sizeof (data )) {
613614 return -1 ;
614615 }
615616
616617 memcpy (ret_pubkey , data + sizeof (uint32_t ), CRYPTO_PUBLIC_KEY_SIZE );
617- memcpy (ret_ip_port , data + sizeof (uint32_t ) + CRYPTO_PUBLIC_KEY_SIZE , sizeof ( IP_Port ) );
618- memcpy (path_num , data + sizeof (uint32_t ) + CRYPTO_PUBLIC_KEY_SIZE + sizeof ( IP_Port ) , sizeof (uint32_t ));
618+ unpack_ip_port (ret_ip_port , data + sizeof (uint32_t ) + CRYPTO_PUBLIC_KEY_SIZE , SIZE_IPPORT , false );
619+ memcpy (path_num , data + sizeof (uint32_t ) + CRYPTO_PUBLIC_KEY_SIZE + SIZE_IPPORT , sizeof (uint32_t ));
619620
620621 uint32_t num ;
621622 memcpy (& num , data , sizeof (uint32_t ));
0 commit comments