Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
* [FFmpeg-devel] [PATCH v3] avformat/hls: Return error code when read key file failed
@ 2025-04-29  9:29 Zhao Zhili
  2025-04-29  9:33 ` Steven Liu
  2025-04-29 12:15 ` Andreas Rheinhardt
  0 siblings, 2 replies; 5+ messages in thread
From: Zhao Zhili @ 2025-04-29  9:29 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Zhao Zhili

From: Zhao Zhili <zhilizhao@tencent.com>

---
 libavformat/hls.c | 47 ++++++++++++++++++++++++++++++++++-------------
 1 file changed, 34 insertions(+), 13 deletions(-)

diff --git a/libavformat/hls.c b/libavformat/hls.c
index 6623c80309..fe908a563b 100644
--- a/libavformat/hls.c
+++ b/libavformat/hls.c
@@ -1331,6 +1331,37 @@ static void intercept_id3(struct playlist *pls, uint8_t *buf,
         pls->is_id3_timestamped = (pls->id3_mpegts_timestamp != AV_NOPTS_VALUE);
 }
 
+static int read_key(HLSContext *c, struct playlist *pls, struct segment *seg)
+{
+    AVIOContext *pb = NULL;
+
+    int ret = open_url(pls->parent, &pb, seg->key, &c->avio_opts, NULL, NULL);
+    if (ret < 0) {
+        av_log(pls->parent, AV_LOG_ERROR, "Unable to open key file %s, %s\n",
+               seg->key, av_err2str(ret));
+        return ret;
+    }
+
+    ret = avio_read(pb, pls->key, sizeof(pls->key));
+    ff_format_io_close(pls->parent, &pb);
+    if (ret != sizeof(pls->key)) {
+        if (ret < 0) {
+            av_log(pls->parent, AV_LOG_ERROR, "Unable to read key file %s, %s\n",
+                   seg->key, av_err2str(ret));
+        } else {
+            av_log(pls->parent, AV_LOG_ERROR, "Unable to read key file %s, read bytes %d != %zu\n",
+                   seg->key, ret, sizeof(pls->key));
+            ret = AVERROR(AVERROR_INVALIDDATA);
+        }
+
+        return ret;
+    }
+
+    av_strlcpy(pls->key_url, seg->key, sizeof(pls->key_url));
+
+    return 0;
+}
+
 static int open_input(HLSContext *c, struct playlist *pls, struct segment *seg, AVIOContext **in)
 {
     AVDictionary *opts = NULL;
@@ -1352,19 +1383,9 @@ static int open_input(HLSContext *c, struct playlist *pls, struct segment *seg,
 
     if (seg->key_type == KEY_AES_128 || seg->key_type == KEY_SAMPLE_AES) {
         if (strcmp(seg->key, pls->key_url)) {
-            AVIOContext *pb = NULL;
-            if (open_url(pls->parent, &pb, seg->key, &c->avio_opts, NULL, NULL) == 0) {
-                ret = avio_read(pb, pls->key, sizeof(pls->key));
-                if (ret != sizeof(pls->key)) {
-                    av_log(pls->parent, AV_LOG_ERROR, "Unable to read key file %s\n",
-                           seg->key);
-                }
-                ff_format_io_close(pls->parent, &pb);
-            } else {
-                av_log(pls->parent, AV_LOG_ERROR, "Unable to open key file %s\n",
-                       seg->key);
-            }
-            av_strlcpy(pls->key_url, seg->key, sizeof(pls->key_url));
+            ret = read_key(c, pls, seg);
+            if (ret < 0)
+                goto cleanup;
         }
     }
 
-- 
2.46.0

_______________________________________________
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".

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [FFmpeg-devel] [PATCH v3] avformat/hls: Return error code when read key file failed
  2025-04-29  9:29 [FFmpeg-devel] [PATCH v3] avformat/hls: Return error code when read key file failed Zhao Zhili
@ 2025-04-29  9:33 ` Steven Liu
  2025-04-29 12:15 ` Andreas Rheinhardt
  1 sibling, 0 replies; 5+ messages in thread
From: Steven Liu @ 2025-04-29  9:33 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Zhao Zhili

Zhao Zhili <quinkblack-at-foxmail.com@ffmpeg.org>于2025年4月29日 周二17:30写道:

> From: Zhao Zhili <zhilizhao@tencent.com>
>
> ---
>  libavformat/hls.c | 47 ++++++++++++++++++++++++++++++++++-------------
>  1 file changed, 34 insertions(+), 13 deletions(-)
>
> diff --git a/libavformat/hls.c b/libavformat/hls.c
> index 6623c80309..fe908a563b 100644
> --- a/libavformat/hls.c
> +++ b/libavformat/hls.c
> @@ -1331,6 +1331,37 @@ static void intercept_id3(struct playlist *pls,
> uint8_t *buf,
>          pls->is_id3_timestamped = (pls->id3_mpegts_timestamp !=
> AV_NOPTS_VALUE);
>  }
>
> +static int read_key(HLSContext *c, struct playlist *pls, struct segment
> *seg)
> +{
> +    AVIOContext *pb = NULL;
> +
> +    int ret = open_url(pls->parent, &pb, seg->key, &c->avio_opts, NULL,
> NULL);
> +    if (ret < 0) {
> +        av_log(pls->parent, AV_LOG_ERROR, "Unable to open key file %s,
> %s\n",
> +               seg->key, av_err2str(ret));
> +        return ret;
> +    }
> +
> +    ret = avio_read(pb, pls->key, sizeof(pls->key));
> +    ff_format_io_close(pls->parent, &pb);
> +    if (ret != sizeof(pls->key)) {
> +        if (ret < 0) {
> +            av_log(pls->parent, AV_LOG_ERROR, "Unable to read key file
> %s, %s\n",
> +                   seg->key, av_err2str(ret));
> +        } else {
> +            av_log(pls->parent, AV_LOG_ERROR, "Unable to read key file
> %s, read bytes %d != %zu\n",
> +                   seg->key, ret, sizeof(pls->key));
> +            ret = AVERROR(AVERROR_INVALIDDATA);
> +        }
> +
> +        return ret;
> +    }
> +
> +    av_strlcpy(pls->key_url, seg->key, sizeof(pls->key_url));
> +
> +    return 0;
> +}
> +
>  static int open_input(HLSContext *c, struct playlist *pls, struct segment
> *seg, AVIOContext **in)
>  {
>      AVDictionary *opts = NULL;
> @@ -1352,19 +1383,9 @@ static int open_input(HLSContext *c, struct
> playlist *pls, struct segment *seg,
>
>      if (seg->key_type == KEY_AES_128 || seg->key_type == KEY_SAMPLE_AES) {
>          if (strcmp(seg->key, pls->key_url)) {
> -            AVIOContext *pb = NULL;
> -            if (open_url(pls->parent, &pb, seg->key, &c->avio_opts, NULL,
> NULL) == 0) {
> -                ret = avio_read(pb, pls->key, sizeof(pls->key));
> -                if (ret != sizeof(pls->key)) {
> -                    av_log(pls->parent, AV_LOG_ERROR, "Unable to read key
> file %s\n",
> -                           seg->key);
> -                }
> -                ff_format_io_close(pls->parent, &pb);
> -            } else {
> -                av_log(pls->parent, AV_LOG_ERROR, "Unable to open key
> file %s\n",
> -                       seg->key);
> -            }
> -            av_strlcpy(pls->key_url, seg->key, sizeof(pls->key_url));
> +            ret = read_key(c, pls, seg);
> +            if (ret < 0)
> +                goto cleanup;
>          }
>      }
>
> --
> 2.46.0
>
> _______________________________________________
> 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".



LGTM

Thanks

>
>
_______________________________________________
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".

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [FFmpeg-devel] [PATCH v3] avformat/hls: Return error code when read key file failed
  2025-04-29  9:29 [FFmpeg-devel] [PATCH v3] avformat/hls: Return error code when read key file failed Zhao Zhili
  2025-04-29  9:33 ` Steven Liu
@ 2025-04-29 12:15 ` Andreas Rheinhardt
  2025-04-29 12:28   ` Zhao Zhili
  1 sibling, 1 reply; 5+ messages in thread
From: Andreas Rheinhardt @ 2025-04-29 12:15 UTC (permalink / raw)
  To: ffmpeg-devel

Zhao Zhili:
> From: Zhao Zhili <zhilizhao@tencent.com>
> 
> ---
>  libavformat/hls.c | 47 ++++++++++++++++++++++++++++++++++-------------
>  1 file changed, 34 insertions(+), 13 deletions(-)
> 
> diff --git a/libavformat/hls.c b/libavformat/hls.c
> index 6623c80309..fe908a563b 100644
> --- a/libavformat/hls.c
> +++ b/libavformat/hls.c
> @@ -1331,6 +1331,37 @@ static void intercept_id3(struct playlist *pls, uint8_t *buf,
>          pls->is_id3_timestamped = (pls->id3_mpegts_timestamp != AV_NOPTS_VALUE);
>  }
>  
> +static int read_key(HLSContext *c, struct playlist *pls, struct segment *seg)
> +{
> +    AVIOContext *pb = NULL;
> +
> +    int ret = open_url(pls->parent, &pb, seg->key, &c->avio_opts, NULL, NULL);
> +    if (ret < 0) {
> +        av_log(pls->parent, AV_LOG_ERROR, "Unable to open key file %s, %s\n",
> +               seg->key, av_err2str(ret));
> +        return ret;
> +    }
> +
> +    ret = avio_read(pb, pls->key, sizeof(pls->key));
> +    ff_format_io_close(pls->parent, &pb);
> +    if (ret != sizeof(pls->key)) {
> +        if (ret < 0) {
> +            av_log(pls->parent, AV_LOG_ERROR, "Unable to read key file %s, %s\n",
> +                   seg->key, av_err2str(ret));
> +        } else {
> +            av_log(pls->parent, AV_LOG_ERROR, "Unable to read key file %s, read bytes %d != %zu\n",

SIZE_SPECIFIER

Apart from that: Do we really need to two different log messages?

> +                   seg->key, ret, sizeof(pls->key));
> +            ret = AVERROR(AVERROR_INVALIDDATA);

AVERROR() is wrong.

> +        }
> +
> +        return ret;
> +    }
> +
> +    av_strlcpy(pls->key_url, seg->key, sizeof(pls->key_url));
> +
> +    return 0;
> +}
> +
>  static int open_input(HLSContext *c, struct playlist *pls, struct segment *seg, AVIOContext **in)
>  {
>      AVDictionary *opts = NULL;
> @@ -1352,19 +1383,9 @@ static int open_input(HLSContext *c, struct playlist *pls, struct segment *seg,
>  
>      if (seg->key_type == KEY_AES_128 || seg->key_type == KEY_SAMPLE_AES) {
>          if (strcmp(seg->key, pls->key_url)) {
> -            AVIOContext *pb = NULL;
> -            if (open_url(pls->parent, &pb, seg->key, &c->avio_opts, NULL, NULL) == 0) {
> -                ret = avio_read(pb, pls->key, sizeof(pls->key));
> -                if (ret != sizeof(pls->key)) {
> -                    av_log(pls->parent, AV_LOG_ERROR, "Unable to read key file %s\n",
> -                           seg->key);
> -                }
> -                ff_format_io_close(pls->parent, &pb);
> -            } else {
> -                av_log(pls->parent, AV_LOG_ERROR, "Unable to open key file %s\n",
> -                       seg->key);
> -            }
> -            av_strlcpy(pls->key_url, seg->key, sizeof(pls->key_url));
> +            ret = read_key(c, pls, seg);
> +            if (ret < 0)
> +                goto cleanup;
>          }
>      }
>  

_______________________________________________
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".

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [FFmpeg-devel] [PATCH v3] avformat/hls: Return error code when read key file failed
  2025-04-29 12:15 ` Andreas Rheinhardt
@ 2025-04-29 12:28   ` Zhao Zhili
  2025-04-30  2:29     ` [FFmpeg-devel] [PATCH v4] " Zhao Zhili
  0 siblings, 1 reply; 5+ messages in thread
From: Zhao Zhili @ 2025-04-29 12:28 UTC (permalink / raw)
  To: FFmpeg development discussions and patches



> On Apr 29, 2025, at 20:15, Andreas Rheinhardt <andreas.rheinhardt@outlook.com> wrote:
> 
> Zhao Zhili:
>> From: Zhao Zhili <zhilizhao@tencent.com>
>> 
>> ---
>> libavformat/hls.c | 47 ++++++++++++++++++++++++++++++++++-------------
>> 1 file changed, 34 insertions(+), 13 deletions(-)
>> 
>> diff --git a/libavformat/hls.c b/libavformat/hls.c
>> index 6623c80309..fe908a563b 100644
>> --- a/libavformat/hls.c
>> +++ b/libavformat/hls.c
>> @@ -1331,6 +1331,37 @@ static void intercept_id3(struct playlist *pls, uint8_t *buf,
>>         pls->is_id3_timestamped = (pls->id3_mpegts_timestamp != AV_NOPTS_VALUE);
>> }
>> 
>> +static int read_key(HLSContext *c, struct playlist *pls, struct segment *seg)
>> +{
>> +    AVIOContext *pb = NULL;
>> +
>> +    int ret = open_url(pls->parent, &pb, seg->key, &c->avio_opts, NULL, NULL);
>> +    if (ret < 0) {
>> +        av_log(pls->parent, AV_LOG_ERROR, "Unable to open key file %s, %s\n",
>> +               seg->key, av_err2str(ret));
>> +        return ret;
>> +    }
>> +
>> +    ret = avio_read(pb, pls->key, sizeof(pls->key));
>> +    ff_format_io_close(pls->parent, &pb);
>> +    if (ret != sizeof(pls->key)) {
>> +        if (ret < 0) {
>> +            av_log(pls->parent, AV_LOG_ERROR, "Unable to read key file %s, %s\n",
>> +                   seg->key, av_err2str(ret));
>> +        } else {
>> +            av_log(pls->parent, AV_LOG_ERROR, "Unable to read key file %s, read bytes %d != %zu\n",
> 
> SIZE_SPECIFIER

Please elaborate.

> 
> Apart from that: Do we really need to two different log messages?

IO error vs invalid data can be important for this case. Any suggestions?

> 
>> +                   seg->key, ret, sizeof(pls->key));
>> +            ret = AVERROR(AVERROR_INVALIDDATA);
> 
> AVERROR() is wrong.

OK.

> 
>> +        }
>> +
>> +        return ret;
>> +    }
>> +
>> +    av_strlcpy(pls->key_url, seg->key, sizeof(pls->key_url));
>> +
>> +    return 0;
>> +}
>> +
>> static int open_input(HLSContext *c, struct playlist *pls, struct segment *seg, AVIOContext **in)
>> {
>>     AVDictionary *opts = NULL;
>> @@ -1352,19 +1383,9 @@ static int open_input(HLSContext *c, struct playlist *pls, struct segment *seg,
>> 
>>     if (seg->key_type == KEY_AES_128 || seg->key_type == KEY_SAMPLE_AES) {
>>         if (strcmp(seg->key, pls->key_url)) {
>> -            AVIOContext *pb = NULL;
>> -            if (open_url(pls->parent, &pb, seg->key, &c->avio_opts, NULL, NULL) == 0) {
>> -                ret = avio_read(pb, pls->key, sizeof(pls->key));
>> -                if (ret != sizeof(pls->key)) {
>> -                    av_log(pls->parent, AV_LOG_ERROR, "Unable to read key file %s\n",
>> -                           seg->key);
>> -                }
>> -                ff_format_io_close(pls->parent, &pb);
>> -            } else {
>> -                av_log(pls->parent, AV_LOG_ERROR, "Unable to open key file %s\n",
>> -                       seg->key);
>> -            }
>> -            av_strlcpy(pls->key_url, seg->key, sizeof(pls->key_url));
>> +            ret = read_key(c, pls, seg);
>> +            if (ret < 0)
>> +                goto cleanup;
>>         }
>>     }
>> 
> 
> _______________________________________________
> 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".

_______________________________________________
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".

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [FFmpeg-devel] [PATCH v4] avformat/hls: Return error code when read key file failed
  2025-04-29 12:28   ` Zhao Zhili
@ 2025-04-30  2:29     ` Zhao Zhili
  0 siblings, 0 replies; 5+ messages in thread
From: Zhao Zhili @ 2025-04-30  2:29 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Zhao Zhili

From: Zhao Zhili <zhilizhao@tencent.com>

---
 libavformat/hls.c | 47 ++++++++++++++++++++++++++++++++++-------------
 1 file changed, 34 insertions(+), 13 deletions(-)

diff --git a/libavformat/hls.c b/libavformat/hls.c
index 6623c80309..5cddf4b5c0 100644
--- a/libavformat/hls.c
+++ b/libavformat/hls.c
@@ -1331,6 +1331,37 @@ static void intercept_id3(struct playlist *pls, uint8_t *buf,
         pls->is_id3_timestamped = (pls->id3_mpegts_timestamp != AV_NOPTS_VALUE);
 }
 
+static int read_key(HLSContext *c, struct playlist *pls, struct segment *seg)
+{
+    AVIOContext *pb = NULL;
+
+    int ret = open_url(pls->parent, &pb, seg->key, &c->avio_opts, NULL, NULL);
+    if (ret < 0) {
+        av_log(pls->parent, AV_LOG_ERROR, "Unable to open key file %s, %s\n",
+               seg->key, av_err2str(ret));
+        return ret;
+    }
+
+    ret = avio_read(pb, pls->key, sizeof(pls->key));
+    ff_format_io_close(pls->parent, &pb);
+    if (ret != sizeof(pls->key)) {
+        if (ret < 0) {
+            av_log(pls->parent, AV_LOG_ERROR, "Unable to read key file %s, %s\n",
+                   seg->key, av_err2str(ret));
+        } else {
+            av_log(pls->parent, AV_LOG_ERROR, "Unable to read key file %s, read bytes %d != %zu\n",
+                   seg->key, ret, sizeof(pls->key));
+            ret = AVERROR_INVALIDDATA;
+        }
+
+        return ret;
+    }
+
+    av_strlcpy(pls->key_url, seg->key, sizeof(pls->key_url));
+
+    return 0;
+}
+
 static int open_input(HLSContext *c, struct playlist *pls, struct segment *seg, AVIOContext **in)
 {
     AVDictionary *opts = NULL;
@@ -1352,19 +1383,9 @@ static int open_input(HLSContext *c, struct playlist *pls, struct segment *seg,
 
     if (seg->key_type == KEY_AES_128 || seg->key_type == KEY_SAMPLE_AES) {
         if (strcmp(seg->key, pls->key_url)) {
-            AVIOContext *pb = NULL;
-            if (open_url(pls->parent, &pb, seg->key, &c->avio_opts, NULL, NULL) == 0) {
-                ret = avio_read(pb, pls->key, sizeof(pls->key));
-                if (ret != sizeof(pls->key)) {
-                    av_log(pls->parent, AV_LOG_ERROR, "Unable to read key file %s\n",
-                           seg->key);
-                }
-                ff_format_io_close(pls->parent, &pb);
-            } else {
-                av_log(pls->parent, AV_LOG_ERROR, "Unable to open key file %s\n",
-                       seg->key);
-            }
-            av_strlcpy(pls->key_url, seg->key, sizeof(pls->key_url));
+            ret = read_key(c, pls, seg);
+            if (ret < 0)
+                goto cleanup;
         }
     }
 
-- 
2.46.0

_______________________________________________
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".

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2025-04-30  2:30 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-04-29  9:29 [FFmpeg-devel] [PATCH v3] avformat/hls: Return error code when read key file failed Zhao Zhili
2025-04-29  9:33 ` Steven Liu
2025-04-29 12:15 ` Andreas Rheinhardt
2025-04-29 12:28   ` Zhao Zhili
2025-04-30  2:29     ` [FFmpeg-devel] [PATCH v4] " Zhao Zhili

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git