Mercurial > audlegacy-plugins
diff src/madplug/input.c @ 674:fadf4c18a1cf trunk
[svn] madplug bug fix:
- no longer crashes on extra long TCON tag.
- now scan_file() calculates track length properly.
| author | yaz |
|---|---|
| date | Mon, 19 Feb 2007 18:08:27 -0800 |
| parents | e0d131145768 |
| children | 1ea4cfb007e0 |
line wrap: on
line diff
--- a/src/madplug/input.c Mon Feb 19 04:55:14 2007 -0800 +++ b/src/madplug/input.c Mon Feb 19 18:08:27 2007 -0800 @@ -123,7 +123,7 @@ info->remote = info->size == 0 ? TRUE : FALSE; #ifdef DEBUG - g_message("i: info->size == %lu", (long unsigned int)info->size); + g_message("i: info->size = %lu", (long unsigned int)info->size); g_message("e: input_init"); #endif return TRUE; @@ -164,11 +164,13 @@ id3_ucs4_t *ptr, *end, *tail, *tp; size_t ret_len = 0; //num of ucs4 char! size_t tmp_len = 0; + size_t string_len = 0; gboolean is_num = TRUE; - tail = (id3_ucs4_t *)string + mad_ucs4len((id3_ucs4_t *)string); + string_len = mad_ucs4len((id3_ucs4_t *)string); + tail = (id3_ucs4_t *)string + string_len; - ret = g_malloc0(1024); + ret = g_malloc0(BYTES(string_len + 1)); for(ptr = (id3_ucs4_t *)string; *ptr != 0 && ptr <= tail; ptr++) { if(*ptr == '(') { @@ -247,6 +249,7 @@ #ifdef DEBUG printf("plain!\n"); printf("ret_len = %d\n", ret_len); + printf("end - ptr = %d\n", BYTES(end - ptr)); #endif memcpy(ret + BYTES(ret_len), ptr, BYTES(end - ptr)); ret_len = ret_len + (end - ptr); @@ -297,6 +300,9 @@ string = mad_ucs4dup((id3_ucs4_t *)string_const); } + if (!string) + return NULL; + switch (encoding) { case ID3_FIELD_TEXTENCODING_ISO_8859_1: rtn0 = (gchar *)id3_ucs4_latin1duplicate(string);
