rmdec: Pass AVIOContext to rm_read_metadata()

Fix null pointer dereference
Fixes Ticket2588

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
pull/26/merge
Michael Niedermayer 12 years ago
parent e1b0d3a389
commit bf87908cd8
  1. 13
      libavformat/rmdec.c

@ -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…
Cancel
Save