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

Reply via email to