@@ -2154,9 +2154,18 @@ int ndpi_flow2json(struct ndpi_detection_module_struct *ndpi_struct,
21542154 if (flow -> tcp .fingerprint_raw )
21552155 ndpi_serialize_string_string (serializer , "tcp_fingerprint_raw" , flow -> tcp .fingerprint_raw );
21562156
2157- if (flow -> ndpi .fingerprint )
2158- ndpi_serialize_string_string (serializer , "ndpi_fingerprint" , flow -> ndpi . fingerprint );
2157+ if (flow -> ndpi .client_fingerprint || flow -> ndpi . server_fingerprint ) {
2158+ ndpi_serialize_start_of_block (serializer , "ndpi_fingerprint" );
21592159
2160+ if (flow -> ndpi .client_fingerprint )
2161+ ndpi_serialize_string_string (serializer , "client" , flow -> ndpi .client_fingerprint );
2162+
2163+ if (flow -> ndpi .server_fingerprint )
2164+ ndpi_serialize_string_string (serializer , "server" , flow -> ndpi .server_fingerprint );
2165+
2166+ ndpi_serialize_end_of_block (serializer );
2167+ }
2168+
21602169 ndpi_serialize_string_string (serializer , "proto" ,
21612170 ndpi_get_ip_proto_name (l4_protocol ,
21622171 l4_proto_name , sizeof (l4_proto_name )));
@@ -4004,10 +4013,20 @@ int ndpi_snprintf(char * str, size_t size, char const * format, ...) {
40044013 va_list va_args ;
40054014
40064015 va_start (va_args , format );
4007- int ret = ndpi_vsnprintf (str , size , format , va_args );
4016+ int rc = ndpi_vsnprintf (str , size , format , va_args );
40084017 va_end (va_args );
40094018
4010- return ret ;
4019+ /*
4020+ ndpi_snprintf wraps standard snprintf, which returns the number of characters that would
4021+ have been written (not the number actually written) when the output is truncated.
4022+ So if rc >= size, only size - 1 characters were actually written, but tls_s_len is
4023+ advanced by rc. This has two consequences:
4024+ */
4025+
4026+ if (rc >= (int )size )
4027+ rc = size - 1 ;
4028+
4029+ return (rc );
40114030}
40124031
40134032/* ******************************************* */
0 commit comments