83239658f2
(Originally uploaded as 13900.) Previously, SkPngCodec assumed that the stream only contained one image, which ended at the end of the stream. It read the stream in arbitrarily-sized chunks, and then passed that data to libpng for processing. If a stream contains more than one image, this may result in reading beyond the end of the image, making future reads read the wrong data. Now, SkPngCodec starts by reading 8 bytes at a time. After the signature, 8 bytes is enough to know which chunk is next and how many bytes are in the chunk. When decoding the size, we stop when we reach IDAT, and when decoding the image, we stop when we reach IEND. This manual parsing is necessary to support APNG, which is planned in the future. It also allows us to remove the SK_GOOGLE3_PNG_HACK, which was a workaround for reading more than necessary at the beginning of the image. Add a test that simulates the issue, by decoding a special stream that reports an error if the codec attempts to read beyond the end. Temporarily disable the partial decoding tests for png. A larger change will be necessary to get those working again, and no clients are currently relying on incrementally decoding PNGs (i.e. decode part of an image, then decode further with more data). Include a workaround for older versions of libpng (e.g. 1.2 in Google3). In older versions, if the row callback is null when the IDAT header is processed, reading the image will fail. When we see the IDAT, we save the length and process a recreated IDAT header later, after the row callback has been set. Bug: skia:5368 Bug:b/34073812 Test: Existing tests, plus a new test in dm. Change-Id: I293a4ddc013b82669a8b735062228b26d0bce933 Reviewed-on: https://skia-review.googlesource.com/13984 Commit-Queue: Leon Scroggins <scroggo@google.com> Reviewed-by: Matt Sarett <msarett@google.com>
322 lines
10 KiB
Plaintext
322 lines
10 KiB
Plaintext
# Copyright 2016 Google Inc.
|
|
#
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
# Things are easiest for everyone if these source paths are absolute.
|
|
_tests = get_path_info("../tests", "abspath")
|
|
|
|
tests_sources = [
|
|
"$_tests/AAClipTest.cpp",
|
|
"$_tests/AnnotationTest.cpp",
|
|
"$_tests/ApplyGammaTest.cpp",
|
|
"$_tests/ArenaAllocTest.cpp",
|
|
"$_tests/AsADashTest.cpp",
|
|
"$_tests/BadIcoTest.cpp",
|
|
"$_tests/BitmapCopyTest.cpp",
|
|
"$_tests/BitmapGetColorTest.cpp",
|
|
"$_tests/BitmapTest.cpp",
|
|
"$_tests/BitSetTest.cpp",
|
|
"$_tests/BlendTest.cpp",
|
|
"$_tests/BlitMaskClip.cpp",
|
|
"$_tests/BlitRowTest.cpp",
|
|
"$_tests/BlurTest.cpp",
|
|
"$_tests/CachedDataTest.cpp",
|
|
"$_tests/CachedDecodingPixelRefTest.cpp",
|
|
"$_tests/CanvasStateHelpers.cpp",
|
|
"$_tests/CanvasStateTest.cpp",
|
|
"$_tests/CanvasTest.cpp",
|
|
"$_tests/ChecksumTest.cpp",
|
|
"$_tests/ClampRangeTest.cpp",
|
|
"$_tests/ClearTest.cpp",
|
|
"$_tests/ClipBoundsTest.cpp",
|
|
"$_tests/ClipCubicTest.cpp",
|
|
"$_tests/ClipperTest.cpp",
|
|
"$_tests/ClipStackTest.cpp",
|
|
"$_tests/CodecAnimTest.cpp",
|
|
"$_tests/CodecExactReadTest.cpp",
|
|
"$_tests/CodecPartialTest.cpp",
|
|
"$_tests/CodecTest.cpp",
|
|
"$_tests/ColorFilterTest.cpp",
|
|
"$_tests/ColorMatrixTest.cpp",
|
|
"$_tests/ColorPrivTest.cpp",
|
|
"$_tests/ColorSpaceTest.cpp",
|
|
"$_tests/ColorSpaceXformTest.cpp",
|
|
"$_tests/ColorTest.cpp",
|
|
"$_tests/CopySurfaceTest.cpp",
|
|
"$_tests/CPlusPlusEleven.cpp",
|
|
"$_tests/CrossContextImageTest.cpp",
|
|
"$_tests/CTest.cpp",
|
|
"$_tests/DashPathEffectTest.cpp",
|
|
"$_tests/DataRefTest.cpp",
|
|
"$_tests/DequeTest.cpp",
|
|
"$_tests/DetermineDomainModeTest.cpp",
|
|
"$_tests/DeviceLooperTest.cpp",
|
|
"$_tests/DeviceTest.cpp",
|
|
"$_tests/DFPathRendererTest.cpp",
|
|
"$_tests/DiscardableMemoryPoolTest.cpp",
|
|
"$_tests/DiscardableMemoryTest.cpp",
|
|
"$_tests/DrawBitmapRectTest.cpp",
|
|
"$_tests/DrawFilterTest.cpp",
|
|
"$_tests/DrawPathTest.cpp",
|
|
"$_tests/DrawTextTest.cpp",
|
|
"$_tests/DynamicHashTest.cpp",
|
|
"$_tests/EGLImageTest.cpp",
|
|
"$_tests/EmptyPathTest.cpp",
|
|
"$_tests/ExifTest.cpp",
|
|
"$_tests/F16StagesTest.cpp",
|
|
"$_tests/FillPathTest.cpp",
|
|
"$_tests/FitsInTest.cpp",
|
|
"$_tests/FlattenableCustomFactory.cpp",
|
|
"$_tests/FlattenableFactoryToName.cpp",
|
|
"$_tests/FlattenDrawableTest.cpp",
|
|
"$_tests/Float16Test.cpp",
|
|
"$_tests/FloatingPointTextureTest.cpp",
|
|
"$_tests/FontHostStreamTest.cpp",
|
|
"$_tests/FontHostTest.cpp",
|
|
"$_tests/FontMgrAndroidParserTest.cpp",
|
|
"$_tests/FontMgrTest.cpp",
|
|
"$_tests/FontNamesTest.cpp",
|
|
"$_tests/FontObjTest.cpp",
|
|
"$_tests/FrontBufferedStreamTest.cpp",
|
|
"$_tests/GeometryTest.cpp",
|
|
"$_tests/GifTest.cpp",
|
|
"$_tests/GLProgramsTest.cpp",
|
|
"$_tests/GpuDrawPathTest.cpp",
|
|
"$_tests/GpuLayerCacheTest.cpp",
|
|
"$_tests/GpuRectanizerTest.cpp",
|
|
"$_tests/GpuSampleLocationsTest.cpp",
|
|
"$_tests/GradientTest.cpp",
|
|
"$_tests/GrAllocatorTest.cpp",
|
|
"$_tests/GrContextAbandonTest.cpp",
|
|
"$_tests/GrContextFactoryTest.cpp",
|
|
"$_tests/GrDrawTargetTest.cpp",
|
|
"$_tests/GrGLSLPrettyPrintTest.cpp",
|
|
"$_tests/GrMemoryPoolTest.cpp",
|
|
"$_tests/GrPorterDuffTest.cpp",
|
|
"$_tests/GrShapeTest.cpp",
|
|
"$_tests/GrSurfaceTest.cpp",
|
|
"$_tests/GrTextureMipMapInvalidationTest.cpp",
|
|
"$_tests/GrTRecorderTest.cpp",
|
|
"$_tests/HashTest.cpp",
|
|
"$_tests/HighContrastFilterTest.cpp",
|
|
"$_tests/HSVRoundTripTest.cpp",
|
|
"$_tests/image-bitmap.cpp",
|
|
"$_tests/ICCTest.cpp",
|
|
"$_tests/ImageCacheTest.cpp",
|
|
"$_tests/ImageFilterCacheTest.cpp",
|
|
"$_tests/ImageFilterTest.cpp",
|
|
"$_tests/ImageFrom565Bitmap.cpp",
|
|
"$_tests/ImageGeneratorTest.cpp",
|
|
"$_tests/ImageIsOpaqueTest.cpp",
|
|
"$_tests/ImageNewShaderTest.cpp",
|
|
"$_tests/ImageStorageTest.cpp",
|
|
"$_tests/ImageTest.cpp",
|
|
"$_tests/IndexedPngOverflowTest.cpp",
|
|
"$_tests/InfRectTest.cpp",
|
|
"$_tests/InsetConvexPolyTest.cpp",
|
|
"$_tests/InterpolatorTest.cpp",
|
|
"$_tests/IntTextureTest.cpp",
|
|
"$_tests/InvalidIndexedPngTest.cpp",
|
|
"$_tests/IsClosedSingleContourTest.cpp",
|
|
"$_tests/LayerDrawLooperTest.cpp",
|
|
"$_tests/LayerRasterizerTest.cpp",
|
|
"$_tests/LListTest.cpp",
|
|
"$_tests/LRUCacheTest.cpp",
|
|
"$_tests/MallocPixelRefTest.cpp",
|
|
"$_tests/MaskCacheTest.cpp",
|
|
"$_tests/MathTest.cpp",
|
|
"$_tests/Matrix44Test.cpp",
|
|
"$_tests/MatrixClipCollapseTest.cpp",
|
|
"$_tests/MatrixTest.cpp",
|
|
"$_tests/MD5Test.cpp",
|
|
"$_tests/MemoryTest.cpp",
|
|
"$_tests/MemsetTest.cpp",
|
|
"$_tests/MessageBusTest.cpp",
|
|
"$_tests/MetaDataTest.cpp",
|
|
"$_tests/MipMapTest.cpp",
|
|
"$_tests/OnceTest.cpp",
|
|
"$_tests/OSPathTest.cpp",
|
|
"$_tests/OverAlignedTest.cpp",
|
|
"$_tests/PackBitsTest.cpp",
|
|
"$_tests/PackedConfigsTextureTest.cpp",
|
|
"$_tests/PaintBreakTextTest.cpp",
|
|
"$_tests/PaintImageFilterTest.cpp",
|
|
"$_tests/PaintTest.cpp",
|
|
"$_tests/ParametricStageTest.cpp",
|
|
"$_tests/ParsePathTest.cpp",
|
|
"$_tests/PathCoverageTest.cpp",
|
|
"$_tests/PathMeasureTest.cpp",
|
|
"$_tests/PathTest.cpp",
|
|
"$_tests/PDFDeflateWStreamTest.cpp",
|
|
"$_tests/PDFDocumentTest.cpp",
|
|
"$_tests/PDFGlyphsToUnicodeTest.cpp",
|
|
"$_tests/PDFJpegEmbedTest.cpp",
|
|
"$_tests/PDFMetadataAttributeTest.cpp",
|
|
"$_tests/PDFOpaqueSrcModeToSrcOverTest.cpp",
|
|
"$_tests/PDFPrimitivesTest.cpp",
|
|
"$_tests/PreFlushCallbackTest.cpp",
|
|
"$_tests/PictureBBHTest.cpp",
|
|
"$_tests/PictureShaderTest.cpp",
|
|
"$_tests/PictureTest.cpp",
|
|
"$_tests/PipeTest.cpp",
|
|
"$_tests/PixelRefTest.cpp",
|
|
"$_tests/Point3Test.cpp",
|
|
"$_tests/PointTest.cpp",
|
|
"$_tests/PremulAlphaRoundTripTest.cpp",
|
|
"$_tests/PrimitiveProcessorTest.cpp",
|
|
"$_tests/ProcessorTest.cpp",
|
|
"$_tests/ProxyConversionTest.cpp",
|
|
"$_tests/ProxyRefTest.cpp",
|
|
"$_tests/ProxyTest.cpp",
|
|
"$_tests/QuickRejectTest.cpp",
|
|
"$_tests/RandomTest.cpp",
|
|
"$_tests/Reader32Test.cpp",
|
|
"$_tests/ReadPixelsTest.cpp",
|
|
"$_tests/ReadWriteAlphaTest.cpp",
|
|
"$_tests/RecordDrawTest.cpp",
|
|
"$_tests/RecorderTest.cpp",
|
|
"$_tests/RecordingXfermodeTest.cpp",
|
|
"$_tests/RecordOptsTest.cpp",
|
|
"$_tests/RecordPatternTest.cpp",
|
|
"$_tests/RecordTest.cpp",
|
|
"$_tests/RectangleTextureTest.cpp",
|
|
"$_tests/RectTest.cpp",
|
|
"$_tests/RefCntTest.cpp",
|
|
"$_tests/RefDictTest.cpp",
|
|
"$_tests/RegionTest.cpp",
|
|
"$_tests/RenderTargetContextTest.cpp",
|
|
"$_tests/ResourceCacheTest.cpp",
|
|
"$_tests/RoundRectTest.cpp",
|
|
"$_tests/RRectInPathTest.cpp",
|
|
"$_tests/RTreeTest.cpp",
|
|
"$_tests/ScalarTest.cpp",
|
|
"$_tests/ScaleToSidesTest.cpp",
|
|
"$_tests/SerializationTest.cpp",
|
|
"$_tests/ShaderOpacityTest.cpp",
|
|
"$_tests/ShaderTest.cpp",
|
|
"$_tests/ShadowUtilsTest.cpp",
|
|
"$_tests/SizeTest.cpp",
|
|
"$_tests/Sk4x4fTest.cpp",
|
|
"$_tests/SkBase64Test.cpp",
|
|
"$_tests/SkBlend_optsTest.cpp",
|
|
"$_tests/skbug5221.cpp",
|
|
"$_tests/skbug6389.cpp",
|
|
"$_tests/SkColor4fTest.cpp",
|
|
"$_tests/SkDOMTest.cpp",
|
|
"$_tests/SkFixed15Test.cpp",
|
|
"$_tests/SkImageTest.cpp",
|
|
"$_tests/SkLinearBitmapPipelineTest.cpp",
|
|
"$_tests/SkLiteDLTest.cpp",
|
|
"$_tests/SkNxTest.cpp",
|
|
"$_tests/SkPEGTest.cpp",
|
|
"$_tests/SkRasterPipelineTest.cpp",
|
|
"$_tests/SkResourceCacheTest.cpp",
|
|
"$_tests/SkSharedMutexTest.cpp",
|
|
"$_tests/SkSLErrorTest.cpp",
|
|
"$_tests/SkSLGLSLTest.cpp",
|
|
"$_tests/SkSLMemoryLayoutTest.cpp",
|
|
"$_tests/SortTest.cpp",
|
|
"$_tests/SpecialImageTest.cpp",
|
|
"$_tests/SpecialSurfaceTest.cpp",
|
|
"$_tests/SrcOverTest.cpp",
|
|
"$_tests/SRGBMipMapTest.cpp",
|
|
"$_tests/SRGBReadWritePixelsTest.cpp",
|
|
"$_tests/SRGBTest.cpp",
|
|
"$_tests/StreamBufferTest.cpp",
|
|
"$_tests/StreamTest.cpp",
|
|
"$_tests/StringTest.cpp",
|
|
"$_tests/StrokerTest.cpp",
|
|
"$_tests/StrokeTest.cpp",
|
|
"$_tests/SubsetPath.cpp",
|
|
"$_tests/SurfaceTest.cpp",
|
|
"$_tests/SVGDeviceTest.cpp",
|
|
"$_tests/SwizzlerTest.cpp",
|
|
"$_tests/TArrayTest.cpp",
|
|
"$_tests/TDPQueueTest.cpp",
|
|
"$_tests/TemplatesTest.cpp",
|
|
"$_tests/TessellatingPathRendererTests.cpp",
|
|
"$_tests/Test.cpp",
|
|
"$_tests/TestConfigParsing.cpp",
|
|
"$_tests/TestTest.cpp",
|
|
"$_tests/TestUtils.h",
|
|
"$_tests/TestUtils.cpp",
|
|
"$_tests/TextBlobCacheTest.cpp",
|
|
"$_tests/TextBlobTest.cpp",
|
|
"$_tests/Time.cpp",
|
|
"$_tests/TLSTest.cpp",
|
|
"$_tests/TopoSortTest.cpp",
|
|
"$_tests/TraceMemoryDumpTest.cpp",
|
|
"$_tests/TracingTest.cpp",
|
|
"$_tests/TypefaceTest.cpp",
|
|
"$_tests/UnicodeTest.cpp",
|
|
"$_tests/UtilsTest.cpp",
|
|
"$_tests/VerticesTest.cpp",
|
|
"$_tests/VkClearTests.cpp",
|
|
"$_tests/VkHeapTests.cpp",
|
|
"$_tests/VkUploadPixelsTests.cpp",
|
|
"$_tests/VkWrapTests.cpp",
|
|
"$_tests/WindowRectanglesTest.cpp",
|
|
"$_tests/WritePixelsTest.cpp",
|
|
"$_tests/Writer32Test.cpp",
|
|
"$_tests/YUVCacheTest.cpp",
|
|
"$_tests/YUVTest.cpp",
|
|
]
|
|
|
|
pathops_tests_sources = [
|
|
"$_tests/PathOpsAngleIdeas.cpp",
|
|
"$_tests/PathOpsAngleTest.cpp",
|
|
"$_tests/PathOpsBattles.cpp",
|
|
"$_tests/PathOpsBoundsTest.cpp",
|
|
"$_tests/PathOpsBuilderConicTest.cpp",
|
|
"$_tests/PathOpsBuilderTest.cpp",
|
|
"$_tests/PathOpsBuildUseTest.cpp",
|
|
"$_tests/PathOpsChalkboardTest.cpp",
|
|
"$_tests/PathOpsConicIntersectionTest.cpp",
|
|
"$_tests/PathOpsConicLineIntersectionTest.cpp",
|
|
"$_tests/PathOpsConicQuadIntersectionTest.cpp",
|
|
"$_tests/PathOpsCubicConicIntersectionTest.cpp",
|
|
"$_tests/PathOpsCubicIntersectionTest.cpp",
|
|
"$_tests/PathOpsCubicIntersectionTestData.cpp",
|
|
"$_tests/PathOpsCubicLineIntersectionIdeas.cpp",
|
|
"$_tests/PathOpsCubicLineIntersectionTest.cpp",
|
|
"$_tests/PathOpsCubicQuadIntersectionTest.cpp",
|
|
"$_tests/PathOpsCubicReduceOrderTest.cpp",
|
|
"$_tests/PathOpsDCubicTest.cpp",
|
|
"$_tests/PathOpsDebug.cpp",
|
|
"$_tests/PathOpsDLineTest.cpp",
|
|
"$_tests/PathOpsDPointTest.cpp",
|
|
"$_tests/PathOpsDRectTest.cpp",
|
|
"$_tests/PathOpsDVectorTest.cpp",
|
|
"$_tests/PathOpsExtendedTest.cpp",
|
|
"$_tests/PathOpsFuzz763Test.cpp",
|
|
"$_tests/PathOpsInverseTest.cpp",
|
|
"$_tests/PathOpsIssue3651.cpp",
|
|
"$_tests/PathOpsLineIntersectionTest.cpp",
|
|
"$_tests/PathOpsLineParametetersTest.cpp",
|
|
"$_tests/PathOpsOpCircleThreadedTest.cpp",
|
|
"$_tests/PathOpsOpCubicThreadedTest.cpp",
|
|
"$_tests/PathOpsOpLoopThreadedTest.cpp",
|
|
"$_tests/PathOpsOpRectThreadedTest.cpp",
|
|
"$_tests/PathOpsOpTest.cpp",
|
|
"$_tests/PathOpsQuadIntersectionTest.cpp",
|
|
"$_tests/PathOpsQuadIntersectionTestData.cpp",
|
|
"$_tests/PathOpsQuadLineIntersectionTest.cpp",
|
|
"$_tests/PathOpsQuadLineIntersectionThreadedTest.cpp",
|
|
"$_tests/PathOpsQuadReduceOrderTest.cpp",
|
|
"$_tests/PathOpsSimplifyDegenerateThreadedTest.cpp",
|
|
"$_tests/PathOpsSimplifyFailTest.cpp",
|
|
"$_tests/PathOpsSimplifyQuadralateralsThreadedTest.cpp",
|
|
"$_tests/PathOpsSimplifyQuadThreadedTest.cpp",
|
|
"$_tests/PathOpsSimplifyRectThreadedTest.cpp",
|
|
"$_tests/PathOpsSimplifyTest.cpp",
|
|
"$_tests/PathOpsSimplifyTrianglesThreadedTest.cpp",
|
|
"$_tests/PathOpsSkpTest.cpp",
|
|
"$_tests/PathOpsTestCommon.cpp",
|
|
"$_tests/PathOpsThreadedCommon.cpp",
|
|
"$_tests/PathOpsThreeWayTest.cpp",
|
|
"$_tests/PathOpsTigerTest.cpp",
|
|
"$_tests/PathOpsTightBoundsTest.cpp",
|
|
"$_tests/PathOpsTypesTest.cpp",
|
|
]
|