[FFmpeg-devel] [PATCH] parse_options(): Avoid passing NULL as a string arg to fprintf

Jeff Downs heydowns at somuchpressure.net
Thu Jun 23 20:57:45 CEST 2011


I recently restored FATE testing on SPARC/Solaris.  One test is presently 
failing, where ffmpeg crashes when given the argument -pix_fmts.

The crash occurs due to arg being NULL in the fprintf mentioned in the 
patch below.  The patch fixes the specific symptom, and seems to be a 
good idea anyway as in the general case it appears that arg can be NULL.  

However this doesn't fix the underlying problem that when processing 
-pix_fmts (and others like it), the error case is being executed to begin 
with.

This is because several of the arg processing functions, the one for 
-pix_fmts included, are accessed via function pointer int (*fp)(const char 
*, const char *) but, in reality, are functions declared & implemented as 
void f(void).
On sparc, executing these with the expectation of returning int does not 
yield a 0 return (as it apparently does on other platforms).

I was going to send patches to fix this, too, but that would require 
changing all the arg processing functions to match the pointer signature 
and thought that it best to put the problem out there and collect any 
comments/input before working on such a large change.

Note that most of the problematic functions would have to be changed to 
both take args (where they don't presently, and hence the args would be 
dummy) and to return a value (fixed 0) to fix this to be "proper". Input 
welcome.

	-Jeff


---
 cmdutils.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/cmdutils.c b/cmdutils.c
index cd6d133..f538d98 100644
--- a/cmdutils.c
+++ b/cmdutils.c
@@ -281,7 +281,7 @@ unknown_opt:
                 *po->u.float_arg = parse_number_or_die(opt, arg, OPT_FLOAT, -INFINITY, INFINITY);
             } else if (po->u.func_arg) {
                 if (po->u.func_arg(opt, arg) < 0) {
-                    fprintf(stderr, "%s: failed to set value '%s' for option '%s'\n", argv[0], arg, opt);
+                    fprintf(stderr, "%s: failed to set value '%s' for option '%s'\n", argv[0], arg ? arg : "[null]", opt);
                     exit(1);
                 }
             }
-- 
1.7.3.4



More information about the ffmpeg-devel mailing list