Linux Audio

Check our new training course

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