[FFmpeg-devel] [PATCH 1/2] libavfilter/formats: Fix parsing of channel specifications with a trailing 'c'.

Simon Thelen ffmpeg-dev at c-14.de
Tue Jun 9 04:55:56 CEST 2015


Fix an off-by-one in checking tail for trailing characters and ensure
that the parsing helper is only called for unknown channel layouts.

Note: This removes the check ensuring that the channel layout is > 0 and
< 63.

Signed-off-by: Simon Thelen <ffmpeg-dev at c-14.de>
---
If the check ensuring 0 < chlayout < 63 is necessary, I can send a v2
adding it back

 libavfilter/formats.c | 19 ++++++++-----------
 1 file changed, 8 insertions(+), 11 deletions(-)

diff --git a/libavfilter/formats.c b/libavfilter/formats.c
index 4f9773b..2e00f30 100644
--- a/libavfilter/formats.c
+++ b/libavfilter/formats.c
@@ -637,20 +637,17 @@ int ff_parse_channel_layout(int64_t *ret, int *nret, const char *arg,
                             void *log_ctx)
 {
     char *tail;
-    int64_t chlayout, count;
-
-    if (nret) {
-        count = strtol(arg, &tail, 10);
-        if (*tail == 'c' && !tail[1] && count > 0 && count < 63) {
-            *nret = count;
-            *ret = 0;
-            return 0;
-        }
-    }
+    int64_t chlayout;
+
     chlayout = av_get_channel_layout(arg);
     if (chlayout == 0) {
         chlayout = strtol(arg, &tail, 10);
-        if (*tail || chlayout == 0) {
+        if (*(tail + 1) || chlayout == 0) {
+            if (nret && *tail == 'c') {
+                *nret = chlayout;
+                *ret = 0;
+                return 0;
+            }
             av_log(log_ctx, AV_LOG_ERROR, "Invalid channel layout '%s'\n", arg);
             return AVERROR(EINVAL);
         }
-- 
2.4.2



More information about the ffmpeg-devel mailing list