Chromium Code Reviews| Index: third_party/libwebp/demux/demux.c |
| diff --git a/third_party/libwebp/demux/demux.c b/third_party/libwebp/demux/demux.c |
| index 9966399f90dbce08dbaa93b2d08e2a70d0e1cc11..c6e4acdcb866c1984a8accf6329f357ce6eed556 100644 |
| --- a/third_party/libwebp/demux/demux.c |
| +++ b/third_party/libwebp/demux/demux.c |
| @@ -509,8 +509,9 @@ static ParseStatus ParseVP8X(WebPDemuxer* const dmux) { |
| case MKFOURCC('A', 'L', 'P', 'H'): |
| case MKFOURCC('V', 'P', '8', ' '): |
| case MKFOURCC('V', 'P', '8', 'L'): { |
| + const int has_frames = !!(dmux->feature_flags_ & ANIMATION_FLAG); |
|
fbarchard
2013/11/23 01:01:57
!! is obscure.
const int has_frames = dmux->feat
|
| // check that this isn't an animation (all frames should be in an ANMF). |
| - if (anim_chunks > 0) return PARSE_ERROR; |
| + if (anim_chunks > 0 || has_frames) return PARSE_ERROR; |
| Rewind(mem, CHUNK_HEADER_SIZE); |
| status = ParseSingleImage(dmux); |
| @@ -599,6 +600,8 @@ static int IsValidSimpleFormat(const WebPDemuxer* const dmux) { |
| // If 'exact' is true, check that the image resolution matches the canvas. |
| // If 'exact' is false, check that the x/y offsets do not exceed the canvas. |
| +// TODO(jzern): this is insufficient in the fragmented image case if the |
|
fbarchard
2013/11/23 01:01:57
Prefer comments start with uppercase.
This is insu
|
| +// expectation is that the fragments completely cover the canvas. |
| static int CheckFrameBounds(const Frame* const frame, int exact, |
| int canvas_width, int canvas_height) { |
| if (exact) { |
| @@ -626,6 +629,9 @@ static int IsValidExtendedFormat(const WebPDemuxer* const dmux) { |
| if (dmux->canvas_width_ <= 0 || dmux->canvas_height_ <= 0) return 0; |
| if (dmux->loop_count_ < 0) return 0; |
| if (dmux->state_ == WEBP_DEMUX_DONE && dmux->frames_ == NULL) return 0; |
| +#ifndef WEBP_EXPERIMENTAL_FEATURES |
| + if (has_fragments) return 0; |
| +#endif |
| while (f != NULL) { |
| const int cur_frame_set = f->frame_num_; |
| @@ -637,8 +643,10 @@ static int IsValidExtendedFormat(const WebPDemuxer* const dmux) { |
| const ChunkData* const image = f->img_components_; |
| const ChunkData* const alpha = f->img_components_ + 1; |
| + if (has_fragments && !f->is_fragment_) return 0; |
| if (!has_fragments && f->is_fragment_) return 0; |
| if (!has_frames && f->frame_num_ > 1) return 0; |
| + |
| if (f->complete_) { |
| if (alpha->size_ == 0 && image->size_ == 0) return 0; |
| // Ensure alpha precedes image bitstream. |