| @@ -107,11 +107,11 @@ static int alloc_table(VLC *vlc, int size, int use_static) | |||||
| vlc->table_size += size; | vlc->table_size += size; | ||||
| if (vlc->table_size > vlc->table_allocated) { | if (vlc->table_size > vlc->table_allocated) { | ||||
| if (use_static) | if (use_static) | ||||
| abort(); // cannot do anything, init_vlc() is used with too little memory | |||||
| return AVERROR_BUG; | |||||
| vlc->table_allocated += (1 << vlc->bits); | vlc->table_allocated += (1 << vlc->bits); | ||||
| vlc->table = av_realloc(vlc->table, sizeof(VLC_TYPE) * 2 * vlc->table_allocated); | vlc->table = av_realloc(vlc->table, sizeof(VLC_TYPE) * 2 * vlc->table_allocated); | ||||
| if (!vlc->table) | if (!vlc->table) | ||||
| return -1; | |||||
| return AVERROR(ENOMEM); | |||||
| } | } | ||||
| return index; | return index; | ||||
| } | } | ||||
| @@ -163,7 +163,7 @@ static int build_table(VLC *vlc, int table_nb_bits, int nb_codes, | |||||
| table_index = alloc_table(vlc, table_size, flags & INIT_VLC_USE_NEW_STATIC); | table_index = alloc_table(vlc, table_size, flags & INIT_VLC_USE_NEW_STATIC); | ||||
| av_dlog(NULL, "new table index=%d size=%d\n", table_index, table_size); | av_dlog(NULL, "new table index=%d size=%d\n", table_index, table_size); | ||||
| if (table_index < 0) | if (table_index < 0) | ||||
| return -1; | |||||
| return table_index; | |||||
| table = &vlc->table[table_index]; | table = &vlc->table[table_index]; | ||||
| for (i = 0; i < table_size; i++) { | for (i = 0; i < table_size; i++) { | ||||
| @@ -190,7 +190,7 @@ static int build_table(VLC *vlc, int table_nb_bits, int nb_codes, | |||||
| av_dlog(NULL, "%4x: code=%d n=%d\n", j, i, n); | av_dlog(NULL, "%4x: code=%d n=%d\n", j, i, n); | ||||
| if (table[j][1] /*bits*/ != 0) { | if (table[j][1] /*bits*/ != 0) { | ||||
| av_log(NULL, AV_LOG_ERROR, "incorrect codes\n"); | av_log(NULL, AV_LOG_ERROR, "incorrect codes\n"); | ||||
| return -1; | |||||
| return AVERROR_INVALIDDATA; | |||||
| } | } | ||||
| table[j][1] = n; //bits | table[j][1] = n; //bits | ||||
| table[j][0] = symbol; | table[j][0] = symbol; | ||||
| @@ -221,7 +221,7 @@ static int build_table(VLC *vlc, int table_nb_bits, int nb_codes, | |||||
| j, codes[i].bits + table_nb_bits); | j, codes[i].bits + table_nb_bits); | ||||
| index = build_table(vlc, subtable_bits, k-i, codes+i, flags); | index = build_table(vlc, subtable_bits, k-i, codes+i, flags); | ||||
| if (index < 0) | if (index < 0) | ||||
| return -1; | |||||
| return index; | |||||
| /* note: realloc has been done, so reload tables */ | /* note: realloc has been done, so reload tables */ | ||||
| table = &vlc->table[table_index]; | table = &vlc->table[table_index]; | ||||
| table[j][0] = index; //code | table[j][0] = index; //code | ||||
| @@ -272,7 +272,7 @@ int ff_init_vlc_sparse(VLC *vlc, int nb_bits, int nb_codes, | |||||
| if (vlc->table_size && vlc->table_size == vlc->table_allocated) { | if (vlc->table_size && vlc->table_size == vlc->table_allocated) { | ||||
| return 0; | return 0; | ||||
| } else if (vlc->table_size) { | } else if (vlc->table_size) { | ||||
| abort(); // fatal error, we are called on a partially initialized table | |||||
| return AVERROR_BUG; | |||||
| } | } | ||||
| } else { | } else { | ||||
| vlc->table = NULL; | vlc->table = NULL; | ||||
| @@ -313,7 +313,7 @@ int ff_init_vlc_sparse(VLC *vlc, int nb_bits, int nb_codes, | |||||
| av_free(buf); | av_free(buf); | ||||
| if (ret < 0) { | if (ret < 0) { | ||||
| av_freep(&vlc->table); | av_freep(&vlc->table); | ||||
| return -1; | |||||
| return ret; | |||||
| } | } | ||||
| if ((flags & INIT_VLC_USE_NEW_STATIC) && | if ((flags & INIT_VLC_USE_NEW_STATIC) && | ||||
| vlc->table_size != vlc->table_allocated) | vlc->table_size != vlc->table_allocated) | ||||