mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-30 23:53:32 +01:00
Add __attribute__(format)s for our varargs printf/scanf wrappers
It turns out that if you set the third argument of __attribute__(format) to 0, GCC and Clang will check the format argument without expecting to find variadic arguments. This is the correct behavior for vsnprintf, vasprintf, and vscanf. I'm hoping this will fix bug 5969 (a clang warning) by telling clang that the format argument to tor_vasprintf is indeed a format string.
This commit is contained in:
parent
75fc4dbbca
commit
e284894672
7
changes/bug5969_022
Normal file
7
changes/bug5969_022
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
o Minor bugfixes
|
||||||
|
- Fix a build warning with Clang 3.1 related to our use of vasprint.
|
||||||
|
Fix for bug 5969. Bugfix on 0.2.2.11-alpha.
|
||||||
|
|
||||||
|
o Compilation improvements:
|
||||||
|
- Tell GCC and Clang to check for any errors in format strings passed
|
||||||
|
to the tor_v*(print|scan)f functions.
|
@ -261,11 +261,12 @@ void tor_munmap_file(tor_mmap_t *handle) ATTR_NONNULL((1));
|
|||||||
int tor_snprintf(char *str, size_t size, const char *format, ...)
|
int tor_snprintf(char *str, size_t size, const char *format, ...)
|
||||||
CHECK_PRINTF(3,4) ATTR_NONNULL((1,3));
|
CHECK_PRINTF(3,4) ATTR_NONNULL((1,3));
|
||||||
int tor_vsnprintf(char *str, size_t size, const char *format, va_list args)
|
int tor_vsnprintf(char *str, size_t size, const char *format, va_list args)
|
||||||
ATTR_NONNULL((1,3));
|
CHECK_PRINTF(3,0) ATTR_NONNULL((1,3));
|
||||||
|
|
||||||
int tor_asprintf(char **strp, const char *fmt, ...)
|
int tor_asprintf(char **strp, const char *fmt, ...)
|
||||||
CHECK_PRINTF(2,3);
|
CHECK_PRINTF(2,3);
|
||||||
int tor_vasprintf(char **strp, const char *fmt, va_list args);
|
int tor_vasprintf(char **strp, const char *fmt, va_list args)
|
||||||
|
CHECK_PRINTF(2,0);
|
||||||
|
|
||||||
const void *tor_memmem(const void *haystack, size_t hlen, const void *needle,
|
const void *tor_memmem(const void *haystack, size_t hlen, const void *needle,
|
||||||
size_t nlen) ATTR_PURE ATTR_NONNULL((1,3));
|
size_t nlen) ATTR_PURE ATTR_NONNULL((1,3));
|
||||||
|
@ -211,7 +211,11 @@ const char *escaped(const char *string);
|
|||||||
struct smartlist_t;
|
struct smartlist_t;
|
||||||
void wrap_string(struct smartlist_t *out, const char *string, size_t width,
|
void wrap_string(struct smartlist_t *out, const char *string, size_t width,
|
||||||
const char *prefix0, const char *prefixRest);
|
const char *prefix0, const char *prefixRest);
|
||||||
int tor_vsscanf(const char *buf, const char *pattern, va_list ap);
|
int tor_vsscanf(const char *buf, const char *pattern, va_list ap)
|
||||||
|
#ifdef __GNUC__
|
||||||
|
__attribute__((format(scanf, 2, 0)))
|
||||||
|
#endif
|
||||||
|
;
|
||||||
int tor_sscanf(const char *buf, const char *pattern, ...)
|
int tor_sscanf(const char *buf, const char *pattern, ...)
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
__attribute__((format(scanf, 2, 3)))
|
__attribute__((format(scanf, 2, 3)))
|
||||||
|
Loading…
Reference in New Issue
Block a user