* [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