| From ef170dda7fbab53682c9bc287dec93fa86130bc9 Mon Sep 17 00:00:00 2001 |
| From: Khem Raj <raj.khem@gmail.com> |
| Date: Sun, 9 Sep 2018 21:49:59 -0700 |
| Subject: [PATCH] add a formatting attribute check |
| |
| Tell Clang that parameter is a printf style format using the |
| attribute flag |
| |
| This helps in avoiding below warnings seen with clang |
| |
| unarr.c:106:22: error: format string is not a string literal |
| [-Werror,-Wformat-nonliteral] |
| | vfprintf(stderr, msg, args); |
| | ^~~ |
| |
| Upstream-Status: Pending |
| Signed-off-by: Khem Raj <raj.khem@gmail.com> |
| --- |
| cut-n-paste/unarr/common/unarr.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/cut-n-paste/synctex/synctex_parser_utils.c |
| +++ b/cut-n-paste/synctex/synctex_parser_utils.c |
| @@ -87,11 +87,11 @@ void _synctex_free(void * ptr) { |
| # include <syslog.h> |
| #endif |
| |
| -int _synctex_error(const char * reason, ...) __attribute__((__format__ (__printf__, 1, 2))); |
| -int _synctex_log(int level, const char * prompt, const char * reason, va_list arg) __attribute__((__format__ (__printf__, 3, 0))); |
| - |
| -int _synctex_log(int level, const char * prompt, const char * reason,va_list arg) { |
| +static int _synctex_log(int level, const char * prompt, const char * reason, ...) SYNCTEX_PRINTF_FORMAT(3, 0); |
| +static int _synctex_log(int level, const char * prompt, const char * reason, ...) { |
| + va_list arg; |
| int result; |
| + va_start(arg, reason); |
| # ifdef SYNCTEX_RECENT_WINDOWS |
| {/* This code is contributed by William Blum. |
| As it does not work on some older computers, |
| @@ -133,10 +133,10 @@ int _synctex_log(int level, const char * |
| result += vfprintf(where, reason, arg); |
| result += fprintf(where,"\n"); |
| # endif |
| + va_end(arg); |
| return result; |
| } |
| |
| -__attribute__((__format__ (__printf__, 1, 0))) |
| int _synctex_error(const char * reason,...) { |
| va_list arg; |
| int result; |
| @@ -355,6 +355,7 @@ char * _synctex_merge_strings(const char |
| size_t len = strlen(temp); |
| if(UINT_MAX-len<size) { |
| _synctex_error("! _synctex_merge_strings: Capacity exceeded."); |
| + va_end(arg); |
| return NULL; |
| } |
| size+=len; |
| @@ -374,6 +375,7 @@ char * _synctex_merge_strings(const char |
| if(dest != strncpy(dest,temp,size)) { |
| _synctex_error("! _synctex_merge_strings: Copy problem"); |
| free(result); |
| + va_end(arg); |
| result = NULL; |
| return NULL; |
| } |
| --- a/cut-n-paste/synctex/synctex_parser_utils.h |
| +++ b/cut-n-paste/synctex/synctex_parser_utils.h |
| @@ -85,7 +85,11 @@ extern "C" { |
| # else |
| # define SYNCTEX_ARE_PATH_CHARACTERS_EQUAL(left,right) (toupper(left) != toupper(right)) |
| # endif |
| - |
| +# ifdef __GNUC__ |
| +# define SYNCTEX_PRINTF_FORMAT(si, ftc) __attribute__ ((format (printf, si, ftc))) |
| +# else |
| +# define SYNCTEX_PRINTF_FORMAT(si, ftc) |
| +# endif |
| /* This custom malloc functions initializes to 0 the newly allocated memory. |
| * There is no bzero function on windows. */ |
| void *_synctex_malloc(size_t size); |
| @@ -97,8 +101,8 @@ void _synctex_free(void * ptr); |
| /* This is used to log some informational message to the standard error stream. |
| * On Windows, the stderr stream is not exposed and another method is used. |
| * The return value is the number of characters printed. */ |
| - int _synctex_error(const char * reason,...); |
| - int _synctex_debug(const char * reason,...); |
| + int _synctex_error(const char * reason,...) SYNCTEX_PRINTF_FORMAT(1, 2); |
| + int _synctex_debug(const char * reason,...) SYNCTEX_PRINTF_FORMAT(1, 2); |
| |
| /* strip the last extension of the given string, this string is modified! |
| * This function depends on the OS because the path separator may differ. |