summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2013-09-22 17:17:10 +0200
committerMichael Niedermayer <michaelni@gmx.at>2013-09-22 17:17:10 +0200
commitafe09e490a30c97aad6736f99d186634c354eb34 (patch)
tree13aaa7d073615793f9471c570b44b0cd80d74998
parentf8c4dbe45ee2d76340e5b1071d998f6fb15e1aca (diff)
parent5025dbc577c9a9e0109cb363ac630a9eeda6dc1d (diff)
downloadffmpeg-afe09e490a30c97aad6736f99d186634c354eb34.tar.gz
Merge commit '5025dbc577c9a9e0109cb363ac630a9eeda6dc1d' into release/0.8
* commit '5025dbc577c9a9e0109cb363ac630a9eeda6dc1d': wmaprodec: return an error, not 0, when the input is too small. vorbisdec: Error on bark_map_size equal to 0. Update RELEASE file for 0.7.8 update year to 2013 oggdec: make sure the private parse data is cleaned up indeo5: update AVCodecContext width/height on size change doc: filters: Correct BNF FILTER description Conflicts: RELEASE Merged-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r--doc/filters.texi2
-rw-r--r--libavcodec/indeo5.c1
-rw-r--r--libavcodec/vorbisdec.c5
-rw-r--r--libavcodec/wmaprodec.c7
-rw-r--r--libavformat/oggdec.c4
-rw-r--r--libavformat/oggdec.h5
-rw-r--r--libavformat/oggparsevorbis.c14
7 files changed, 34 insertions, 4 deletions
diff --git a/doc/filters.texi b/doc/filters.texi
index b0c8023bac..1ebaac1adf 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -82,7 +82,7 @@ Follows a BNF description for the filtergraph syntax:
@var{LINKLABEL} ::= "[" @var{NAME} "]"
@var{LINKLABELS} ::= @var{LINKLABEL} [@var{LINKLABELS}]
@var{FILTER_ARGUMENTS} ::= sequence of chars (eventually quoted)
-@var{FILTER} ::= [@var{LINKNAMES}] @var{NAME} ["=" @var{ARGUMENTS}] [@var{LINKNAMES}]
+@var{FILTER} ::= [@var{LINKLABELS}] @var{NAME} ["=" @var{FILTER_ARGUMENTS}] [@var{LINKLABELS}]
@var{FILTERCHAIN} ::= @var{FILTER} [,@var{FILTERCHAIN}]
@var{FILTERGRAPH} ::= @var{FILTERCHAIN} [;@var{FILTERGRAPH}]
@end example
diff --git a/libavcodec/indeo5.c b/libavcodec/indeo5.c
index 15fad5872b..1f454a32c2 100644
--- a/libavcodec/indeo5.c
+++ b/libavcodec/indeo5.c
@@ -804,6 +804,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size,
avctx->release_buffer(avctx, &ctx->frame);
ctx->frame.reference = 0;
+ avcodec_set_dimensions(avctx, ctx->planes[0].width, ctx->planes[0].height);
if (avctx->get_buffer(avctx, &ctx->frame) < 0) {
av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
return -1;
diff --git a/libavcodec/vorbisdec.c b/libavcodec/vorbisdec.c
index b5351229a4..a266cdbc40 100644
--- a/libavcodec/vorbisdec.c
+++ b/libavcodec/vorbisdec.c
@@ -572,6 +572,11 @@ static int vorbis_parse_setup_hdr_floors(vorbis_context *vc)
floor_setup->data.t0.order = get_bits(gb, 8);
floor_setup->data.t0.rate = get_bits(gb, 16);
floor_setup->data.t0.bark_map_size = get_bits(gb, 16);
+ if (floor_setup->data.t0.bark_map_size == 0) {
+ av_log(vc->avccontext, AV_LOG_ERROR,
+ "Floor 0 bark map size is 0.\n");
+ return AVERROR_INVALIDDATA;
+ }
floor_setup->data.t0.amplitude_bits = get_bits(gb, 6);
/* zero would result in a div by zero later *
* 2^0 - 1 == 0 */
diff --git a/libavcodec/wmaprodec.c b/libavcodec/wmaprodec.c
index 11059a596a..6b3d476a53 100644
--- a/libavcodec/wmaprodec.c
+++ b/libavcodec/wmaprodec.c
@@ -1502,8 +1502,11 @@ static int decode_packet(AVCodecContext *avctx,
s->packet_done = 0;
/** sanity check for the buffer length */
- if (buf_size < avctx->block_align)
- return 0;
+ if (buf_size < avctx->block_align) {
+ av_log(avctx, AV_LOG_ERROR, "Input packet too small (%d < %d)\n",
+ buf_size, avctx->block_align);
+ return AVERROR_INVALIDDATA;
+ }
s->next_packet_start = buf_size - avctx->block_align;
buf_size = avctx->block_align;
diff --git a/libavformat/oggdec.c b/libavformat/oggdec.c
index 88b297f481..e103290056 100644
--- a/libavformat/oggdec.c
+++ b/libavformat/oggdec.c
@@ -518,6 +518,10 @@ static int ogg_read_close(AVFormatContext *s)
for (i = 0; i < ogg->nstreams; i++) {
av_free(ogg->streams[i].buf);
+ if (ogg->streams[i].codec &&
+ ogg->streams[i].codec->cleanup) {
+ ogg->streams[i].codec->cleanup(s, i);
+ }
av_free(ogg->streams[i].private);
}
av_free(ogg->streams);
diff --git a/libavformat/oggdec.h b/libavformat/oggdec.h
index 184a628622..1a702c32d2 100644
--- a/libavformat/oggdec.h
+++ b/libavformat/oggdec.h
@@ -51,6 +51,11 @@ struct ogg_codec {
* 0 if granule is the end time of the associated packet.
*/
int granule_is_start;
+ /**
+ * Number of expected headers
+ */
+ int nb_header;
+ void (*cleanup)(AVFormatContext *s, int idx);
};
struct ogg_stream {
diff --git a/libavformat/oggparsevorbis.c b/libavformat/oggparsevorbis.c
index 86951f3e2f..f276a131af 100644
--- a/libavformat/oggparsevorbis.c
+++ b/libavformat/oggparsevorbis.c
@@ -188,6 +188,16 @@ fixup_vorbis_headers(AVFormatContext * as, struct oggvorbis_private *priv,
return offset;
}
+static int vorbis_cleanup(AVFormatContext *s, int idx)
+{
+ struct ogg *ogg = s->priv_data;
+ struct ogg_stream *os = ogg->streams + idx;
+ struct oggvorbis_private *priv = os->private;
+ int i;
+ if (os->private)
+ for (i = 0; i < 3; i++)
+ av_freep(&priv->packet[i]);
+}
static int
vorbis_header (AVFormatContext * s, int idx)
@@ -278,5 +288,7 @@ vorbis_header (AVFormatContext * s, int idx)
const struct ogg_codec ff_vorbis_codec = {
.magic = "\001vorbis",
.magicsize = 7,
- .header = vorbis_header
+ .header = vorbis_header,
+ .cleanup= vorbis_cleanup,
+ .nb_header = 3,
};