1 #ifndef BANNED_H
2 #define BANNED_H
3 
4 /*
5  * Inspired by
6  *   - http://github.com/git/git/blob/master/banned.h
7  *   - http://github.com/leafsr/gcc-poison/blob/master/poison.h
8  *
9  * Force compile-time error on use of functions which are considered banned
10  * because they are easy to misuse and complicate audits.
11  */
12 
13 #define BANNED(func) sorry_##func##_is_a_banned_function
14 
15 #undef strcpy
16 #define strcpy(...) BANNED(strcpy)
17 
18 #undef strcat
19 #define strcat(...) BANNED(strcat)
20 
21 #undef strncpy
22 #define strncpy(...) BANNED(strncpy)
23 
24 #undef strncat
25 #define strncat(...) BANNED(strncat)
26 
27 #undef sprintf
28 #define sprintf(...) BANNED(sprintf)
29 
30 #undef vsprintf
31 #define vsprintf(...) BANNED(vsprintf)
32 
33 #undef wcscpy
34 #define wcscpy(...) BANNED(wcscpy)
35 
36 #undef stpcpy
37 #define stpcpy(...) BANNED(stpcpy)
38 
39 #undef wcpcpy
40 #define wcpcpy(...) BANNED(wcpcpy)
41 
42 #undef scanf
43 #define scanf(...) BANNED(scanf)
44 
45 #undef sscanf
46 #define sscanf(...) BANNED(sscanf)
47 
48 #undef vscanf
49 #define vscanf(...) BANNED(vscanf)
50 
51 #undef fwscanf
52 #define fwscanf(...) BANNED(fwscanf)
53 
54 #undef swscanf
55 #define swscanf(...) BANNED(swscanf)
56 
57 #undef wscanf
58 #define wscanf(...) BANNED(wscanf)
59 
60 #undef gets
61 #define gets(...) BANNED(gets)
62 
63 #undef puts
64 #define puts(...) BANNED(puts)
65 
66 #undef wcscat
67 #define wcscat(...) BANNED(wcscat)
68 
69 #undef wcrtomb
70 #define wcrtomb(...) BANNED(wcrtomb)
71 
72 #undef wctob
73 #define wctob(...) BANNED(wctob)
74 
75 #undef asprintf
76 #define asprintf(...) BANNED(asprintf)
77 
78 #undef vasprintf
79 #define vasprintf(...) BANNED(vasprintf)
80 
81 #undef wcsncpy
82 #define wcsncpy(...) BANNED(wcsncpy)
83 
84 #undef strtok
85 #define strtok(...) BANNED(strtok)
86 
87 #undef wcstok
88 #define wcstok(...) BANNED(wcstok)
89 
90 #undef strdupa
91 #define strdupa(...) BANNED(strdupa)
92 
93 #undef strndupa
94 #define strndupa(...) BANNED(strndupa)
95 
96 #undef longjmp
97 #define longjmp(...) BANNED(longjmp)
98 
99 #undef siglongjmp
100 #define siglongjmp(...) BANNED(siglongjmp)
101 
102 #undef setjmp
103 #define setjmp(...) BANNED(setjmp)
104 
105 #undef sigsetjmp
106 #define sigsetjmp(...) BANNED(sigsetjmp)
107 
108 #undef mallopt
109 #define mallopt(...) BANNED(mallopt)
110 
111 #undef remove
112 #define remove(...) BANNED(remove)
113 
114 #undef mktemp
115 #define mktemp(...) BANNED(mktemp)
116 
117 #undef tmpnam
118 #define tmpnam(...) BANNED(tmpnam)
119 
120 #undef tempnam
121 #define tempnam(...) BANNED(tempnam)
122 
123 #undef cuserid
124 #define cuserid(...) BANNED(cuserid)
125 
126 #undef rexec
127 #define rexec(...) BANNED(rexec)
128 
129 #undef rexec_af
130 #define rexec_af(...) BANNED(rexec_af)
131 
132 #endif /* BANNED_H */
133