1f45796ee0eb46c2d08a6d1547622043892c525ebdml/*
2f45796ee0eb46c2d08a6d1547622043892c525ebdml * Copyright 2015 Google Inc.
3f45796ee0eb46c2d08a6d1547622043892c525ebdml *
4f45796ee0eb46c2d08a6d1547622043892c525ebdml * Use of this source code is governed by a BSD-style license that can be
5f45796ee0eb46c2d08a6d1547622043892c525ebdml * found in the LICENSE file.
6f45796ee0eb46c2d08a6d1547622043892c525ebdml */
7f45796ee0eb46c2d08a6d1547622043892c525ebdml
8c671b4fe1ad95a88acc2234f33dfc65b84e0c37fscroggo#include "CodecPriv.h"
9f45796ee0eb46c2d08a6d1547622043892c525ebdml#include "SkBitmap.h"
10f45796ee0eb46c2d08a6d1547622043892c525ebdml#include "Test.h"
11f45796ee0eb46c2d08a6d1547622043892c525ebdml
12f45796ee0eb46c2d08a6d1547622043892c525ebdml// A valid 1x1 indexed PNG.
13f45796ee0eb46c2d08a6d1547622043892c525ebdmlunsigned char gPngData[] = {
14f45796ee0eb46c2d08a6d1547622043892c525ebdml  0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
15f45796ee0eb46c2d08a6d1547622043892c525ebdml  0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
16f45796ee0eb46c2d08a6d1547622043892c525ebdml  0x08, 0x03, 0x00, 0x00, 0x00, 0x28, 0xcb, 0x34, 0xbb, 0x00, 0x00, 0x00,
17f45796ee0eb46c2d08a6d1547622043892c525ebdml  0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
18f45796ee0eb46c2d08a6d1547622043892c525ebdml  0x1c, 0x00, 0x0f, 0x01, 0xb9, 0x8f, 0x00, 0x00, 0x00, 0x06, 0x50, 0x4c,
19f45796ee0eb46c2d08a6d1547622043892c525ebdml  0x54, 0x45, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0xd2, 0x87, 0xef, 0x71,
20f45796ee0eb46c2d08a6d1547622043892c525ebdml  0x00, 0x00, 0x00, 0x13, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xed, 0xfd,
21f45796ee0eb46c2d08a6d1547622043892c525ebdml  0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xf8, 0xaf, 0x16, 0x46, 0x00,
22f45796ee0eb46c2d08a6d1547622043892c525ebdml  0x02, 0x00, 0x01, 0x32, 0x60, 0xf7, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x49,
23f45796ee0eb46c2d08a6d1547622043892c525ebdml  0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
24f45796ee0eb46c2d08a6d1547622043892c525ebdml};
25f45796ee0eb46c2d08a6d1547622043892c525ebdml
26f45796ee0eb46c2d08a6d1547622043892c525ebdml// Attempt to decode an invalid PNG that has a palette. Mostly we're looking to
27f45796ee0eb46c2d08a6d1547622043892c525ebdml// make sure we don't leak memory since libpng uses setjmp for error handling so
28f45796ee0eb46c2d08a6d1547622043892c525ebdml// it's very easy to accidentally skip destructors when a failure happens.
29dd8c637bc74be9a03c5738e6b37f62bbd653846bscroggo// As a result, we do not have any REPORTER_ASSERT statements
30f45796ee0eb46c2d08a6d1547622043892c525ebdmlDEF_TEST(InvalidIndexedPng, reporter) {
31dd8c637bc74be9a03c5738e6b37f62bbd653846bscroggo    SkBitmap image;
32dd8c637bc74be9a03c5738e6b37f62bbd653846bscroggo    // Make our PNG invalid by changing a byte.
33dd8c637bc74be9a03c5738e6b37f62bbd653846bscroggo    gPngData[sizeof(gPngData) - 1] = 1;
34f45796ee0eb46c2d08a6d1547622043892c525ebdml
35c671b4fe1ad95a88acc2234f33dfc65b84e0c37fscroggo    decode_memory(gPngData, sizeof(gPngData), &image);
36dd8c637bc74be9a03c5738e6b37f62bbd653846bscroggo}
37