Project

General

Profile

Actions

Bug #1068

closed

format string issues with size_t + qa not catching them

Added by Victor Julien almost 11 years ago. Updated almost 11 years ago.

Status:
Closed
Priority:
Normal
Assignee:
Target version:
Affected Versions:
Effort:
Difficulty:
Label:

Description

On 32bit clang reports:

clang -DHAVE_CONFIG_H -I. -I..   -I./../libhtp/  -DLOCAL_STATE_DIR=\"/usr/local/var\" -Werror -O0 -ggdb -fsanitize=address -Wextra -Werror-implicit-function-declaration -Wall -fno-strict-aliasing -Wno-unused-parameter -std=gnu99 -DUNITTESTS -DHAVE_LIBNET11 -D_BSD_SOURCE -D__BSD_SOURCE -D__FAVOR_BSD -DHAVE_NET_ETHERNET_H -DHAVE_LIBNET_ICMPV6_UNREACH  -I/usr/include -DLIBPCAP_VERSION_MAJOR=1 -DHAVE_PCAP_SET_BUFF -DHAVE_LIBCAP_NG -DREVISION="5ee3649" -MT app-layer-htp.o -MD -MP -MF .deps/app-layer-htp.Tpo -c -o app-layer-htp.o app-layer-htp.c
app-layer-htp.c:3188:20: error: format specifies type 'unsigned long long' but the argument has type 'size_t' (aka 'unsigned int') [-Werror,-Wformat]
                   bstr_len(tx_ud->request_uri_normalized));
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./../libhtp/htp/bstr.h:77:21: note: expanded from macro 'bstr_len'
#define bstr_len(X) ((*(X)).len)
                    ^~~~~~~~~~~~

The code is:
            printf("normalized uri len should be %"PRIuMAX", is %"PRIuMAX,
                   (uintmax_t)reflen,
                   bstr_len(tx_ud->request_uri_normalized));

Which means clang is correct as bstr_len returns a size_t.

By default in qa we don't check unittests with cocci (for performance reasons IIRC). However, if we do this manually it doesn't report this case:

$ spatch -sp_file qa/coccinelle/size_t.cocci src/app-layer-htp.c
init_defs_builtins: /usr/share/coccinelle/standard.h
HANDLING: src/app-layer-htp.c

Actions

Also available in: Atom PDF