On Thu, 27 Aug 2009, Geert Uytterhoeven wrote: > When the quotactl syscall fails, quotactl01 crashes with a segmentation fault > due to an incorrect printf()-style format.
This bug encouraged me to add annotations to the test helpers that take printf()-style formats, cfr. the patch below. It causes a massive amount of compiler warnings, most of them caused by TEST_ERRNO being long. According to CVS history, both TEST_RETURN and TEST_ERRNO have been changed from int to long to accomodate 64-bit platforms, but to me the change of TEST_ERRNO looks bogus. As errno is int according to C99, TEST_ERRNO should actually be int too, right? Note that there are also a few other cases where integers are used on pointer type format specifiers. These will cause crashes when the code path is executed. >From 601578f79c05779acefe023fd499726d9fe4ce03 Mon Sep 17 00:00:00 2001 From: Geert Uytterhoeven <geert.uytterhoe...@sonycom.com> Date: Thu, 27 Aug 2009 17:08:18 +0200 Subject: [PATCH] Annotate tst_*() helpers with __attribute__ ((format (printf, M, N))) Signed-off-by: Geert Uytterhoeven <geert.uytterhoe...@sonycom.com> --- include/test.h | 18 ++++++++++++------ 1 files changed, 12 insertions(+), 6 deletions(-) diff --git a/include/test.h b/include/test.h index 34ed5d2..03b0d46 100644 --- a/include/test.h +++ b/include/test.h @@ -186,12 +186,18 @@ * Functions from lib/tst_res.c */ const char *strttype(int ttype); -void tst_res(int ttype, char *fname, char *arg_fmt, ...); -void tst_resm(int ttype, char *arg_fmt, ...); -void tst_brk(int ttype, char *fname, void (*func)(void), char *arg_fmt, ...); -void tst_brkloop(int ttype, char *fname, void (*func)(void), char *arg_fmt, ...); -void tst_brkm(int ttype, void (*func)(void), char *arg_fmt, ...); -void tst_brkloopm(int ttype, void (*func)(void), char *arg_fmt, ...); +void tst_res(int ttype, char *fname, char *arg_fmt, ...) + __attribute__ ((format (printf, 3, 4))); +void tst_resm(int ttype, char *arg_fmt, ...) + __attribute__ ((format (printf, 2, 3))); +void tst_brk(int ttype, char *fname, void (*func)(void), char *arg_fmt, ...) + __attribute__ ((format (printf, 4, 5))); +void tst_brkloop(int ttype, char *fname, void (*func)(void), char *arg_fmt, ...) + __attribute__ ((format (printf, 4, 5))); +void tst_brkm(int ttype, void (*func)(void), char *arg_fmt, ...) + __attribute__ ((format (printf, 3, 4))); +void tst_brkloopm(int ttype, void (*func)(void), char *arg_fmt, ...) + __attribute__ ((format (printf, 3, 4))); void tst_require_root(void (*func)(void)); int tst_environ(void); void tst_exit(void) LTP_ATTRIBUTE_NORETURN; -- 1.6.2.4 With kind regards, Geert Uytterhoeven Software Architect Techsoft Centre Technology and Software Centre Europe The Corporate Village · Da Vincilaan 7-D1 · B-1935 Zaventem · Belgium Phone: +32 (0)2 700 8453 Fax: +32 (0)2 700 8622 E-mail: geert.uytterhoe...@sonycom.com Internet: http://www.sony-europe.com/ A division of Sony Europe (Belgium) N.V. VAT BE 0413.825.160 · RPR Brussels Fortis · BIC GEBABEBB · IBAN BE41293037680010 ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ Ltp-list mailing list Ltp-list@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ltp-list