Commit 9dda53e1 authored by Max Kellermann's avatar Max Kellermann

Merge release 0.15.10 from branch 'v0.15.x'

Conflicts: NEWS configure.ac src/input/mms_input_plugin.c
parents e8310211 57e95ea6
...@@ -101,6 +101,14 @@ ver 0.16 (20??/??/??) ...@@ -101,6 +101,14 @@ ver 0.16 (20??/??/??)
* added libwrap support * added libwrap support
ver 0.15.10 (2010/05/30)
* input:
- mms: fix memory leak in error handler
- mms: initialize the "eof" attribute
* decoders:
- mad: properly calculate ID3 size without libid3tag
ver 0.15.9 (2010/03/21) ver 0.15.9 (2010/03/21)
* decoders: * decoders:
- mad: fix crash when seeking at end of song - mad: fix crash when seeking at end of song
......
...@@ -468,7 +468,27 @@ static void mp3_parse_id3(struct mp3_data *data, size_t tagsize, ...@@ -468,7 +468,27 @@ static void mp3_parse_id3(struct mp3_data *data, size_t tagsize,
/* This code is enabled when libid3tag is disabled. Instead /* This code is enabled when libid3tag is disabled. Instead
of parsing the ID3 frame, it just skips it. */ of parsing the ID3 frame, it just skips it. */
mad_stream_skip(&data->stream, tagsize); size_t count = data->stream.bufend - data->stream.this_frame;
if (tagsize <= count) {
mad_stream_skip(&data->stream, tagsize);
} else {
mad_stream_skip(&data->stream, count);
while (count < tagsize) {
size_t len = tagsize - count;
char ignored[1024];
if (len > sizeof(ignored))
len = sizeof(ignored);
len = decoder_read(data->decoder, data->input_stream,
ignored, len);
if (len == 0)
break;
else
count += len;
}
}
#endif #endif
} }
...@@ -476,16 +496,16 @@ static void mp3_parse_id3(struct mp3_data *data, size_t tagsize, ...@@ -476,16 +496,16 @@ static void mp3_parse_id3(struct mp3_data *data, size_t tagsize,
/** /**
* This function emulates libid3tag when it is disabled. Instead of * This function emulates libid3tag when it is disabled. Instead of
* doing a real analyzation of the frame, it just checks whether the * doing a real analyzation of the frame, it just checks whether the
* frame begins with the string "ID3". If so, it returns the full * frame begins with the string "ID3". If so, it returns the length
* length. * of the ID3 frame.
*/ */
static signed long static signed long
id3_tag_query(const void *p0, size_t length) id3_tag_query(const void *p0, size_t length)
{ {
const char *p = p0; const char *p = p0;
return length > 3 && memcmp(p, "ID3", 3) == 0 return length >= 10 && memcmp(p, "ID3", 3) == 0
? length ? (p[8] << 7) + p[9] + 10
: 0; : 0;
} }
#endif /* !HAVE_ID3TAG */ #endif /* !HAVE_ID3TAG */
......
...@@ -60,10 +60,13 @@ input_mms_open(const char *url, GError **error_r) ...@@ -60,10 +60,13 @@ input_mms_open(const char *url, GError **error_r)
m->mms = mmsx_connect(NULL, NULL, url, 128 * 1024); m->mms = mmsx_connect(NULL, NULL, url, 128 * 1024);
if (m->mms == NULL) { if (m->mms == NULL) {
g_free(m);
g_set_error(error_r, mms_quark(), 0, "mmsx_connect() failed"); g_set_error(error_r, mms_quark(), 0, "mmsx_connect() failed");
return NULL; return NULL;
} }
m->eof = false;
/* XX is this correct? at least this selects the ffmpeg /* XX is this correct? at least this selects the ffmpeg
decoder, which seems to work fine*/ decoder, which seems to work fine*/
m->base.mime = g_strdup("audio/x-ms-wma"); m->base.mime = g_strdup("audio/x-ms-wma");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment