Closed svenclaesson closed 8 months ago
Thanks for the report! I downloaded the Google test images myself but didn't run them all through yet. I expect we'll be able to get close to the WIC codec's behavior, but full parity is not necessarily achievable.
I think libpng
's hard error on invalid filter value is a mistake in particular, because at worst it would lead to incorrect pixel values. Its check is only able to determine whether the value is in the correct range, so it still has to be able to deal with the possibility the value is incorrect but in range. I will patch this in my libpng builds to be a soft error.
The NullReferenceException
s appear to be related to invalid color space matadata in the images, so those should be any easy fix as well.
Thanks again for reporting this and for the detail.
As of https://github.com/saucecontrol/PhotoSauce/commit/a073734279b58f2461cdf0410243ca555de5c112 the libpng
plugin decodes all but 4 of the files WIC does.
463d3570f92a6b6ecba0cc4fd9a7a384.png
has double PLTE
chunks. Chrome also fails to decode this.
7ce702ec69b7af26b3218d1278520bce.png
has an invalid IHDR
chunk. Chrome also fails to decode this.
a1d1aafb5bca660229f8e9fc65291eab.png
-- same as above.
b583e48e218193e4c287f033931a6314.png
has an invalid PLTE
chunk (too many colors). This one is recoverable, but not with the way libpng
is currently used. It will be taken care of in future.
I've attached a test project with various png images found here here MagicScalerPngTest.zip
When running this using WIC Successfully converted 191/254
When running with libpng
bad adaptive filter value is likely the same as https://github.com/saucecontrol/PhotoSauce/issues/139 but the others might be interesting to look into.
008b8bb75b8a487dc5aac86c9abb06fb.png Object reference not set to an instance of an object. 073c98872b81d1004d750f18a4b5f732.png Object reference not set to an instance of an object. 0b7d50ac449fd59eb3de00647636d0c9.png Object reference not set to an instance of an object. 138331052d7c6e4acebfaa92af314e12.png Object reference not set to an instance of an object. 13f665c09e4b03cdbe2fff3015ec8aa7.png Object reference not set to an instance of an object. 18288f761922f9b9b00e927eaeb9e707.png Libpng decoder failed. bad adaptive filter value 18bd8bf75e7a9b40b961dd501654ce0e.png Object reference not set to an instance of an object. 1ae14e57b7062597279134ff2eeb39c0.png Object reference not set to an instance of an object. 31e3bc3eb811cff582b5feee2494fed8.png Object reference not set to an instance of an object. 429104334d1fb6a58e17307883c17608.png Object reference not set to an instance of an object. 42ec8668adb5dbc6581393f463976510.png Object reference not set to an instance of an object. 4389427591c18bf36e748172640862c3.png Object reference not set to an instance of an object. 4f14b7aab3a41855378c5517342598b9.png Object reference not set to an instance of an object. 579294d4d8110fc64980dd72a5066780.png Object reference not set to an instance of an object. 586914b5d01d3889fb7bb5c44fe29771.png Libpng decoder failed. bad adaptive filter value 5beaadc10dfdbf61124e98fdf8a5c191.png Object reference not set to an instance of an object. 6399623892b45aa4901aa6e702c7a62d.png Object reference not set to an instance of an object. 8711007ea5e351755a80cba913d16a32.png Object reference not set to an instance of an object. 9032e447e32e09aef5b7de2fab42494d.png Object reference not set to an instance of an object. 94e1bdbb03c42581d8407602634636ea.png Object reference not set to an instance of an object. 9a3e0c7b687b526987e2270541002d47.png Libpng decoder failed. bad adaptive filter value 9bd8a9ed81c5a9190f74496197da7249.png Object reference not set to an instance of an object. a1d54c960686558901e320a52a967158.png Object reference not set to an instance of an object. b3ac9fdb7239f42c734921dfe790291b.png Object reference not set to an instance of an object. bd927c8547634cdbdd22af0afe818a9b.png Libpng decoder failed. bad adaptive filter value c-586914b5d01d3889fb7bb5c44fe29771.png Libpng decoder failed. bad adaptive filter value c-9032e447e32e09aef5b7de2fab42494d.png Object reference not set to an instance of an object. c-94e1bdbb03c42581d8407602634636ea.png Object reference not set to an instance of an object. c-9a3e0c7b687b526987e2270541002d47.png Libpng decoder failed. bad adaptive filter value c-c53911b0385c34a8204c30fdc14ea5cc.png Object reference not set to an instance of an object. c-d3ffec5786387c590721e674d705f16e.png Libpng decoder failed. bad adaptive filter value c-e585afb2ecf50c04eaf0dedb71602cb8.png Specified argument was out of the range of valid values. (Parameter 'length') c-m1-125cdc39e13ce7c237b7b4a9e1d8f21c.png Libpng decoder failed. bad adaptive filter value c-m1-19e0d1d0dfe97dca39e9d449c6b8b3d2.png Libpng decoder failed. Not enough image data c-m1-4bdd87fd0324f0a3d84d6905d17e1731.png Libpng decoder failed. bad adaptive filter value c-m1-559dcf17d281e285b7f09f943b9706de.png Libpng decoder failed. bad adaptive filter value c-m1-5e149c14dc7b7c16ff6bcedd1625ca31.png Libpng decoder failed. bad adaptive filter value c-m1-6593e140dba21ccb8c8724f8fe88fdb6.png Libpng decoder failed. bad adaptive filter value c-m1-6bfb149151f58d124d6fa76eaad75520.png Libpng decoder failed. Not enough image data c-m1-6e3914f26bcc8f9d004ffeac71656c01.png Libpng decoder failed. bad adaptive filter value c-m1-80e163ebface8b0d2fbf9823bca02936.png Libpng decoder failed. bad adaptive filter value c-m1-9a3e0c7b687b526987e2270541002d47.png Libpng decoder failed. bad adaptive filter value c-m1-a4842373fc20cc42b8e023a329761915.png Object reference not set to an instance of an object. c-m1-aded9dc1dc9361363ad0b426c2ff1846.png Libpng decoder failed. bad adaptive filter value c-m1-b977e74d9de1f6689fdd84c4e38830f5.png Libpng decoder failed. bad adaptive filter value c-m1-bfce28c0e44bc8d1824d48fbec5075e2.png Libpng decoder failed. bad adaptive filter value c-m1-c5a372c145ce25ce712959cd3b6df35e.png Libpng decoder failed. bad adaptive filter value c-m1-d87a07bdc461bf81e43447ca0620d71d.png Libpng decoder failed. bad adaptive filter value c-m1-fcac2d6a6a739e8ceb946ac99200d9f1.png Libpng decoder failed. bad adaptive filter value c-m2-0699098e769a2d80e60f33dbb3332b61.png Libpng decoder failed. bad adaptive filter value c-m2-272ae9468b7883e5cf61873a17271fb4.png Libpng decoder failed. bad adaptive filter value c-m2-559dcf17d281e285b7f09f943b9706de.png Libpng decoder failed. IDAT: invalid distance too far back c-m2-593d4b1a0b5d13b539c6c098dc5797ca.png Libpng decoder failed. bad adaptive filter value c-m2-66ac49ef3f48ac9482049e1ab57a53e9.png Libpng decoder failed. bad adaptive filter value c-m2-71915ab0b1cc7350091ef7073a312d16.png Libpng decoder failed. bad adaptive filter value c-m2-80e163ebface8b0d2fbf9823bca02936.png Libpng decoder failed. bad adaptive filter value c-m2-8f2b481b7fd9bd745e620b7c01a18df2.png Libpng decoder failed. bad adaptive filter value c-m2-96b70653ba3f8a83b7cfd48749bed8b1.png Libpng decoder failed. bad adaptive filter value c-m2-9a3e0c7b687b526987e2270541002d47.png Libpng decoder failed. bad adaptive filter value c-m2-a1f9d85a8243b884d40e74f656c55e75.png Libpng decoder failed. bad adaptive filter value c-m2-a46ce91d8975a017917156b8824f936e.png Libpng decoder failed. bad adaptive filter value c-m2-b977e74d9de1f6689fdd84c4e38830f5.png Libpng decoder failed. IDAT: invalid code -- missing end-of-block c-m2-fcac2d6a6a739e8ceb946ac99200d9f1.png Libpng decoder failed. bad adaptive filter value c-m3-593d4b1a0b5d13b539c6c098dc5797ca.png Libpng decoder failed. bad adaptive filter value c-m4-96b70653ba3f8a83b7cfd48749bed8b1.png Libpng decoder failed. bad adaptive filter value c-m5-a46ce91d8975a017917156b8824f936e.png Libpng decoder failed. bad adaptive filter value c-m6-a46ce91d8975a017917156b8824f936e.png Libpng decoder failed. IDAT: missing LZ dictionary c-m7-a46ce91d8975a017917156b8824f936e.png Libpng decoder failed. bad adaptive filter value c-m8-a46ce91d8975a017917156b8824f936e.png Libpng decoder failed. bad adaptive filter value c53911b0385c34a8204c30fdc14ea5cc.png Object reference not set to an instance of an object. c5c030bf52b9b2d8c45c88988fafff4f.png Object reference not set to an instance of an object. c636287a4d7cb1a36362f7f236564cef.png Object reference not set to an instance of an object. d3ffec5786387c590721e674d705f16e.png Libpng decoder failed. bad adaptive filter value dd18aac055d531e0e4ff8979458dbaa3.png Object reference not set to an instance of an object. e585afb2ecf50c04eaf0dedb71602cb8.png Specified argument was out of the range of valid values. (Parameter 'length') e76546768d4a8f2f4c39339345c7614c.png Object reference not set to an instance of an object. f6266c0e9c2f7db9fab0f84562f63b6c.png Object reference not set to an instance of an object. f757de9794666c3d14985210679bc98c.png Object reference not set to an instance of an object. m1-04c2707d63235dd5ab2c66ee98a36521.png Libpng decoder failed. bad adaptive filter value m1-125cdc39e13ce7c237b7b4a9e1d8f21c.png Libpng decoder failed. bad adaptive filter value m1-19e0d1d0dfe97dca39e9d449c6b8b3d2.png Libpng decoder failed. Not enough image data m1-1b5df699719c4a7cc8314ab9af139405.png Libpng decoder failed. bad adaptive filter value m1-272ae9468b7883e5cf61873a17271fb4.png Libpng decoder failed. bad adaptive filter value m1-4bdd87fd0324f0a3d84d6905d17e1731.png Libpng decoder failed. bad adaptive filter value m1-559dcf17d281e285b7f09f943b9706de.png Libpng decoder failed. bad adaptive filter value m1-5ae377bebf643e2e53ba7038103e48c4.png Libpng decoder failed. bad adaptive filter value m1-5e149c14dc7b7c16ff6bcedd1625ca31.png Libpng decoder failed. bad adaptive filter value m1-5efba06832cc674ae5d290ba7ebc2533.png Libpng decoder failed. bad adaptive filter value m1-6593e140dba21ccb8c8724f8fe88fdb6.png Libpng decoder failed. bad adaptive filter value m1-6bfb149151f58d124d6fa76eaad75520.png Libpng decoder failed. Not enough image data m1-6e3914f26bcc8f9d004ffeac71656c01.png Libpng decoder failed. bad adaptive filter value m1-80e163ebface8b0d2fbf9823bca02936.png Libpng decoder failed. bad adaptive filter value m1-814fcedc62fe4e43923c042ff1d6747f.png Libpng decoder failed. bad adaptive filter value m1-94f94e608d647b1b433f4d0ecc21e023.png Libpng decoder failed. bad adaptive filter value m1-96b70653ba3f8a83b7cfd48749bed8b1.png Libpng decoder failed. bad adaptive filter value m1-9a3e0c7b687b526987e2270541002d47.png Libpng decoder failed. bad adaptive filter value m1-9bec9d0461c0ef0f5faf16d0d4bdcc13.png Libpng decoder failed. bad adaptive filter value m1-9eb5b67f01da30f0e16062004c343e4a.png Libpng decoder failed. bad adaptive filter value m1-a46ce91d8975a017917156b8824f936e.png Libpng decoder failed. bad adaptive filter value m1-a4842373fc20cc42b8e023a329761915.png Object reference not set to an instance of an object. m1-aded9dc1dc9361363ad0b426c2ff1846.png Libpng decoder failed. bad adaptive filter value m1-b977e74d9de1f6689fdd84c4e38830f5.png Libpng decoder failed. bad adaptive filter value m1-bfce28c0e44bc8d1824d48fbec5075e2.png Libpng decoder failed. bad adaptive filter value m1-c5a372c145ce25ce712959cd3b6df35e.png Libpng decoder failed. bad adaptive filter value m1-d4b25a2b8b5fcec0a3e284579d539f35.png Libpng decoder failed. bad adaptive filter value m1-d87a07bdc461bf81e43447ca0620d71d.png Libpng decoder failed. bad adaptive filter value m1-fcac2d6a6a739e8ceb946ac99200d9f1.png Libpng decoder failed. bad adaptive filter value m2-0699098e769a2d80e60f33dbb3332b61.png Libpng decoder failed. bad adaptive filter value m2-272ae9468b7883e5cf61873a17271fb4.png Libpng decoder failed. bad adaptive filter value m2-559dcf17d281e285b7f09f943b9706de.png Libpng decoder failed. IDAT: invalid distance too far back m2-593d4b1a0b5d13b539c6c098dc5797ca.png Libpng decoder failed. bad adaptive filter value m2-66ac49ef3f48ac9482049e1ab57a53e9.png Libpng decoder failed. bad adaptive filter value m2-71915ab0b1cc7350091ef7073a312d16.png Libpng decoder failed. bad adaptive filter value m2-80e163ebface8b0d2fbf9823bca02936.png Libpng decoder failed. bad adaptive filter value m2-8f2b481b7fd9bd745e620b7c01a18df2.png Libpng decoder failed. bad adaptive filter value m2-94f94e608d647b1b433f4d0ecc21e023.png Libpng decoder failed. bad adaptive filter value m2-96b70653ba3f8a83b7cfd48749bed8b1.png Libpng decoder failed. bad adaptive filter value m2-9a3e0c7b687b526987e2270541002d47.png Libpng decoder failed. bad adaptive filter value m2-a1f9d85a8243b884d40e74f656c55e75.png Libpng decoder failed. bad adaptive filter value m2-a46ce91d8975a017917156b8824f936e.png Libpng decoder failed. bad adaptive filter value m2-b977e74d9de1f6689fdd84c4e38830f5.png Libpng decoder failed. IDAT: invalid code -- missing end-of-block m2-fcac2d6a6a739e8ceb946ac99200d9f1.png Libpng decoder failed. bad adaptive filter value m3-593d4b1a0b5d13b539c6c098dc5797ca.png Libpng decoder failed. bad adaptive filter value m3-71915ab0b1cc7350091ef7073a312d16.png Libpng decoder failed. bad adaptive filter value m3-96b70653ba3f8a83b7cfd48749bed8b1.png Libpng decoder failed. bad adaptive filter value m4-96b70653ba3f8a83b7cfd48749bed8b1.png Libpng decoder failed. bad adaptive filter value m5-a46ce91d8975a017917156b8824f936e.png Libpng decoder failed. bad adaptive filter value m6-a46ce91d8975a017917156b8824f936e.png Libpng decoder failed. IDAT: missing LZ dictionary m7-a46ce91d8975a017917156b8824f936e.png Libpng decoder failed. bad adaptive filter value m8-a46ce91d8975a017917156b8824f936e.png Libpng decoder failed. bad adaptive filter value Successfully converted 57/254