@@ -129,12 +129,14 @@ int sigsafe_format(char *str, size_t size, const char *fmt, ...) {
129
129
case AF_INET : {
130
130
struct sockaddr_in * addr4 = (struct sockaddr_in * )addr ;
131
131
uint8_t * ipv4 = (uint8_t * )& (addr4 -> sin_addr );
132
- strp += sigsafe_format (strp , stre - strp , "%u.%u.%u.%u#%u" , ipv4 [0 ], ipv4 [1 ], ipv4 [2 ], ipv4 [3 ], addr4 -> sin_port );
132
+ uint8_t * port = (uint8_t * )& (addr4 -> sin_port );
133
+ strp += sigsafe_format (strp , stre - strp , "%u.%u.%u.%u#%u" , ipv4 [0 ], ipv4 [1 ], ipv4 [2 ], ipv4 [3 ], (port [0 ] << 8 ) | port [1 ]);
133
134
append_str = "" ;
134
135
} break ;
135
136
case AF_INET6 : {
136
137
struct sockaddr_in6 * addr6 = (struct sockaddr_in6 * )addr ;
137
138
uint8_t * ipv6 = (uint8_t * )& (addr6 -> sin6_addr );
139
+ uint8_t * port = (uint8_t * )& (addr6 -> sin6_port );
138
140
int mzb = -2 , mze = 0 ; // maximal zero-filled gap begin (incl.) and end (excl.)
139
141
{ // find longest gap
140
142
int zb = 0 , ze = 0 ;
@@ -162,7 +164,7 @@ int sigsafe_format(char *str, size_t size, const char *fmt, ...) {
162
164
strp += sigsafe_format (strp , stre - strp , "%x" , (ipv6 [i ] << 8 ) | ipv6 [i + 1 ]);
163
165
}
164
166
}
165
- strp += sigsafe_format (strp , stre - strp , "#%u" , addr6 -> sin6_port );
167
+ strp += sigsafe_format (strp , stre - strp , "#%u" , ( port [ 0 ] << 8 ) | port [ 1 ] );
166
168
append_str = "" ;
167
169
} break ;
168
170
case AF_UNSPEC :
0 commit comments