On Sun, Aug 31, 2014 at 9:41 AM, Reimar Döffinger <reimar.doeffin...@gmx.de> wrote: > On 30.08.2014, at 15:38, wm4 <nfx...@googlemail.com> wrote: >> + // The packet-size is stored as part of the packet. >> + if ((ret = avio_read(s->pb, tmp, 3)) < 0) >> + return ret; >> + >> + len = AV_RB16(tmp + 1); >> + >> + if ((ret = av_new_packet(pkt, len + 3)) < 0) >> + return ret; >> + >> + memcpy(pkt->data, tmp, 3); >> + >> + if ((ret = avio_read(s->pb, pkt->data + 3, len)) < 0) { >> + av_free_packet(pkt); >> + return ret; >> + } > > I think this will not handle short reads correctly, retuning uninitialised > data. > My suggestion would be to read the length, then seek back (buffering should > ensure this is no issue even if we read from stdin) and then use the > functions to read the full packet with all the proper error handling.
I don't see a problem in the code he proposed. It seems to handle every read with an error check, without relying on potential buffering of data to allow a seek backwards. This is assuming avio_read does return an error if it runs against EOF, which I assume it does? I didn't double check that. What exactly do you think is wrong here? - Hendrik _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel