]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
add spatch to detect implicit bool/int/result cast
authorColin Vidal <colin@isc.org>
Tue, 14 Oct 2025 10:45:21 +0000 (12:45 +0200)
committerColin Vidal <colin@isc.org>
Wed, 12 Nov 2025 10:31:28 +0000 (11:31 +0100)
Detection of implicit cast from a boolean into an int, or an
isc_result_t into a boolean (either in an assignement or return
position).

If such pattern is found, a warning comment is added into the code (and
the CI will fails) so the error can be spotted and manually fixed.

cocci/implicit_casts_warning.spatch [new file with mode: 0644]

diff --git a/cocci/implicit_casts_warning.spatch b/cocci/implicit_casts_warning.spatch
new file mode 100644 (file)
index 0000000..1f2e10c
--- /dev/null
@@ -0,0 +1,56 @@
+@bool_into_int_warning@
+position p;
+int i;
+bool b;
+@@
+i = b@p;
+
+@script:python@
+p << bool_into_int_warning.p;
+@@
+report = coccilib.report.build_report(p[0], "WARNING: implicit bool->int cast on assignment")
+sys.stderr.write(report)
+
+
+
+@return_isc_result_t_into_bool_warning@
+position p;
+isc_result_t result;
+identifier fn;
+identifier literalresult =~ "ISC_R_.*|DNS_R_.*|DST_R_.*|ISCCC_R_.*";
+@@
+bool fn(...) {
+<...
+(
+return result@p;
+|
+return literalresult@p;
+)
+...>
+}
+
+@script:python@
+p << return_isc_result_t_into_bool_warning.p;
+@@
+report = coccilib.report.build_report(p[0], "WARNING: implicit isc_result_t->bool cast on return value")
+sys.stderr.write(report)
+
+
+
+@isc_result_t_into_bool_warning@
+position p;
+isc_result_t result;
+identifier literalresult =~ "ISC_R_.*|DNS_R_.*|DST_R_.*|ISCCC_R_.*";
+bool b;
+@@
+(
+b = result@p;
+|
+b = literalresult@p;
+)
+
+@script:python@
+p << isc_result_t_into_bool_warning.p;
+@@
+report = coccilib.report.build_report(p[0], "WARNING: implicit isc_result_t->bool cast on assignment")
+sys.stderr.write(report)