[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