|
|
|
@@ -544,11 +544,15 @@ static int decode_info_header(NUTContext *nut) |
|
|
|
|
|
|
|
if (value == -1) { |
|
|
|
type = "UTF-8"; |
|
|
|
get_str(bc, str_value, sizeof(str_value)); |
|
|
|
ret = get_str(bc, str_value, sizeof(str_value)); |
|
|
|
} else if (value == -2) { |
|
|
|
get_str(bc, type_str, sizeof(type_str)); |
|
|
|
ret = get_str(bc, type_str, sizeof(type_str)); |
|
|
|
if (ret < 0) { |
|
|
|
av_log(s, AV_LOG_ERROR, "get_str failed while decoding info header\n"); |
|
|
|
return ret; |
|
|
|
} |
|
|
|
type = type_str; |
|
|
|
get_str(bc, str_value, sizeof(str_value)); |
|
|
|
ret = get_str(bc, str_value, sizeof(str_value)); |
|
|
|
} else if (value == -3) { |
|
|
|
type = "s"; |
|
|
|
value = get_s(bc); |
|
|
|
@@ -562,6 +566,11 @@ static int decode_info_header(NUTContext *nut) |
|
|
|
type = "v"; |
|
|
|
} |
|
|
|
|
|
|
|
if (ret < 0) { |
|
|
|
av_log(s, AV_LOG_ERROR, "get_str failed while decoding info header\n"); |
|
|
|
return ret; |
|
|
|
} |
|
|
|
|
|
|
|
if (stream_id_plus1 > s->nb_streams) { |
|
|
|
av_log(s, AV_LOG_ERROR, "invalid stream id for info packet\n"); |
|
|
|
continue; |
|
|
|
@@ -875,13 +884,21 @@ static int read_sm_data(AVFormatContext *s, AVIOContext *bc, AVPacket *pkt, int |
|
|
|
value = get_s(bc); |
|
|
|
|
|
|
|
if (value == -1) { |
|
|
|
get_str(bc, str_value, sizeof(str_value)); |
|
|
|
ret = get_str(bc, str_value, sizeof(str_value)); |
|
|
|
if (ret < 0) { |
|
|
|
av_log(s, AV_LOG_ERROR, "get_str failed while reading sm data\n"); |
|
|
|
return ret; |
|
|
|
} |
|
|
|
av_log(s, AV_LOG_WARNING, "Unknown string %s / %s\n", name, str_value); |
|
|
|
} else if (value == -2) { |
|
|
|
uint8_t *dst = NULL; |
|
|
|
int64_t v64, value_len; |
|
|
|
|
|
|
|
get_str(bc, type_str, sizeof(type_str)); |
|
|
|
ret = get_str(bc, type_str, sizeof(type_str)); |
|
|
|
if (ret < 0) { |
|
|
|
av_log(s, AV_LOG_ERROR, "get_str failed while reading sm data\n"); |
|
|
|
return ret; |
|
|
|
} |
|
|
|
value_len = ffio_read_varlen(bc); |
|
|
|
if (avio_tell(bc) + value_len >= maxpos) |
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
|