[FFmpeg-devel] [PATCH] rmdec.c: correctly skip indexes
Ronald S. Bultje
rsbultje
Tue Dec 30 21:01:35 CET 2008
Hi,
On Tue, Dec 30, 2008 at 2:31 PM, Michael Niedermayer <michaelni at gmx.at> wrote:
> you silently remove a validity check, do you just not give a damn if the
Sorry, I thought I had made them unsigned, that was the intention.
When unsigned, the check makes no sense (because the value is always
positive). I don't care if we seek (unsigned int)-1 forward. If you
prefer signed (?), I can add the check back.
> besides you change a 16bit BE to a 32bit BE read, its hard to imagine how
> both could have made sense, you should explain this assuming your code
> does make any sense.
You want me to say the original code is wrong? I mean come on, it
fails to skip the index and results in garbage at the end of a file,
it was obviously never tested. Need I say more?
Ok, proof 1: all other level-1 IDs have a 32-bit size, it's
incomprehensible that real would choose a 16-bit one for INDX.
proof 2: mplayer/libmpdemux/demux_real.c:generate_index()
i = stream_read_dword_le(demuxer->stream);
if ((i == -256) || (i != MKTAG('I', 'N', 'D', 'X')))
{
mp_msg(MSGT_DEMUX, MSGL_WARN,"Something went wrong, no index chunk
found on given address (%d)\n",
next_header_pos);
index_mode = -1;
if (i == -256)
stream_reset(demuxer->stream);
stream_seek(demuxer->stream, origpos);
return 0;
//goto end;
}
mp_msg(MSGT_DEMUX, MSGL_V,"Reading index table from index chunk (%d)\n",
next_header_pos);
i = stream_read_dword(demuxer->stream);
mp_msg(MSGT_DEMUX, MSGL_V,"size: %d bytes\n", i);
In other words, a dword (32-bit) object size.
proof 3: gst-plugins-ugly/gst/realmedia/rmdemux.c:gst_rmdemux_chain()
rmdemux->object_id = RMDEMUX_FOURCC_GET (data + 0);
rmdemux->size = RMDEMUX_GUINT32_GET (data + 4) - HEADER_SIZE;
[..]
switch (rmdemux->object_id) {
[..]
case GST_MAKE_FOURCC ('I', 'N', 'D', 'X'):
rmdemux->state = RMDEMUX_STATE_HEADER_INDX;
break;
[..]
Shows a 32-bit object size.
Conclusion: the original code is wrong.
Ronald
More information about the ffmpeg-devel
mailing list