Message ID | 68592f88-f5ca-4626-a1dc-e40d6f6cedf8@uplex.de |
---|---|
State | New |
Headers | show |
Series | [FFmpeg-devel] avformat/file: fail for non-numerical arguments to pipe: | expand |
Context | Check | Description |
---|---|---|
yinshiyou/configure_loongarch64 | warning | Failed to apply patch |
On Mon, 29 Apr 2024, Nils Goroll wrote: > Before this patch, the implementation of pipe: inputs/outputs would > silently fall back to stdin/stdout for any argument not successfully > parsed by strtol(). > > This patch introduces an explicit error for any non-numerical arguments, > which should avoid user confusion as in #10977. > > New behavior: > > $ cat /tmp/video.mkv | ./ffmpeg -i pipe:aa -acodec copy -vcodec copy -f > matroska pipe:1 | cat >/tmp/out.mkv > > [pipe @ 0x5618c7bcf740] Non-numerical argument "aa" to pipe: > [in#0 @ 0x5618c7bced00] Error opening input: Invalid argument > Error opening input file pipe:aa. > Error opening input files: Invalid argument OK in principle, but the patch is a bit overcomplicated and is mixing cosmetic and functional changes. See a simplifed version attached, will apply that in a few days. Thanks, Marton > > Signed-off-by: Nils Goroll <nils.goroll@uplex.de> > --- > libavformat/file.c | 19 +++++++++++-------- > 1 file changed, 11 insertions(+), 8 deletions(-) > > diff --git a/libavformat/file.c b/libavformat/file.c > index 0b7452bc20..317a769e32 100644 > --- a/libavformat/file.c > +++ b/libavformat/file.c > @@ -437,18 +437,21 @@ static int pipe_open(URLContext *h, const char > *filename, int flags) > { > FileContext *c = h->priv_data; > int fd; > - char *final; > + char *final = NULL; > if (c->fd < 0) { > av_strstart(filename, "pipe:", &filename); > - fd = strtol(filename, &final, 10); > - if((filename == final) || *final ) {/* No digits found, or something > like 10ab */ > - if (flags & AVIO_FLAG_WRITE) { > - fd = 1; > - } else { > - fd = 0; > - } > + if (*filename == '\0') > + fd = (flags & AVIO_FLAG_WRITE) ? 1 : 0; > + else > + fd = strtol(filename, &final, 10); > + > + if (final != NULL && *final != '\0') { > + av_log(h, AV_LOG_ERROR, > + "Non-numerical argument \"%s\" to pipe:\n", > + filename); > + return AVERROR(EINVAL); > } > c->fd = fd; > } > -- > 2.39.2 > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". > >
diff --git a/libavformat/file.c b/libavformat/file.c index 0b7452bc20..317a769e32 100644 --- a/libavformat/file.c +++ b/libavformat/file.c @@ -437,18 +437,21 @@ static int pipe_open(URLContext *h, const char *filename, int flags) { FileContext *c = h->priv_data; int fd; - char *final; + char *final = NULL; if (c->fd < 0) { av_strstart(filename, "pipe:", &filename); - fd = strtol(filename, &final, 10); - if((filename == final) || *final ) {/* No digits found, or something like 10ab */ - if (flags & AVIO_FLAG_WRITE) { - fd = 1; - } else { - fd = 0; - } + if (*filename == '\0') + fd = (flags & AVIO_FLAG_WRITE) ? 1 : 0; + else + fd = strtol(filename, &final, 10); + + if (final != NULL && *final != '\0') { + av_log(h, AV_LOG_ERROR, + "Non-numerical argument \"%s\" to pipe:\n", + filename); + return AVERROR(EINVAL); } c->fd = fd; }
Before this patch, the implementation of pipe: inputs/outputs would silently fall back to stdin/stdout for any argument not successfully parsed by strtol(). This patch introduces an explicit error for any non-numerical arguments, which should avoid user confusion as in #10977. New behavior: $ cat /tmp/video.mkv | ./ffmpeg -i pipe:aa -acodec copy -vcodec copy -f matroska pipe:1 | cat >/tmp/out.mkv [pipe @ 0x5618c7bcf740] Non-numerical argument "aa" to pipe: [in#0 @ 0x5618c7bced00] Error opening input: Invalid argument Error opening input file pipe:aa. Error opening input files: Invalid argument Signed-off-by: Nils Goroll <nils.goroll@uplex.de> --- libavformat/file.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-)