rmdec: Pass AVIOContext to rm_read_metadata()
Fix null pointer dereference Fixes Ticket2588 Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
e1b0d3a389
commit
bf87908cd8
@ -95,13 +95,14 @@ static int rm_read_extradata(AVIOContext *pb, AVCodecContext *avctx, unsigned si
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rm_read_metadata(AVFormatContext *s, int wide)
|
static void rm_read_metadata(AVFormatContext *s, AVIOContext *pb, int wide)
|
||||||
{
|
{
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i=0; i<FF_ARRAY_ELEMS(ff_rm_metadata); i++) {
|
for (i=0; i<FF_ARRAY_ELEMS(ff_rm_metadata); i++) {
|
||||||
int len = wide ? avio_rb16(s->pb) : avio_r8(s->pb);
|
int len = wide ? avio_rb16(pb) : avio_r8(pb);
|
||||||
get_strl(s->pb, buf, sizeof(buf), len);
|
get_strl(pb, buf, sizeof(buf), len);
|
||||||
av_dict_set(&s->metadata, ff_rm_metadata[i], buf, 0);
|
av_dict_set(&s->metadata, ff_rm_metadata[i], buf, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -134,7 +135,7 @@ static int rm_read_audio_stream_info(AVFormatContext *s, AVIOContext *pb,
|
|||||||
avio_skip(pb, 8);
|
avio_skip(pb, 8);
|
||||||
bytes_per_minute = avio_rb16(pb);
|
bytes_per_minute = avio_rb16(pb);
|
||||||
avio_skip(pb, 4);
|
avio_skip(pb, 4);
|
||||||
rm_read_metadata(s, 0);
|
rm_read_metadata(s, pb, 0);
|
||||||
if ((startpos + header_size) >= avio_tell(pb) + 2) {
|
if ((startpos + header_size) >= avio_tell(pb) + 2) {
|
||||||
// fourcc (should always be "lpcJ")
|
// fourcc (should always be "lpcJ")
|
||||||
avio_r8(pb);
|
avio_r8(pb);
|
||||||
@ -293,7 +294,7 @@ static int rm_read_audio_stream_info(AVFormatContext *s, AVIOContext *pb,
|
|||||||
avio_r8(pb);
|
avio_r8(pb);
|
||||||
avio_r8(pb);
|
avio_r8(pb);
|
||||||
avio_r8(pb);
|
avio_r8(pb);
|
||||||
rm_read_metadata(s, 0);
|
rm_read_metadata(s, pb, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -516,7 +517,7 @@ static int rm_read_header(AVFormatContext *s)
|
|||||||
flags = avio_rb16(pb); /* flags */
|
flags = avio_rb16(pb); /* flags */
|
||||||
break;
|
break;
|
||||||
case MKTAG('C', 'O', 'N', 'T'):
|
case MKTAG('C', 'O', 'N', 'T'):
|
||||||
rm_read_metadata(s, 1);
|
rm_read_metadata(s, pb, 1);
|
||||||
break;
|
break;
|
||||||
case MKTAG('M', 'D', 'P', 'R'):
|
case MKTAG('M', 'D', 'P', 'R'):
|
||||||
st = avformat_new_stream(s, NULL);
|
st = avformat_new_stream(s, NULL);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user