|
|
|
@@ -356,11 +356,11 @@ int ff_amf_tag_size(const uint8_t *data, const uint8_t *data_end) |
|
|
|
data++; |
|
|
|
break; |
|
|
|
} |
|
|
|
if (data + size >= data_end || data + size < data) |
|
|
|
if (size < 0 || size >= data_end - data) |
|
|
|
return -1; |
|
|
|
data += size; |
|
|
|
t = ff_amf_tag_size(data, data_end); |
|
|
|
if (t < 0 || data + t >= data_end) |
|
|
|
if (t < 0 || t >= data_end - data) |
|
|
|
return -1; |
|
|
|
data += t; |
|
|
|
} |
|
|
|
@@ -389,7 +389,7 @@ int ff_amf_get_field_value(const uint8_t *data, const uint8_t *data_end, |
|
|
|
int size = bytestream_get_be16(&data); |
|
|
|
if (!size) |
|
|
|
break; |
|
|
|
if (data + size >= data_end || data + size < data) |
|
|
|
if (size < 0 || size >= data_end - data) |
|
|
|
return -1; |
|
|
|
data += size; |
|
|
|
if (size == namelen && !memcmp(data-size, name, namelen)) { |
|
|
|
@@ -410,7 +410,7 @@ int ff_amf_get_field_value(const uint8_t *data, const uint8_t *data_end, |
|
|
|
return 0; |
|
|
|
} |
|
|
|
len = ff_amf_tag_size(data, data_end); |
|
|
|
if (len < 0 || data + len >= data_end || data + len < data) |
|
|
|
if (len < 0 || len >= data_end - data) |
|
|
|
return -1; |
|
|
|
data += len; |
|
|
|
} |
|
|
|
@@ -481,13 +481,13 @@ static void ff_amf_tag_contents(void *ctx, const uint8_t *data, const uint8_t *d |
|
|
|
data++; |
|
|
|
break; |
|
|
|
} |
|
|
|
if (data + size >= data_end || data + size < data) |
|
|
|
if (size < 0 || size >= data_end - data) |
|
|
|
return; |
|
|
|
data += size; |
|
|
|
av_log(ctx, AV_LOG_DEBUG, " %s: ", buf); |
|
|
|
ff_amf_tag_contents(ctx, data, data_end); |
|
|
|
t = ff_amf_tag_size(data, data_end); |
|
|
|
if (t < 0 || data + t >= data_end) |
|
|
|
if (t < 0 || t >= data_end - data) |
|
|
|
return; |
|
|
|
data += t; |
|
|
|
} |
|
|
|
|