Linux Audio

Check our new training course

Loading...
  1/// Use kstrdup rather than duplicating its implementation
  2///
  3// Confidence: High
  4// Copyright: (C) 2010-2012 Nicolas Palix.  GPLv2.
  5// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6.  GPLv2.
  6// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6.  GPLv2.
  7// URL: http://coccinelle.lip6.fr/
  8// Comments:
  9// Options: --no-includes --include-headers
 10
 11virtual patch
 12virtual context
 13virtual org
 14virtual report
 15
 16@depends on patch@
 17expression from,to;
 18expression flag,E1,E2;
 19statement S;
 20@@
 21
 22-  to = kmalloc(strlen(from) + 1,flag);
 23+  to = kstrdup(from, flag);
 24   ... when != \(from = E1 \| to = E1 \)
 25   if (to==NULL || ...) S
 26   ... when != \(from = E2 \| to = E2 \)
 27-  strcpy(to, from);
 28
 29@depends on patch@
 30expression x,from,to;
 31expression flag,E1,E2,E3;
 32statement S;
 33@@
 34
 35-   x = strlen(from) + 1;
 36    ... when != \( x = E1 \| from = E1 \)
 37-   to = \(kmalloc\|kzalloc\)(x,flag);
 38+   to = kstrdup(from, flag);
 39    ... when != \(x = E2 \| from = E2 \| to = E2 \)
 40    if (to==NULL || ...) S
 41    ... when != \(x = E3 \| from = E3 \| to = E3 \)
 42-   memcpy(to, from, x);
 43
 44// ---------------------------------------------------------------------
 45
 46@r1 depends on !patch exists@
 47expression from,to;
 48expression flag,E1,E2;
 49statement S;
 50position p1,p2;
 51@@
 52
 53*  to = kmalloc@p1(strlen(from) + 1,flag);
 54   ... when != \(from = E1 \| to = E1 \)
 55   if (to==NULL || ...) S
 56   ... when != \(from = E2 \| to = E2 \)
 57*  strcpy@p2(to, from);
 58
 59@r2 depends on !patch exists@
 60expression x,from,to;
 61expression flag,E1,E2,E3;
 62statement S;
 63position p1,p2;
 64@@
 65
 66*   x = strlen(from) + 1;
 67    ... when != \( x = E1 \| from = E1 \)
 68*   to = \(kmalloc@p1\|kzalloc@p2\)(x,flag);
 69    ... when != \(x = E2 \| from = E2 \| to = E2 \)
 70    if (to==NULL || ...) S
 71    ... when != \(x = E3 \| from = E3 \| to = E3 \)
 72*   memcpy@p2(to, from, x);
 73
 74@script:python depends on org@
 75p1 << r1.p1;
 76p2 << r1.p2;
 77@@
 78
 79cocci.print_main("WARNING opportunity for kstrdep",p1)
 80cocci.print_secs("strcpy",p2)
 81
 82@script:python depends on org@
 83p1 << r2.p1;
 84p2 << r2.p2;
 85@@
 86
 87cocci.print_main("WARNING opportunity for kstrdep",p1)
 88cocci.print_secs("memcpy",p2)
 89
 90@script:python depends on report@
 91p1 << r1.p1;
 92p2 << r1.p2;
 93@@
 94
 95msg = "WARNING opportunity for kstrdep (strcpy on line %s)" % (p2[0].line)
 96coccilib.report.print_report(p1[0], msg)
 97
 98@script:python depends on report@
 99p1 << r2.p1;
100p2 << r2.p2;
101@@
102
103msg = "WARNING opportunity for kstrdep (memcpy on line %s)" % (p2[0].line)
104coccilib.report.print_report(p1[0], msg)