> On Apr 29, 2025, at 20:15, Andreas Rheinhardt 
> <andreas.rheinha...@outlook.com> wrote:
> 
> Zhao Zhili:
>> From: Zhao Zhili <zhiliz...@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-requ...@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-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to