From: Anton Khirnov <[email protected]>
Signed-off-by: Luca Barbato <[email protected]>
---
One more uninit is missing but not introduced in this patch.
configure | 1 -
libavfilter/af_compand.c | 42 +++++++++++++++++++++++++++++++++---------
2 files changed, 33 insertions(+), 10 deletions(-)
diff --git a/configure b/configure
index a7c0043..2f2a0f7 100755
--- a/configure
+++ b/configure
@@ -2016,7 +2016,6 @@ unix_protocol_select="network"
# filters
blackframe_filter_deps="gpl"
boxblur_filter_deps="gpl"
-compand_filter_deps="strtok_r"
cropdetect_filter_deps="gpl"
delogo_filter_deps="gpl"
drawtext_filter_deps="libfreetype"
diff --git a/libavfilter/af_compand.c b/libavfilter/af_compand.c
index 1906594..15202f3 100644
--- a/libavfilter/af_compand.c
+++ b/libavfilter/af_compand.c
@@ -29,6 +29,7 @@
#include <string.h>
+#include "libavutil/avstring.h"
#include "libavutil/channel_layout.h"
#include "libavutil/common.h"
#include "libavutil/mathematics.h"
@@ -330,7 +331,7 @@ static int config_output(AVFilterLink *outlink)
CompandContext *s = ctx->priv;
const int sample_rate = outlink->sample_rate;
double radius = s->curve_dB * M_LN10 / 20.0;
- char *p, *saveptr = NULL;
+ const char *p;
const int channels =
av_get_channel_layout_nb_channels(outlink->channel_layout);
int nb_attacks, nb_decays, nb_points;
@@ -368,25 +369,38 @@ static int config_output(AVFilterLink *outlink)
p = s->attacks;
for (i = 0, new_nb_items = 0; i < nb_attacks; i++) {
- char *tstr = strtok_r(p, "|", &saveptr);
- p = NULL;
+ char *tstr = av_get_token(&p, "|");
+ if (!tstr) {
+ uninit(ctx);
+ return AVERROR(ENOMEM);
+ }
+
new_nb_items += sscanf(tstr, "%f", &s->channels[i].attack) == 1;
+ av_freep(&tstr);
if (s->channels[i].attack < 0) {
uninit(ctx);
return AVERROR(EINVAL);
}
+ if (*p)
+ p++;
}
nb_attacks = new_nb_items;
p = s->decays;
for (i = 0, new_nb_items = 0; i < nb_decays; i++) {
- char *tstr = strtok_r(p, "|", &saveptr);
- p = NULL;
+ char *tstr = av_get_token(&p, "|");
+ if (!tstr) {
+ uninit(ctx);
+ return AVERROR(ENOMEM);
+ }
new_nb_items += sscanf(tstr, "%f", &s->channels[i].decay) == 1;
+ av_freep(&tstr);
if (s->channels[i].decay < 0) {
uninit(ctx);
return AVERROR(EINVAL);
}
+ if (*p)
+ p++;
}
nb_decays = new_nb_items;
@@ -401,9 +415,15 @@ static int config_output(AVFilterLink *outlink)
#define S(x) s->segments[2 * ((x) + 1)]
p = s->points;
for (i = 0, new_nb_items = 0; i < nb_points; i++) {
- char *tstr = strtok_r(p, "|", &saveptr);
- p = NULL;
- if (sscanf(tstr, "%f/%f", &S(i).x, &S(i).y) != 2) {
+ char *tstr = av_get_token(&p, "|");
+ if (!tstr) {
+ uninit(ctx);
+ return AVERROR(ENOMEM);
+ }
+
+ err = sscanf(tstr, "%f/%f", &S(i).x, &S(i).y);
+ av_freep(&tstr);
+ if (err != 2) {
av_log(ctx, AV_LOG_ERROR,
"Invalid and/or missing input/output value.\n");
uninit(ctx);
@@ -418,6 +438,8 @@ static int config_output(AVFilterLink *outlink)
S(i).y -= S(i).x;
av_log(ctx, AV_LOG_DEBUG, "%d: x=%f y=%f\n", i, S(i).x, S(i).y);
new_nb_items++;
+ if (*p)
+ p++;
}
num = new_nb_items;
--
1.8.5.1
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel