Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/usr.bin/xlint/lint1 lint: in DEBUG mode, verify printf param...
details: https://anonhg.NetBSD.org/src/rev/eb8e695ab412
branches: trunk
changeset: 1017660:eb8e695ab412
user: rillig <rillig%NetBSD.org@localhost>
date: Sun Jan 03 18:48:37 2021 +0000
description:
lint: in DEBUG mode, verify printf parameters for messages
Since several years GCC validates printf-style strings, and there is no
reason not to let GCC do that work. This prevents bugs like the
segmentation fault that was fixed in tree.c 1.109 from 2021-01-01.
By default, lint is compiled with DEBUG off, but it's easy enough to
compile it in debug mode once in a while.
diffstat:
usr.bin/xlint/lint1/Makefile | 4 +++-
usr.bin/xlint/lint1/Makefile.err-msgs-h | 13 +++++++++++++
usr.bin/xlint/lint1/decl.c | 6 +++---
usr.bin/xlint/lint1/err.c | 14 +++++++-------
usr.bin/xlint/lint1/lint1.h | 26 +++++++++++++++++++++++++-
5 files changed, 51 insertions(+), 12 deletions(-)
diffs (172 lines):
diff -r afe77ee79cc4 -r eb8e695ab412 usr.bin/xlint/lint1/Makefile
--- a/usr.bin/xlint/lint1/Makefile Sun Jan 03 18:35:51 2021 +0000
+++ b/usr.bin/xlint/lint1/Makefile Sun Jan 03 18:48:37 2021 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.54 2021/01/01 14:51:44 rillig Exp $
+# $NetBSD: Makefile,v 1.55 2021/01/03 18:48:37 rillig Exp $
.include <bsd.own.mk>
@@ -38,9 +38,11 @@
DPADD+= ${LIBL}
.endif
+.include "Makefile.err-msgs-h"
.include "Makefile.ops-h"
.include "Makefile.ops-c"
.include <bsd.prog.mk>
${SRCS}: ops.h
+${SRCS:Nerr.c}: err-msgs.h
diff -r afe77ee79cc4 -r eb8e695ab412 usr.bin/xlint/lint1/Makefile.err-msgs-h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usr.bin/xlint/lint1/Makefile.err-msgs-h Sun Jan 03 18:48:37 2021 +0000
@@ -0,0 +1,13 @@
+# $NetBSD: Makefile.err-msgs-h,v 1.1 2021/01/03 18:48:37 rillig Exp $
+
+err-msgs.h: err.c Makefile.err-msgs-h
+ ${_MKTARGET_CREATE}
+ sp='[[:space:]]*'; \
+ from="^$$sp\(\".*\"\)\,$$sp/\*$$sp\([0-9][0-9]*\)$$sp\*/\$$"; \
+ ${TOOL_SED} -n -e "s,$$from,#define MSG_\2 \1,p" < err.c > ${.TARGET}.tmp
+ mv -f ${.TARGET}.tmp ${.TARGET}
+
+CLEANFILES+= err-msgs.h
+DPSRCS+= err-msgs.h
+
+externs1.h: err-msgs.h
diff -r afe77ee79cc4 -r eb8e695ab412 usr.bin/xlint/lint1/decl.c
--- a/usr.bin/xlint/lint1/decl.c Sun Jan 03 18:35:51 2021 +0000
+++ b/usr.bin/xlint/lint1/decl.c Sun Jan 03 18:48:37 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: decl.c,v 1.106 2021/01/03 17:42:45 rillig Exp $ */
+/* $NetBSD: decl.c,v 1.107 2021/01/03 18:48:37 rillig Exp $ */
/*
* Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved.
@@ -38,7 +38,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: decl.c,v 1.106 2021/01/03 17:42:45 rillig Exp $");
+__RCSID("$NetBSD: decl.c,v 1.107 2021/01/03 18:48:37 rillig Exp $");
#endif
#include <sys/param.h>
@@ -3206,7 +3206,7 @@
cpos = curr_pos;
curr_pos = psym->s_def_pos;
if (msg != -1) {
- message(msg);
+ (message)(msg);
} else if (psym->s_def == DEF || psym->s_def == TDEF) {
/* previous definition of %s */
message(261, psym->s_name);
diff -r afe77ee79cc4 -r eb8e695ab412 usr.bin/xlint/lint1/err.c
--- a/usr.bin/xlint/lint1/err.c Sun Jan 03 18:35:51 2021 +0000
+++ b/usr.bin/xlint/lint1/err.c Sun Jan 03 18:48:37 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: err.c,v 1.63 2021/01/03 17:42:45 rillig Exp $ */
+/* $NetBSD: err.c,v 1.64 2021/01/03 18:48:37 rillig Exp $ */
/*
* Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: err.c,v 1.63 2021/01/03 17:42:45 rillig Exp $");
+__RCSID("$NetBSD: err.c,v 1.64 2021/01/03 18:48:37 rillig Exp $");
#endif
#include <sys/types.h>
@@ -464,7 +464,7 @@
}
void
-error(int n, ...)
+(error)(int n, ...)
{
va_list ap;
@@ -502,7 +502,7 @@
}
void
-warning(int n, ...)
+(warning)(int n, ...)
{
va_list ap;
@@ -512,7 +512,7 @@
}
void
-message(int n, ...)
+(message)(int n, ...)
{
va_list ap;
const char *fn;
@@ -535,7 +535,7 @@
* "right"... [perry, 2 Nov 2002]
*/
void
-c99ism(int n, ...)
+(c99ism)(int n, ...)
{
va_list ap;
bool extensions_ok = Sflag || gflag;
@@ -550,7 +550,7 @@
}
void
-gnuism(int n, ...)
+(gnuism)(int n, ...)
{
va_list ap;
diff -r afe77ee79cc4 -r eb8e695ab412 usr.bin/xlint/lint1/lint1.h
--- a/usr.bin/xlint/lint1/lint1.h Sun Jan 03 18:35:51 2021 +0000
+++ b/usr.bin/xlint/lint1/lint1.h Sun Jan 03 18:48:37 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: lint1.h,v 1.48 2021/01/02 18:26:44 rillig Exp $ */
+/* $NetBSD: lint1.h,v 1.49 2021/01/03 18:48:37 rillig Exp $ */
/*
* Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved.
@@ -33,6 +33,7 @@
*/
#include "lint.h"
+#include "err-msgs.h"
#include "op.h"
/*
@@ -435,3 +436,26 @@
#endif
extern err_set msgset;
+
+
+#ifdef DEBUG
+# include "err-msgs.h"
+
+/* ARGSUSED */
+static inline void __attribute__((format(printf, 1, 2)))
+check_printf(const char *fmt, ...)
+{
+}
+
+# define wrap_check_printf(func, id, args...) \
+ do { \
+ check_printf(__CONCAT(MSG_, id), ##args); \
+ (func)(id, ##args); \
+ } while (/*CONSTCOND*/0)
+
+# define error(id, args...) wrap_check_printf(error, id, ##args)
+# define warning(id, args...) wrap_check_printf(warning, id, ##args)
+# define message(id, args...) wrap_check_printf(message, id, ##args)
+# define gnuism(id, args...) wrap_check_printf(gnuism, id, ##args)
+# define c99ism(id, args...) wrap_check_printf(c99ism, id, ##args)
+#endif
Home |
Main Index |
Thread Index |
Old Index