Last active
August 29, 2019 18:29
-
-
Save izackp/302ef2c8d74ba94931b315ed79d01908 to your computer and use it in GitHub Desktop.
Complicated functions that are they're too easy to misuse https://github.com/git/git/blob/master/banned.h
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//https://github.com/git/git/blob/master/banned.h | |
/* | |
There are a few standard C functions (like strcpy) which are | |
easy to misuse. E.g.: | |
char path[PATH_MAX]; | |
strcpy(path, arg); | |
may overflow the "path" buffer. Sometimes there's an earlier | |
constraint on the size of "arg", but even in such a case | |
it's hard to verify that the code is correct. If the size | |
really is unbounded, you're better off using a dynamic | |
helper like strbuf: | |
struct strbuf path = STRBUF_INIT; | |
strbuf_addstr(path, arg); | |
or if it really is bounded, then use xsnprintf to show your | |
expectation (and get a run-time assertion): | |
char path[PATH_MAX]; | |
xsnprintf(path, sizeof(path), "%s", arg); | |
which makes further auditing easier. | |
*/ | |
#ifndef BANNED_H | |
#define BANNED_H | |
/* | |
* This header lists functions that have been banned from our code base, | |
* because they're too easy to misuse (and even if used correctly, | |
* complicate audits). Including this header turns them into compile-time | |
* errors. | |
*/ | |
#define BANNED(func) sorry_##func##_is_a_banned_function | |
#undef strcpy | |
#define strcpy(x,y) BANNED(strcpy) | |
#undef strcat | |
#define strcat(x,y) BANNED(strcat) | |
#undef strncpy | |
#define strncpy(x,y,n) BANNED(strncpy) | |
#undef strncat | |
#define strncat(x,y,n) BANNED(strncat) | |
#undef sprintf | |
#undef vsprintf | |
#ifdef HAVE_VARIADIC_MACROS | |
#define sprintf(...) BANNED(sprintf) | |
#define vsprintf(...) BANNED(vsprintf) | |
#else | |
#define sprintf(buf,fmt,arg) BANNED(sprintf) | |
#define vsprintf(buf,fmt,arg) BANNED(sprintf) | |
#endif | |
#endif /* BANNED_H */ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment