tracetool: carefully define SDT_USE_VARIADIC
[qemu.git] / scripts / coccinelle / error-use-after-free.cocci
1 // Find and fix trivial use-after-free of Error objects
2 //
3 // Copyright (c) 2020 Virtuozzo International GmbH.
4 //
5 // This program is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU General Public License as
7 // published by the Free Software Foundation; either version 2 of the
8 // License, or (at your option) any later version.
9 //
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 // GNU General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with this program.  If not, see
17 // <http://www.gnu.org/licenses/>.
18 //
19 // How to use:
20 // spatch --sp-file scripts/coccinelle/error-use-after-free.cocci \
21 //  --macro-file scripts/cocci-macro-file.h --in-place \
22 //  --no-show-diff ( FILES... | --use-gitgrep . )
23
24 @ exists@
25 identifier fn, fn2;
26 expression err;
27 @@
28
29  fn(...)
30  {
31      <...
32 (
33      error_free(err);
34 +    err = NULL;
35 |
36      error_report_err(err);
37 +    err = NULL;
38 |
39      error_reportf_err(err, ...);
40 +    err = NULL;
41 |
42      warn_report_err(err);
43 +    err = NULL;
44 |
45      warn_reportf_err(err, ...);
46 +    err = NULL;
47 )
48      ... when != err = NULL
49          when != exit(...)
50      fn2(..., err, ...)
51      ...>
52  }