[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <542C0A75.3070702@users.sourceforge.net>
Date: Wed, 01 Oct 2014 16:06:45 +0200
From: SF Markus Elfring <elfring@...rs.sourceforge.net>
To: linux-kernel@...r.kernel.org,
Andrew Morton <akpm@...ux-foundation.org>,
Stephen Rothwell <sfr@...b.auug.org.au>
CC: Coccinelle <cocci@...teme.lip6.fr>,
kernel-janitors@...r.kernel.org, Michal Marek <mmarek@...e.cz>,
Chi Pham <chidaph@...il.com>,
Fabian Frederick <fabf@...net.be>,
Joe Perches <joe@...ches.com>
Subject: Re: [coccicheck PATCH 2/5] Deletion of unnecessary checks before
specific function calls
>>> If you are convinced that dropping the null tests is a good idea, then you
>>> can submit the patch that makes the change to the relevant maintainers and
>>> mailing lists.
>From 1d2de3c3cfa43cc3c78a91200c41cef438b26a8f Mon Sep 17 00:00:00 2001
From: Markus Elfring <elfring@...rs.sourceforge.net>
Date: Wed, 5 Mar 2014 18:38:43 +0100
Subject: [PATCH 2/5] Addition of a semantic patch file for listing of
functions that check their single parameter
This semantic patch pattern tries to find functions that check their single
parameter for usability.
Example:
Null pointer checks are often performed as input parameter validation.
It uses Python statements to write information about the found source code
places in a data format that is a variant of a CSV text file.
Signed-off-by: Markus Elfring <elfring@...rs.sourceforge.net>
---
.../list_input_parameter_validation1.cocci | 55 ++++++++++++++++++++++
1 file changed, 55 insertions(+)
create mode 100644
scripts/coccinelle/deletions/list_input_parameter_validation1.cocci
diff --git a/scripts/coccinelle/deletions/list_input_parameter_validation1.cocci
b/scripts/coccinelle/deletions/list_input_parameter_validation1.cocci
new file mode 100644
index 0000000..b0a5a52
--- /dev/null
+++ b/scripts/coccinelle/deletions/list_input_parameter_validation1.cocci
@@ -0,0 +1,55 @@
+@...tialize:python@
+@@
+import sys
+result = []
+mark = ['"', '', '"']
+delimiter = '|'
+
+def store_positions(fun, typ, point, places):
+ """Add source code positions to an internal list."""
+ for place in places:
+ fields = []
+ fields.append(fun)
+
+ mark[1] = typ
+ fields.append(''.join(mark))
+
+ fields.append(point)
+
+ mark[1] = place.file.replace('"', '""')
+ fields.append(''.join(mark))
+
+ fields.append(place.line)
+ fields.append(str(int(place.column) + 1))
+ result.append(delimiter.join(fields))
+
+@...ety_check@
+identifier work, input;
+type data_type;
+position pos;
+statement is, es;
+@@
+ void work@pos(data_type input)
+ {
+ ... when any
+( if (input) is else es
+| if (likely(input)) is else es
+)
+ ... when any
+ }
+
+@...ipt:python collection depends on safety_check@
+typ << safety_check.data_type;
+fun << safety_check.work;
+point << safety_check.input;
+places << safety_check.pos;
+@@
+store_positions(fun, typ, point, places)
+
+@...alize:python@
+@@
+if result:
+ result.insert(0, delimiter.join(("function", '"data type"', '"parameter"',
'"source file"', "line", "column")))
+ print("\r\n".join(result))
+else:
+ sys.stderr.write("No result for this analysis!\n")
--
1.9.0
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists