X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=oggdec.c;h=e22ea1e464fa083c108c1474c37c802fa6b64659;hp=6b96c505c6cef18dd4b9ebf4e899f105c65f3e6f;hb=5c575441c5ac69d3107d8032c1c1d2d7f5c72ee1;hpb=cb4dd13c2327c13d486b6abe572f4af2398b65de diff --git a/oggdec.c b/oggdec.c index 6b96c505..e22ea1e4 100644 --- a/oggdec.c +++ b/oggdec.c @@ -165,10 +165,24 @@ static ssize_t ogg_convert(char *inbuffer, size_t len, struct filter_node *fn) static void *oggdec_parse_config(int argc, char **argv) { - struct oggdec_filter_args_info *ret = para_calloc(sizeof(struct oggdec_filter_args_info)); - if (!oggdec_cmdline_parser(argc, argv, ret)) - return ret; - free(ret); + int ret; + struct oggdec_filter_args_info *ogg_conf; + + ogg_conf = para_calloc(sizeof(*ogg_conf)); + ret = oggdec_cmdline_parser(argc, argv, ogg_conf); + if (ret) + goto err; + if (ogg_conf->bufsize_arg < 0) + goto err; + if (ogg_conf->bufsize_arg >= INT_MAX / 1024) + goto err; + if (ogg_conf->initial_buffer_arg < 0) + goto err; + if (ogg_conf->initial_buffer_arg >= INT_MAX / 1024) + goto err; + return ogg_conf; +err: + free(ogg_conf); return NULL; }