Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

libpng fails to convert several files that WIC can handle #140

Closed
svenclaesson opened this issue Nov 14, 2023 · 2 comments
Closed

libpng fails to convert several files that WIC can handle #140

svenclaesson opened this issue Nov 14, 2023 · 2 comments

Comments

@svenclaesson
Copy link

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

CodecManager.Configure(codecs =>
{
    codecs.UseLibpng();
});

bad adaptive filter value is likely the same as #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

@svenclaesson svenclaesson changed the title libpng throws fails to convert several files that WIC can handle libpng fails to convert several files that WIC can handle Nov 14, 2023
@saucecontrol
Copy link
Owner

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 NullReferenceExceptions appear to be related to invalid color space matadata in the images, so those should be any easy fix as well.

@saucecontrol
Copy link
Owner

saucecontrol commented Nov 23, 2023

Thanks again for reporting this and for the detail.

As of a073734 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants