[FFmpeg-devel] Fwd: Questionable libav code

Hendrik Leppkes h.leppkes at gmail.com
Sun Feb 7 18:44:16 CET 2016


On Sun, Feb 7, 2016 at 6:38 PM, Ratin <ratin3 at gmail.com> wrote:
> On Tue, Feb 2, 2016 at 11:41 PM, wm4 <nfxjfg at googlemail.com> wrote:
>
>> On Tue, 2 Feb 2016 14:31:20 -0800
>> Ratin <ratin3 at gmail.com> wrote:
>>
>> > libavcodec has codes like this one (utils.c):
>> >
>> > static AVPacket *add_to_pktbuf(AVPacketList **packet_buffer, AVPacket
>> *pkt,
>> >                                AVPacketList **plast_pktl)
>> > {
>> >     AVPacketList *pktl = av_mallocz(sizeof(AVPacketList));
>> >     if (!pktl)
>> >         return NULL;
>> >
>> >     if (*packet_buffer)
>> >         (*plast_pktl)->next = pktl;
>> >     else
>> >         *packet_buffer = pktl;
>> >
>> >     /* Add the packet in the buffered packet list. */
>> >     *plast_pktl = pktl;
>> >     pktl->pkt   = *pkt; <===========================
>> >     return &pktl->pkt;
>> > }
>> >
>> > Here a struct variable is meant to be copied over via assignment, is that
>> > 100% correct to always work the way was intended?  Given that the struct
>> > pkt is a big struct which has raw bytes that are malloc'd. I was always
>> > trained to avoid such struct assignment operations. What do people think?
>>
>> There is no problem at all here.
>>
>
>  Sorry a bit confused, what happens when second argument is not malloc'ed,
> somebody uses
>
> AVPacket pkt;
> add_to_pktbuf(packet_list, &pkt, plastpkt)
>

add_to_pktbuf is private internal API, if it would be used like this
it would be a bug, but its not used like that, so there is no problem.

- Hendrik


More information about the ffmpeg-devel mailing list