Commit 9abbe8cc authored by Martin Storsjö's avatar Martin Storsjö
Browse files

Use av_printf_format to check the usage of printf style functions



This helps catching cases where the format string doesn't
match what is passed in, or injection bugs where user data
is passed in as format string.
Signed-off-by: default avatarMartin Storsjö <martin@martin.st>
parent 67e9ae14
...@@ -4143,7 +4143,7 @@ void av_log_missing_feature(void *avc, const char *feature, int want_sample); ...@@ -4143,7 +4143,7 @@ void av_log_missing_feature(void *avc, const char *feature, int want_sample);
* a pointer to an AVClass struct * a pointer to an AVClass struct
* @param[in] msg string containing an optional message, or NULL if no message * @param[in] msg string containing an optional message, or NULL if no message
*/ */
void av_log_ask_for_sample(void *avc, const char *msg, ...); void av_log_ask_for_sample(void *avc, const char *msg, ...) av_printf_format(2, 3);
/** /**
* Register the hardware accelerator hwaccel. * Register the hardware accelerator hwaccel.
......
...@@ -284,11 +284,7 @@ attribute_deprecated int64_t url_fsize(AVIOContext *s); ...@@ -284,11 +284,7 @@ attribute_deprecated int64_t url_fsize(AVIOContext *s);
#define URL_EOF (-1) #define URL_EOF (-1)
attribute_deprecated int url_fgetc(AVIOContext *s); attribute_deprecated int url_fgetc(AVIOContext *s);
attribute_deprecated int url_setbufsize(AVIOContext *s, int buf_size); attribute_deprecated int url_setbufsize(AVIOContext *s, int buf_size);
#ifdef __GNUC__ attribute_deprecated int url_fprintf(AVIOContext *s, const char *fmt, ...) av_printf_format(2, 3);
attribute_deprecated int url_fprintf(AVIOContext *s, const char *fmt, ...) __attribute__ ((__format__ (__printf__, 2, 3)));
#else
attribute_deprecated int url_fprintf(AVIOContext *s, const char *fmt, ...);
#endif
attribute_deprecated void put_flush_packet(AVIOContext *s); attribute_deprecated void put_flush_packet(AVIOContext *s);
attribute_deprecated int url_open_dyn_buf(AVIOContext **s); attribute_deprecated int url_open_dyn_buf(AVIOContext **s);
attribute_deprecated int url_open_dyn_packet_buf(AVIOContext **s, int max_packet_size); attribute_deprecated int url_open_dyn_packet_buf(AVIOContext **s, int max_packet_size);
...@@ -463,11 +459,7 @@ static av_always_inline int64_t avio_tell(AVIOContext *s) ...@@ -463,11 +459,7 @@ static av_always_inline int64_t avio_tell(AVIOContext *s)
int64_t avio_size(AVIOContext *s); int64_t avio_size(AVIOContext *s);
/** @warning currently size is limited */ /** @warning currently size is limited */
#ifdef __GNUC__ int avio_printf(AVIOContext *s, const char *fmt, ...) av_printf_format(2, 3);
int avio_printf(AVIOContext *s, const char *fmt, ...) __attribute__ ((__format__ (__printf__, 2, 3)));
#else
int avio_printf(AVIOContext *s, const char *fmt, ...);
#endif
void avio_flush(AVIOContext *s); void avio_flush(AVIOContext *s);
......
...@@ -108,7 +108,7 @@ uint64_t ff_ntp_time(void); ...@@ -108,7 +108,7 @@ uint64_t ff_ntp_time(void);
*/ */
int ff_url_join(char *str, int size, const char *proto, int ff_url_join(char *str, int size, const char *proto,
const char *authorization, const char *hostname, const char *authorization, const char *hostname,
int port, const char *fmt, ...); int port, const char *fmt, ...) av_printf_format(7, 8);
/** /**
* Append the media-specific SDP fragment for the media stream c * Append the media-specific SDP fragment for the media stream c
......
...@@ -86,7 +86,7 @@ int rtp_set_remote_url(URLContext *h, const char *uri) ...@@ -86,7 +86,7 @@ int rtp_set_remote_url(URLContext *h, const char *uri)
* "http://host:port/path?option1=val1&option2=val2... * "http://host:port/path?option1=val1&option2=val2...
*/ */
static void url_add_option(char *buf, int buf_size, const char *fmt, ...) static av_printf_format(3, 4) void url_add_option(char *buf, int buf_size, const char *fmt, ...)
{ {
char buf1[1024]; char buf1[1024];
va_list ap; va_list ap;
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#define AVUTIL_AVSTRING_H #define AVUTIL_AVSTRING_H
#include <stddef.h> #include <stddef.h>
#include "attributes.h"
/** /**
* Return non-zero if pfx is a prefix of str. If it is, *ptr is set to * Return non-zero if pfx is a prefix of str. If it is, *ptr is set to
...@@ -107,7 +108,7 @@ size_t av_strlcat(char *dst, const char *src, size_t size); ...@@ -107,7 +108,7 @@ size_t av_strlcat(char *dst, const char *src, size_t size);
* @return the length of the string that would have been generated * @return the length of the string that would have been generated
* if enough space had been available * if enough space had been available
*/ */
size_t av_strlcatf(char *dst, size_t size, const char *fmt, ...); size_t av_strlcatf(char *dst, size_t size, const char *fmt, ...) av_printf_format(3, 4);
/** /**
* Convert a number to a av_malloced string. * Convert a number to a av_malloced string.
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#include <stdarg.h> #include <stdarg.h>
#include "avutil.h" #include "avutil.h"
#include "attributes.h"
/** /**
* Describe the class of an AVClass context structure. That is an * Describe the class of an AVClass context structure. That is an
...@@ -129,11 +130,7 @@ typedef struct { ...@@ -129,11 +130,7 @@ typedef struct {
* subsequent arguments are converted to output. * subsequent arguments are converted to output.
* @see av_vlog * @see av_vlog
*/ */
#ifdef __GNUC__ void av_log(void *avcl, int level, const char *fmt, ...) av_printf_format(3, 4);
void av_log(void *avcl, int level, const char *fmt, ...) __attribute__ ((__format__ (__printf__, 3, 4)));
#else
void av_log(void *avcl, int level, const char *fmt, ...);
#endif
void av_vlog(void *avcl, int level, const char *fmt, va_list); void av_vlog(void *avcl, int level, const char *fmt, va_list);
int av_log_get_level(void); int av_log_get_level(void);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment