bind9/cocci/dns_name_copy.spatch
Ondřej Surý 406eba0c41 Add semantic patches to correctly check dns_name_copy(..., NULL) return code
The dns_name_copy() function cannot fail gracefully when the last argument
(target) is NULL.  Add RUNTIME_CHECK()s around such calls.

The first semantic patch adds RUNTIME_CHECK() around any call that ignores the
return value and is very safe to apply.

The second semantic patch attempts to properly add RUNTIME_CHECK() to places
where the return value from `dns_name_copy()` is recorded into `result`
variable.  The result of this semantic patch needs to be reviewed by hand.

Both patches misses couple places where the code surrounding the
`dns_name_copy(..., NULL)` usage is more complicated and is better suited to be
fixed by a human being that understands the surrounding code.
2019-10-01 10:43:26 +10:00

30 lines
658 B
Text

@@
expression E1, E2;
@@
- dns_name_copy(E1, E2, NULL);
+ RUNTIME_CHECK(dns_name_copy(E1, E2, NULL) == ISC_R_SUCCESS);
@@
expression E1, E2;
@@
- (void)dns_name_copy(E1, E2, NULL);
+ RUNTIME_CHECK(dns_name_copy(E1, E2, NULL) == ISC_R_SUCCESS);
@@
expression E1, E2;
@@
- return (dns_name_copy(E1, E2, NULL));
+ RUNTIME_CHECK(dns_name_copy(E1, E2, NULL) == ISC_R_SUCCESS);
+ return (ISC_R_SUCCESS);
// ./bin/named/query.c processing broken with this rule, fix manually
// @@
// expression V, E1, E2;
// @@
//
// - V = dns_name_copy(E1, E2, NULL);
// - RUNTIME_CHECK(V == ISC_R_SUCCESS);
// + RUNTIME_CHECK(dns_name_copy(E1, E2, NULL) == ISC_R_SUCCESS);