summaryrefslogtreecommitdiffstats
path: root/image/test/reftest/bmp
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
commit36d22d82aa202bb199967e9512281e9a53db42c9 (patch)
tree105e8c98ddea1c1e4784a60a5a6410fa416be2de /image/test/reftest/bmp
parentInitial commit. (diff)
downloadfirefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz
firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip
Adding upstream version 115.7.0esr.upstream/115.7.0esr
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'image/test/reftest/bmp')
-rw-r--r--image/test/reftest/bmp/1240629-1.bmpbin0 -> 68 bytes
-rw-r--r--image/test/reftest/bmp/1240629-2.bmpbin0 -> 68 bytes
-rw-r--r--image/test/reftest/bmp/bmp-1bpp/bmp-not-square-1bpp.bmpbin0 -> 130 bytes
-rw-r--r--image/test/reftest/bmp/bmp-1bpp/bmp-not-square-1bpp.pngbin0 -> 147 bytes
-rw-r--r--image/test/reftest/bmp/bmp-1bpp/bmp-size-15x15-1bpp.bmpbin0 -> 122 bytes
-rw-r--r--image/test/reftest/bmp/bmp-1bpp/bmp-size-15x15-1bpp.pngbin0 -> 220 bytes
-rw-r--r--image/test/reftest/bmp/bmp-1bpp/bmp-size-16x16-1bpp.bmpbin0 -> 126 bytes
-rw-r--r--image/test/reftest/bmp/bmp-1bpp/bmp-size-16x16-1bpp.pngbin0 -> 242 bytes
-rw-r--r--image/test/reftest/bmp/bmp-1bpp/bmp-size-17x17-1bpp.bmpbin0 -> 130 bytes
-rw-r--r--image/test/reftest/bmp/bmp-1bpp/bmp-size-17x17-1bpp.pngbin0 -> 247 bytes
-rw-r--r--image/test/reftest/bmp/bmp-1bpp/bmp-size-1x1-1bpp.bmpbin0 -> 66 bytes
-rw-r--r--image/test/reftest/bmp/bmp-1bpp/bmp-size-1x1-1bpp.icobin0 -> 78 bytes
-rw-r--r--image/test/reftest/bmp/bmp-1bpp/bmp-size-1x1-1bpp.pngbin0 -> 120 bytes
-rw-r--r--image/test/reftest/bmp/bmp-1bpp/bmp-size-2x2-1bpp.bmpbin0 -> 70 bytes
-rw-r--r--image/test/reftest/bmp/bmp-1bpp/bmp-size-2x2-1bpp.pngbin0 -> 126 bytes
-rw-r--r--image/test/reftest/bmp/bmp-1bpp/bmp-size-31x31-1bpp.bmpbin0 -> 186 bytes
-rw-r--r--image/test/reftest/bmp/bmp-1bpp/bmp-size-31x31-1bpp.pngbin0 -> 447 bytes
-rw-r--r--image/test/reftest/bmp/bmp-1bpp/bmp-size-32x32-1bpp.bmpbin0 -> 190 bytes
-rw-r--r--image/test/reftest/bmp/bmp-1bpp/bmp-size-32x32-1bpp.pngbin0 -> 455 bytes
-rw-r--r--image/test/reftest/bmp/bmp-1bpp/bmp-size-33x33-1bpp.bmpbin0 -> 326 bytes
-rw-r--r--image/test/reftest/bmp/bmp-1bpp/bmp-size-33x33-1bpp.pngbin0 -> 489 bytes
-rw-r--r--image/test/reftest/bmp/bmp-1bpp/bmp-size-3x3-1bpp.bmpbin0 -> 74 bytes
-rw-r--r--image/test/reftest/bmp/bmp-1bpp/bmp-size-3x3-1bpp.pngbin0 -> 132 bytes
-rw-r--r--image/test/reftest/bmp/bmp-1bpp/bmp-size-4x4-1bpp.bmpbin0 -> 78 bytes
-rw-r--r--image/test/reftest/bmp/bmp-1bpp/bmp-size-4x4-1bpp.pngbin0 -> 135 bytes
-rw-r--r--image/test/reftest/bmp/bmp-1bpp/bmp-size-5x5-1bpp.bmpbin0 -> 82 bytes
-rw-r--r--image/test/reftest/bmp/bmp-1bpp/bmp-size-5x5-1bpp.pngbin0 -> 146 bytes
-rw-r--r--image/test/reftest/bmp/bmp-1bpp/bmp-size-6x6-1bpp.bmpbin0 -> 86 bytes
-rw-r--r--image/test/reftest/bmp/bmp-1bpp/bmp-size-6x6-1bpp.pngbin0 -> 149 bytes
-rw-r--r--image/test/reftest/bmp/bmp-1bpp/bmp-size-7x7-1bpp.bmpbin0 -> 90 bytes
-rw-r--r--image/test/reftest/bmp/bmp-1bpp/bmp-size-7x7-1bpp.pngbin0 -> 156 bytes
-rw-r--r--image/test/reftest/bmp/bmp-1bpp/bmp-size-8x8-1bpp.bmpbin0 -> 94 bytes
-rw-r--r--image/test/reftest/bmp/bmp-1bpp/bmp-size-8x8-1bpp.pngbin0 -> 161 bytes
-rw-r--r--image/test/reftest/bmp/bmp-1bpp/bmp-size-9x9-1bpp.bmpbin0 -> 98 bytes
-rw-r--r--image/test/reftest/bmp/bmp-1bpp/bmp-size-9x9-1bpp.pngbin0 -> 171 bytes
-rw-r--r--image/test/reftest/bmp/bmp-1bpp/os2bmp-size-32x32-1bpp.bmpbin0 -> 160 bytes
-rw-r--r--image/test/reftest/bmp/bmp-1bpp/reftest.list21
-rw-r--r--image/test/reftest/bmp/bmp-1bpp/top-to-bottom-16x16-1bpp.bmpbin0 -> 126 bytes
-rw-r--r--image/test/reftest/bmp/bmp-24bpp/bmp-not-square-24bpp.bmpbin0 -> 802 bytes
-rw-r--r--image/test/reftest/bmp/bmp-24bpp/bmp-not-square-24bpp.pngbin0 -> 490 bytes
-rw-r--r--image/test/reftest/bmp/bmp-24bpp/bmp-size-15x15-24bpp.bmpbin0 -> 774 bytes
-rw-r--r--image/test/reftest/bmp/bmp-24bpp/bmp-size-15x15-24bpp.pngbin0 -> 809 bytes
-rw-r--r--image/test/reftest/bmp/bmp-24bpp/bmp-size-16x16-24bpp.bmpbin0 -> 822 bytes
-rw-r--r--image/test/reftest/bmp/bmp-24bpp/bmp-size-16x16-24bpp.pngbin0 -> 879 bytes
-rw-r--r--image/test/reftest/bmp/bmp-24bpp/bmp-size-17x17-24bpp.bmpbin0 -> 938 bytes
-rw-r--r--image/test/reftest/bmp/bmp-24bpp/bmp-size-17x17-24bpp.pngbin0 -> 1000 bytes
-rw-r--r--image/test/reftest/bmp/bmp-24bpp/bmp-size-1x1-24bpp.bmpbin0 -> 58 bytes
-rw-r--r--image/test/reftest/bmp/bmp-24bpp/bmp-size-1x1-24bpp.pngbin0 -> 70 bytes
-rw-r--r--image/test/reftest/bmp/bmp-24bpp/bmp-size-2x2-24bpp.bmpbin0 -> 70 bytes
-rw-r--r--image/test/reftest/bmp/bmp-24bpp/bmp-size-2x2-24bpp.pngbin0 -> 83 bytes
-rw-r--r--image/test/reftest/bmp/bmp-24bpp/bmp-size-31x31-24bpp.bmpbin0 -> 3030 bytes
-rw-r--r--image/test/reftest/bmp/bmp-24bpp/bmp-size-31x31-24bpp.pngbin0 -> 2936 bytes
-rw-r--r--image/test/reftest/bmp/bmp-24bpp/bmp-size-32x32-24bpp.bmpbin0 -> 3126 bytes
-rw-r--r--image/test/reftest/bmp/bmp-24bpp/bmp-size-32x32-24bpp.pngbin0 -> 3106 bytes
-rw-r--r--image/test/reftest/bmp/bmp-24bpp/bmp-size-33x33-24bpp.bmpbin0 -> 3354 bytes
-rw-r--r--image/test/reftest/bmp/bmp-24bpp/bmp-size-33x33-24bpp.pngbin0 -> 3303 bytes
-rw-r--r--image/test/reftest/bmp/bmp-24bpp/bmp-size-3x3-24bpp.bmpbin0 -> 90 bytes
-rw-r--r--image/test/reftest/bmp/bmp-24bpp/bmp-size-3x3-24bpp.pngbin0 -> 107 bytes
-rw-r--r--image/test/reftest/bmp/bmp-24bpp/bmp-size-4x4-24bpp.bmpbin0 -> 102 bytes
-rw-r--r--image/test/reftest/bmp/bmp-24bpp/bmp-size-4x4-24bpp.pngbin0 -> 136 bytes
-rw-r--r--image/test/reftest/bmp/bmp-24bpp/bmp-size-5x5-24bpp.bmpbin0 -> 134 bytes
-rw-r--r--image/test/reftest/bmp/bmp-24bpp/bmp-size-5x5-24bpp.pngbin0 -> 173 bytes
-rw-r--r--image/test/reftest/bmp/bmp-24bpp/bmp-size-6x6-24bpp.bmpbin0 -> 174 bytes
-rw-r--r--image/test/reftest/bmp/bmp-24bpp/bmp-size-6x6-24bpp.pngbin0 -> 218 bytes
-rw-r--r--image/test/reftest/bmp/bmp-24bpp/bmp-size-7x7-24bpp.bmpbin0 -> 222 bytes
-rw-r--r--image/test/reftest/bmp/bmp-24bpp/bmp-size-7x7-24bpp.pngbin0 -> 271 bytes
-rw-r--r--image/test/reftest/bmp/bmp-24bpp/bmp-size-8x8-24bpp.bmpbin0 -> 246 bytes
-rw-r--r--image/test/reftest/bmp/bmp-24bpp/bmp-size-8x8-24bpp.pngbin0 -> 313 bytes
-rw-r--r--image/test/reftest/bmp/bmp-24bpp/bmp-size-9x9-24bpp.bmpbin0 -> 306 bytes
-rw-r--r--image/test/reftest/bmp/bmp-24bpp/bmp-size-9x9-24bpp.pngbin0 -> 368 bytes
-rw-r--r--image/test/reftest/bmp/bmp-24bpp/os2bmp-size-32x32-24bpp.bmpbin0 -> 3098 bytes
-rw-r--r--image/test/reftest/bmp/bmp-24bpp/reftest.list21
-rw-r--r--image/test/reftest/bmp/bmp-24bpp/top-to-bottom-16x16-24bpp.bmpbin0 -> 822 bytes
-rw-r--r--image/test/reftest/bmp/bmp-4bpp/bmp-not-square-4bpp.bmpbin0 -> 254 bytes
-rw-r--r--image/test/reftest/bmp/bmp-4bpp/bmp-not-square-4bpp.pngbin0 -> 229 bytes
-rw-r--r--image/test/reftest/bmp/bmp-4bpp/bmp-size-15x15-4bpp.bmpbin0 -> 238 bytes
-rw-r--r--image/test/reftest/bmp/bmp-4bpp/bmp-size-15x15-4bpp.pngbin0 -> 304 bytes
-rw-r--r--image/test/reftest/bmp/bmp-4bpp/bmp-size-16x16-4bpp.bmpbin0 -> 246 bytes
-rw-r--r--image/test/reftest/bmp/bmp-4bpp/bmp-size-16x16-4bpp.pngbin0 -> 323 bytes
-rw-r--r--image/test/reftest/bmp/bmp-4bpp/bmp-size-17x17-4bpp.bmpbin0 -> 322 bytes
-rw-r--r--image/test/reftest/bmp/bmp-4bpp/bmp-size-17x17-4bpp.pngbin0 -> 337 bytes
-rw-r--r--image/test/reftest/bmp/bmp-4bpp/bmp-size-1x1-4bpp.bmpbin0 -> 122 bytes
-rw-r--r--image/test/reftest/bmp/bmp-4bpp/bmp-size-1x1-4bpp.pngbin0 -> 120 bytes
-rw-r--r--image/test/reftest/bmp/bmp-4bpp/bmp-size-2x2-4bpp.bmpbin0 -> 126 bytes
-rw-r--r--image/test/reftest/bmp/bmp-4bpp/bmp-size-2x2-4bpp.pngbin0 -> 128 bytes
-rw-r--r--image/test/reftest/bmp/bmp-4bpp/bmp-size-31x31-4bpp.bmpbin0 -> 614 bytes
-rw-r--r--image/test/reftest/bmp/bmp-4bpp/bmp-size-31x31-4bpp.pngbin0 -> 700 bytes
-rw-r--r--image/test/reftest/bmp/bmp-4bpp/bmp-size-32x32-4bpp.bmpbin0 -> 630 bytes
-rw-r--r--image/test/reftest/bmp/bmp-4bpp/bmp-size-32x32-4bpp.pngbin0 -> 763 bytes
-rw-r--r--image/test/reftest/bmp/bmp-4bpp/bmp-size-33x33-4bpp.bmpbin0 -> 778 bytes
-rw-r--r--image/test/reftest/bmp/bmp-4bpp/bmp-size-33x33-4bpp.pngbin0 -> 778 bytes
-rw-r--r--image/test/reftest/bmp/bmp-4bpp/bmp-size-3x3-4bpp.bmpbin0 -> 130 bytes
-rw-r--r--image/test/reftest/bmp/bmp-4bpp/bmp-size-3x3-4bpp.pngbin0 -> 139 bytes
-rw-r--r--image/test/reftest/bmp/bmp-4bpp/bmp-size-4x4-4bpp.bmpbin0 -> 134 bytes
-rw-r--r--image/test/reftest/bmp/bmp-4bpp/bmp-size-4x4-4bpp.pngbin0 -> 147 bytes
-rw-r--r--image/test/reftest/bmp/bmp-4bpp/bmp-size-5x5-4bpp.bmpbin0 -> 138 bytes
-rw-r--r--image/test/reftest/bmp/bmp-4bpp/bmp-size-5x5-4bpp.pngbin0 -> 156 bytes
-rw-r--r--image/test/reftest/bmp/bmp-4bpp/bmp-size-6x6-4bpp.bmpbin0 -> 142 bytes
-rw-r--r--image/test/reftest/bmp/bmp-4bpp/bmp-size-6x6-4bpp.pngbin0 -> 163 bytes
-rw-r--r--image/test/reftest/bmp/bmp-4bpp/bmp-size-7x7-4bpp.bmpbin0 -> 146 bytes
-rw-r--r--image/test/reftest/bmp/bmp-4bpp/bmp-size-7x7-4bpp.pngbin0 -> 172 bytes
-rw-r--r--image/test/reftest/bmp/bmp-4bpp/bmp-size-8x8-4bpp.bmpbin0 -> 150 bytes
-rw-r--r--image/test/reftest/bmp/bmp-4bpp/bmp-size-8x8-4bpp.pngbin0 -> 188 bytes
-rw-r--r--image/test/reftest/bmp/bmp-4bpp/bmp-size-9x9-4bpp.bmpbin0 -> 190 bytes
-rw-r--r--image/test/reftest/bmp/bmp-4bpp/bmp-size-9x9-4bpp.pngbin0 -> 198 bytes
-rw-r--r--image/test/reftest/bmp/bmp-4bpp/os2bmp-size-32x32-4bpp.bmpbin0 -> 586 bytes
-rw-r--r--image/test/reftest/bmp/bmp-4bpp/reftest.list24
-rw-r--r--image/test/reftest/bmp/bmp-4bpp/rle4-delta-320x240.bmpbin0 -> 3686 bytes
-rw-r--r--image/test/reftest/bmp/bmp-4bpp/rle4-delta-320x240.pngbin0 -> 886 bytes
-rw-r--r--image/test/reftest/bmp/bmp-4bpp/top-to-bottom-16x16-4bpp.bmpbin0 -> 246 bytes
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/bmp-extrapad-8bpp.pngbin0 -> 685 bytes
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/bmp-not-square-8bpp.bmpbin0 -> 1350 bytes
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/bmp-not-square-8bpp.pngbin0 -> 324 bytes
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/bmp-size-15x15-8bpp.bmpbin0 -> 1318 bytes
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/bmp-size-15x15-8bpp.pngbin0 -> 325 bytes
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/bmp-size-16x16-8bpp.bmpbin0 -> 1334 bytes
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/bmp-size-16x16-8bpp.pngbin0 -> 338 bytes
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/bmp-size-17x17-8bpp.bmpbin0 -> 1418 bytes
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/bmp-size-17x17-8bpp.pngbin0 -> 372 bytes
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/bmp-size-1x1-8bpp.bmpbin0 -> 1082 bytes
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/bmp-size-1x1-8bpp.pngbin0 -> 120 bytes
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/bmp-size-2x2-8bpp.bmpbin0 -> 1086 bytes
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/bmp-size-2x2-8bpp.pngbin0 -> 131 bytes
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/bmp-size-31x31-8bpp.bmpbin0 -> 2102 bytes
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/bmp-size-31x31-8bpp.pngbin0 -> 772 bytes
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/bmp-size-32x32-8bpp.bmpbin0 -> 2102 bytes
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/bmp-size-32x32-8bpp.pngbin0 -> 754 bytes
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/bmp-size-33x33-8bpp.bmpbin0 -> 2266 bytes
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/bmp-size-33x33-8bpp.pngbin0 -> 833 bytes
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/bmp-size-3x3-8bpp.bmpbin0 -> 1090 bytes
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/bmp-size-3x3-8bpp.pngbin0 -> 150 bytes
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/bmp-size-4x4-8bpp.bmpbin0 -> 1094 bytes
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/bmp-size-4x4-8bpp.pngbin0 -> 165 bytes
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/bmp-size-5x5-8bpp.bmpbin0 -> 1118 bytes
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/bmp-size-5x5-8bpp.pngbin0 -> 169 bytes
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/bmp-size-6x6-8bpp.bmpbin0 -> 1126 bytes
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/bmp-size-6x6-8bpp.pngbin0 -> 180 bytes
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/bmp-size-7x7-8bpp.bmpbin0 -> 1134 bytes
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/bmp-size-7x7-8bpp.pngbin0 -> 194 bytes
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/bmp-size-8x8-8bpp.bmpbin0 -> 1142 bytes
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/bmp-size-8x8-8bpp.pngbin0 -> 217 bytes
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/bmp-size-9x9-8bpp.bmpbin0 -> 1186 bytes
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/bmp-size-9x9-8bpp.pngbin0 -> 229 bytes
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/os2-bmp-size-32x32-8bpp.bmpbin0 -> 1818 bytes
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/reftest.list25
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/rle-bmp-extrapad-8bpp.bmpbin0 -> 1604 bytes
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/rle-bmp-not-square-8bpp.bmpbin0 -> 1384 bytes
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/rle-bmp-size-32x32-8bpp.bmpbin0 -> 1288 bytes
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/top-to-bottom-16x16-8bpp.bmpbin0 -> 1334 bytes
-rw-r--r--image/test/reftest/bmp/bmp-8bpp/top-to-bottom-rle-bmp-size-32x32-8bpp.bmpbin0 -> 1284 bytes
-rw-r--r--image/test/reftest/bmp/bmp-corrupted/invalid-bpp.bmpbin0 -> 58 bytes
-rw-r--r--image/test/reftest/bmp/bmp-corrupted/invalid-compression-BITFIELDS.bmpbin0 -> 78 bytes
-rw-r--r--image/test/reftest/bmp/bmp-corrupted/invalid-compression-RLE4.bmpbin0 -> 246 bytes
-rw-r--r--image/test/reftest/bmp/bmp-corrupted/invalid-compression-RLE8.bmpbin0 -> 246 bytes
-rw-r--r--image/test/reftest/bmp/bmp-corrupted/invalid-compression.bmpbin0 -> 822 bytes
-rw-r--r--image/test/reftest/bmp/bmp-corrupted/invalid-data-offset.bmpbin0 -> 3126 bytes
-rw-r--r--image/test/reftest/bmp/bmp-corrupted/invalid-signature.bmpbin0 -> 58 bytes
-rw-r--r--image/test/reftest/bmp/bmp-corrupted/invalid-truncated-metadata.bmpbin0 -> 54 bytes
-rw-r--r--image/test/reftest/bmp/bmp-corrupted/os2-invalid-bpp.bmpbin0 -> 30 bytes
-rw-r--r--image/test/reftest/bmp/bmp-corrupted/reftest.list21
-rw-r--r--image/test/reftest/bmp/bmp-corrupted/wrapper.html28
-rw-r--r--image/test/reftest/bmp/bmpsuite/COPYING.txt675
-rw-r--r--image/test/reftest/bmp/bmpsuite/README.mozilla40
-rw-r--r--image/test/reftest/bmp/bmpsuite/b/badbitcount.bmpbin0 -> 1086 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/b/badbitssize.bmpbin0 -> 1086 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/b/baddens1.bmpbin0 -> 1086 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/b/baddens2.bmpbin0 -> 1086 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/b/badfilesize.bmpbin0 -> 1086 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/b/badheadersize.bmpbin0 -> 1112 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/b/badpalettesize.bmpbin0 -> 9254 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/b/badplanes.bmpbin0 -> 1086 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/b/badrle.bmpbin0 -> 9212 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/b/badrle.pngbin0 -> 438 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/b/badrle4.bmpbin0 -> 4326 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/b/badrle4.pngbin0 -> 245 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/b/badrle4bis.bmpbin0 -> 4326 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/b/badrle4bis.pngbin0 -> 880 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/b/badrle4ter.bmpbin0 -> 4326 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/b/badrle4ter.pngbin0 -> 883 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/b/badrlebis.bmpbin0 -> 9212 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/b/badrlebis.pngbin0 -> 1626 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/b/badrleter.bmpbin0 -> 9212 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/b/badrleter.pngbin0 -> 1628 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/b/badwidth.bmpbin0 -> 1086 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/b/pal1.pngbin0 -> 586 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/b/pal8.pngbin0 -> 3772 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/b/pal8badindex.bmpbin0 -> 8650 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/b/pal8badindex.pngbin0 -> 1819 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/b/reallybig.bmpbin0 -> 24630 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/b/reftest.list110
-rw-r--r--image/test/reftest/bmp/bmpsuite/b/rgb16-880.bmpbin0 -> 16450 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/b/rgb16-880.pngbin0 -> 1029 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/b/rletopdown.bmpbin0 -> 8788 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/b/shortfile.bmpbin0 -> 273 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/b/shortfile.pngbin0 -> 399 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/b/wrapper.html28
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/pal1.bmpbin0 -> 1086 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/pal1.pngbin0 -> 586 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/pal1bg.bmpbin0 -> 1086 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/pal1bg.pngbin0 -> 604 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/pal1wb.bmpbin0 -> 1086 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/pal4.bmpbin0 -> 4198 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/pal4.pngbin0 -> 1428 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/pal4gs.bmpbin0 -> 4198 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/pal4gs.pngbin0 -> 2016 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/pal4rle.bmpbin0 -> 3836 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/pal8-0.bmpbin0 -> 9270 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/pal8.bmpbin0 -> 9254 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/pal8.pngbin0 -> 3772 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/pal8gs.bmpbin0 -> 9254 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/pal8gs.pngbin0 -> 9441 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/pal8nonsquare-e.pngbin0 -> 2513 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/pal8nonsquare.bmpbin0 -> 5158 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/pal8nonsquare.pngbin0 -> 2714 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/pal8os2.bmpbin0 -> 8986 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/pal8rle.bmpbin0 -> 8788 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/pal8topdown.bmpbin0 -> 9254 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/pal8v4.bmpbin0 -> 9322 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/pal8v5.bmpbin0 -> 9338 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/pal8w124.bmpbin0 -> 8626 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/pal8w124.pngbin0 -> 3585 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/pal8w125.bmpbin0 -> 8998 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/pal8w125.pngbin0 -> 3628 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/pal8w126.bmpbin0 -> 9126 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/pal8w126.pngbin0 -> 3714 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/reftest.list129
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/rgb16-565.bmpbin0 -> 16450 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/rgb16-565.pngbin0 -> 1297 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/rgb16-565pal.bmpbin0 -> 17474 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/rgb16.bmpbin0 -> 16438 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/rgb16.pngbin0 -> 1177 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/rgb16bfdef.bmpbin0 -> 16450 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/rgb24.bmpbin0 -> 24630 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/rgb24.pngbin0 -> 1072 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/rgb24pal.bmpbin0 -> 25654 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/rgb32.bmpbin0 -> 32566 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/rgb32bf.bmpbin0 -> 32578 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/g/rgb32bfdef.bmpbin0 -> 32578 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/pal1huff.bmpbin0 -> 2151 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/pal1p1.bmpbin0 -> 1082 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/pal1p1.pngbin0 -> 124 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/pal2.bmpbin0 -> 2118 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/pal2color.bmpbin0 -> 2118 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/pal4rlecut.bmpbin0 -> 3610 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/pal4rlecut.pngbin0 -> 1918 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/pal4rletrns.bmpbin0 -> 4326 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/pal4rletrns.pngbin0 -> 1465 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/pal8.pngbin0 -> 3772 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/pal8offs.bmpbin0 -> 9354 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/pal8os2-hs.bmpbin0 -> 8986 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/pal8os2-sz.bmpbin0 -> 8986 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/pal8os2sp.bmpbin0 -> 8974 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/pal8os2v2-16.bmpbin0 -> 9246 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/pal8os2v2-40sz.bmpbin0 -> 9254 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/pal8os2v2-sz.bmpbin0 -> 9278 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/pal8os2v2.bmpbin0 -> 9278 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/pal8oversizepal.bmpbin0 -> 9446 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/pal8rlecut.bmpbin0 -> 7980 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/pal8rlecut.pngbin0 -> 3524 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/pal8rletrns.bmpbin0 -> 9212 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/pal8rletrns.pngbin0 -> 3793 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/reftest.list251
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/rgb16-231.bmpbin0 -> 16450 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/rgb16-231.pngbin0 -> 2643 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/rgb16-3103.bmpbin0 -> 16450 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/rgb16-3103.pngbin0 -> 3347 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/rgb16.pngbin0 -> 1177 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/rgb16faketrns.bmpbin0 -> 16438 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/rgb24.pngbin0 -> 1072 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/rgb24jpeg.bmpbin0 -> 2457 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/rgb24largepal.bmpbin0 -> 25830 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/rgb24lprof.bmpbin0 -> 24743 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/rgb24png.bmpbin0 -> 1210 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/rgb24prof.bmpbin0 -> 27782 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/rgb24prof2.bmpbin0 -> 25254 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/rgb24rle24.bmpbin0 -> 21432 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/rgb32-111110.bmpbin0 -> 32578 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/rgb32-7187.bmpbin0 -> 32578 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/rgb32-7187.pngbin0 -> 2136 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/rgb32-xbgr.bmpbin0 -> 32650 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/rgb32fakealpha.bmpbin0 -> 32566 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/rgb32h52.bmpbin0 -> 32578 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/rgba16-1924.bmpbin0 -> 16522 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/rgba16-1924.pngbin0 -> 2811 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/rgba16-4444.bmpbin0 -> 16522 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/rgba16-4444.pngbin0 -> 1093 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/rgba16-5551.bmpbin0 -> 16522 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/rgba16-5551.pngbin0 -> 1226 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/rgba32-1.bmpbin0 -> 32650 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/rgba32-1010102.bmpbin0 -> 32650 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/rgba32-1010102.pngbin0 -> 1253 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/rgba32-2.bmpbin0 -> 32650 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/rgba32-61754.bmpbin0 -> 32650 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/rgba32-61754.pngbin0 -> 2483 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/rgba32-81284.bmpbin0 -> 32650 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/rgba32-81284.pngbin0 -> 2182 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/rgba32.pngbin0 -> 1229 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/rgba32abf.bmpbin0 -> 32582 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/rgba32h56.bmpbin0 -> 32582 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/q/wrapper.html28
-rw-r--r--image/test/reftest/bmp/bmpsuite/reftest.list8
-rw-r--r--image/test/reftest/bmp/bmpsuite/x/ba-bm.bmpbin0 -> 9000 bytes
-rw-r--r--image/test/reftest/bmp/bmpsuite/x/reftest.list10
-rw-r--r--image/test/reftest/bmp/bmpsuite/x/wrapper.html28
-rw-r--r--image/test/reftest/bmp/reftest.list16
305 files changed, 1463 insertions, 0 deletions
diff --git a/image/test/reftest/bmp/1240629-1.bmp b/image/test/reftest/bmp/1240629-1.bmp
new file mode 100644
index 0000000000..604d248e74
--- /dev/null
+++ b/image/test/reftest/bmp/1240629-1.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/1240629-2.bmp b/image/test/reftest/bmp/1240629-2.bmp
new file mode 100644
index 0000000000..e4fe80d595
--- /dev/null
+++ b/image/test/reftest/bmp/1240629-2.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-1bpp/bmp-not-square-1bpp.bmp b/image/test/reftest/bmp/bmp-1bpp/bmp-not-square-1bpp.bmp
new file mode 100644
index 0000000000..302e0c7120
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-1bpp/bmp-not-square-1bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-1bpp/bmp-not-square-1bpp.png b/image/test/reftest/bmp/bmp-1bpp/bmp-not-square-1bpp.png
new file mode 100644
index 0000000000..f9318693db
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-1bpp/bmp-not-square-1bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-1bpp/bmp-size-15x15-1bpp.bmp b/image/test/reftest/bmp/bmp-1bpp/bmp-size-15x15-1bpp.bmp
new file mode 100644
index 0000000000..e769ff864c
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-1bpp/bmp-size-15x15-1bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-1bpp/bmp-size-15x15-1bpp.png b/image/test/reftest/bmp/bmp-1bpp/bmp-size-15x15-1bpp.png
new file mode 100644
index 0000000000..956c78ece6
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-1bpp/bmp-size-15x15-1bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-1bpp/bmp-size-16x16-1bpp.bmp b/image/test/reftest/bmp/bmp-1bpp/bmp-size-16x16-1bpp.bmp
new file mode 100644
index 0000000000..ff012d98c5
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-1bpp/bmp-size-16x16-1bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-1bpp/bmp-size-16x16-1bpp.png b/image/test/reftest/bmp/bmp-1bpp/bmp-size-16x16-1bpp.png
new file mode 100644
index 0000000000..90088351fa
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-1bpp/bmp-size-16x16-1bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-1bpp/bmp-size-17x17-1bpp.bmp b/image/test/reftest/bmp/bmp-1bpp/bmp-size-17x17-1bpp.bmp
new file mode 100644
index 0000000000..86f56476e9
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-1bpp/bmp-size-17x17-1bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-1bpp/bmp-size-17x17-1bpp.png b/image/test/reftest/bmp/bmp-1bpp/bmp-size-17x17-1bpp.png
new file mode 100644
index 0000000000..9a294696c4
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-1bpp/bmp-size-17x17-1bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-1bpp/bmp-size-1x1-1bpp.bmp b/image/test/reftest/bmp/bmp-1bpp/bmp-size-1x1-1bpp.bmp
new file mode 100644
index 0000000000..0f98654d84
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-1bpp/bmp-size-1x1-1bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-1bpp/bmp-size-1x1-1bpp.ico b/image/test/reftest/bmp/bmp-1bpp/bmp-size-1x1-1bpp.ico
new file mode 100644
index 0000000000..5af8bef61a
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-1bpp/bmp-size-1x1-1bpp.ico
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-1bpp/bmp-size-1x1-1bpp.png b/image/test/reftest/bmp/bmp-1bpp/bmp-size-1x1-1bpp.png
new file mode 100644
index 0000000000..7a07a124ea
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-1bpp/bmp-size-1x1-1bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-1bpp/bmp-size-2x2-1bpp.bmp b/image/test/reftest/bmp/bmp-1bpp/bmp-size-2x2-1bpp.bmp
new file mode 100644
index 0000000000..5544c6437a
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-1bpp/bmp-size-2x2-1bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-1bpp/bmp-size-2x2-1bpp.png b/image/test/reftest/bmp/bmp-1bpp/bmp-size-2x2-1bpp.png
new file mode 100644
index 0000000000..3b09f80769
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-1bpp/bmp-size-2x2-1bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-1bpp/bmp-size-31x31-1bpp.bmp b/image/test/reftest/bmp/bmp-1bpp/bmp-size-31x31-1bpp.bmp
new file mode 100644
index 0000000000..8afcc56cc4
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-1bpp/bmp-size-31x31-1bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-1bpp/bmp-size-31x31-1bpp.png b/image/test/reftest/bmp/bmp-1bpp/bmp-size-31x31-1bpp.png
new file mode 100644
index 0000000000..d1fe6ddeee
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-1bpp/bmp-size-31x31-1bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-1bpp/bmp-size-32x32-1bpp.bmp b/image/test/reftest/bmp/bmp-1bpp/bmp-size-32x32-1bpp.bmp
new file mode 100644
index 0000000000..255e5526c7
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-1bpp/bmp-size-32x32-1bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-1bpp/bmp-size-32x32-1bpp.png b/image/test/reftest/bmp/bmp-1bpp/bmp-size-32x32-1bpp.png
new file mode 100644
index 0000000000..078d3dc5d0
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-1bpp/bmp-size-32x32-1bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-1bpp/bmp-size-33x33-1bpp.bmp b/image/test/reftest/bmp/bmp-1bpp/bmp-size-33x33-1bpp.bmp
new file mode 100644
index 0000000000..6d752a2e1d
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-1bpp/bmp-size-33x33-1bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-1bpp/bmp-size-33x33-1bpp.png b/image/test/reftest/bmp/bmp-1bpp/bmp-size-33x33-1bpp.png
new file mode 100644
index 0000000000..e64e12b2aa
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-1bpp/bmp-size-33x33-1bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-1bpp/bmp-size-3x3-1bpp.bmp b/image/test/reftest/bmp/bmp-1bpp/bmp-size-3x3-1bpp.bmp
new file mode 100644
index 0000000000..d4f885687d
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-1bpp/bmp-size-3x3-1bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-1bpp/bmp-size-3x3-1bpp.png b/image/test/reftest/bmp/bmp-1bpp/bmp-size-3x3-1bpp.png
new file mode 100644
index 0000000000..b8519a8749
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-1bpp/bmp-size-3x3-1bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-1bpp/bmp-size-4x4-1bpp.bmp b/image/test/reftest/bmp/bmp-1bpp/bmp-size-4x4-1bpp.bmp
new file mode 100644
index 0000000000..c0b9128feb
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-1bpp/bmp-size-4x4-1bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-1bpp/bmp-size-4x4-1bpp.png b/image/test/reftest/bmp/bmp-1bpp/bmp-size-4x4-1bpp.png
new file mode 100644
index 0000000000..3977b54548
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-1bpp/bmp-size-4x4-1bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-1bpp/bmp-size-5x5-1bpp.bmp b/image/test/reftest/bmp/bmp-1bpp/bmp-size-5x5-1bpp.bmp
new file mode 100644
index 0000000000..c02b2288d7
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-1bpp/bmp-size-5x5-1bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-1bpp/bmp-size-5x5-1bpp.png b/image/test/reftest/bmp/bmp-1bpp/bmp-size-5x5-1bpp.png
new file mode 100644
index 0000000000..caa9246b67
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-1bpp/bmp-size-5x5-1bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-1bpp/bmp-size-6x6-1bpp.bmp b/image/test/reftest/bmp/bmp-1bpp/bmp-size-6x6-1bpp.bmp
new file mode 100644
index 0000000000..64415c6ecb
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-1bpp/bmp-size-6x6-1bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-1bpp/bmp-size-6x6-1bpp.png b/image/test/reftest/bmp/bmp-1bpp/bmp-size-6x6-1bpp.png
new file mode 100644
index 0000000000..30e1b0249d
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-1bpp/bmp-size-6x6-1bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-1bpp/bmp-size-7x7-1bpp.bmp b/image/test/reftest/bmp/bmp-1bpp/bmp-size-7x7-1bpp.bmp
new file mode 100644
index 0000000000..d8e867a0d8
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-1bpp/bmp-size-7x7-1bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-1bpp/bmp-size-7x7-1bpp.png b/image/test/reftest/bmp/bmp-1bpp/bmp-size-7x7-1bpp.png
new file mode 100644
index 0000000000..9dbaae84cb
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-1bpp/bmp-size-7x7-1bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-1bpp/bmp-size-8x8-1bpp.bmp b/image/test/reftest/bmp/bmp-1bpp/bmp-size-8x8-1bpp.bmp
new file mode 100644
index 0000000000..207e84f80e
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-1bpp/bmp-size-8x8-1bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-1bpp/bmp-size-8x8-1bpp.png b/image/test/reftest/bmp/bmp-1bpp/bmp-size-8x8-1bpp.png
new file mode 100644
index 0000000000..2201388408
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-1bpp/bmp-size-8x8-1bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-1bpp/bmp-size-9x9-1bpp.bmp b/image/test/reftest/bmp/bmp-1bpp/bmp-size-9x9-1bpp.bmp
new file mode 100644
index 0000000000..871eb7c0f3
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-1bpp/bmp-size-9x9-1bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-1bpp/bmp-size-9x9-1bpp.png b/image/test/reftest/bmp/bmp-1bpp/bmp-size-9x9-1bpp.png
new file mode 100644
index 0000000000..7fe1b548b8
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-1bpp/bmp-size-9x9-1bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-1bpp/os2bmp-size-32x32-1bpp.bmp b/image/test/reftest/bmp/bmp-1bpp/os2bmp-size-32x32-1bpp.bmp
new file mode 100644
index 0000000000..32bfc5e8f9
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-1bpp/os2bmp-size-32x32-1bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-1bpp/reftest.list b/image/test/reftest/bmp/bmp-1bpp/reftest.list
new file mode 100644
index 0000000000..15274c2bc8
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-1bpp/reftest.list
@@ -0,0 +1,21 @@
+# BMP 1BPP tests
+
+# Images of various sizes
+== bmp-size-1x1-1bpp.bmp bmp-size-1x1-1bpp.png
+== bmp-size-2x2-1bpp.bmp bmp-size-2x2-1bpp.png
+== bmp-size-3x3-1bpp.bmp bmp-size-3x3-1bpp.png
+== bmp-size-4x4-1bpp.bmp bmp-size-4x4-1bpp.png
+== bmp-size-5x5-1bpp.bmp bmp-size-5x5-1bpp.png
+== bmp-size-6x6-1bpp.bmp bmp-size-6x6-1bpp.png
+== bmp-size-7x7-1bpp.bmp bmp-size-7x7-1bpp.png
+== bmp-size-8x8-1bpp.bmp bmp-size-8x8-1bpp.png
+== bmp-size-9x9-1bpp.bmp bmp-size-9x9-1bpp.png
+== bmp-size-15x15-1bpp.bmp bmp-size-15x15-1bpp.png
+== bmp-size-16x16-1bpp.bmp bmp-size-16x16-1bpp.png
+== bmp-size-17x17-1bpp.bmp bmp-size-17x17-1bpp.png
+== bmp-size-31x31-1bpp.bmp bmp-size-31x31-1bpp.png
+== bmp-size-32x32-1bpp.bmp bmp-size-32x32-1bpp.png
+== bmp-size-33x33-1bpp.bmp bmp-size-33x33-1bpp.png
+== bmp-not-square-1bpp.bmp bmp-not-square-1bpp.png
+== os2bmp-size-32x32-1bpp.bmp bmp-size-32x32-1bpp.png
+== top-to-bottom-16x16-1bpp.bmp bmp-size-16x16-1bpp.png
diff --git a/image/test/reftest/bmp/bmp-1bpp/top-to-bottom-16x16-1bpp.bmp b/image/test/reftest/bmp/bmp-1bpp/top-to-bottom-16x16-1bpp.bmp
new file mode 100644
index 0000000000..8633ef2aaa
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-1bpp/top-to-bottom-16x16-1bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-24bpp/bmp-not-square-24bpp.bmp b/image/test/reftest/bmp/bmp-24bpp/bmp-not-square-24bpp.bmp
new file mode 100644
index 0000000000..9d1f4de2cd
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-24bpp/bmp-not-square-24bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-24bpp/bmp-not-square-24bpp.png b/image/test/reftest/bmp/bmp-24bpp/bmp-not-square-24bpp.png
new file mode 100644
index 0000000000..9b0d160815
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-24bpp/bmp-not-square-24bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-24bpp/bmp-size-15x15-24bpp.bmp b/image/test/reftest/bmp/bmp-24bpp/bmp-size-15x15-24bpp.bmp
new file mode 100644
index 0000000000..ba029510b3
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-24bpp/bmp-size-15x15-24bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-24bpp/bmp-size-15x15-24bpp.png b/image/test/reftest/bmp/bmp-24bpp/bmp-size-15x15-24bpp.png
new file mode 100644
index 0000000000..e1287430d0
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-24bpp/bmp-size-15x15-24bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-24bpp/bmp-size-16x16-24bpp.bmp b/image/test/reftest/bmp/bmp-24bpp/bmp-size-16x16-24bpp.bmp
new file mode 100644
index 0000000000..f35d706692
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-24bpp/bmp-size-16x16-24bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-24bpp/bmp-size-16x16-24bpp.png b/image/test/reftest/bmp/bmp-24bpp/bmp-size-16x16-24bpp.png
new file mode 100644
index 0000000000..c04869e728
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-24bpp/bmp-size-16x16-24bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-24bpp/bmp-size-17x17-24bpp.bmp b/image/test/reftest/bmp/bmp-24bpp/bmp-size-17x17-24bpp.bmp
new file mode 100644
index 0000000000..fc576c4980
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-24bpp/bmp-size-17x17-24bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-24bpp/bmp-size-17x17-24bpp.png b/image/test/reftest/bmp/bmp-24bpp/bmp-size-17x17-24bpp.png
new file mode 100644
index 0000000000..00fb8e4f37
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-24bpp/bmp-size-17x17-24bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-24bpp/bmp-size-1x1-24bpp.bmp b/image/test/reftest/bmp/bmp-24bpp/bmp-size-1x1-24bpp.bmp
new file mode 100644
index 0000000000..db790d50c0
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-24bpp/bmp-size-1x1-24bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-24bpp/bmp-size-1x1-24bpp.png b/image/test/reftest/bmp/bmp-24bpp/bmp-size-1x1-24bpp.png
new file mode 100644
index 0000000000..c05f5fef89
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-24bpp/bmp-size-1x1-24bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-24bpp/bmp-size-2x2-24bpp.bmp b/image/test/reftest/bmp/bmp-24bpp/bmp-size-2x2-24bpp.bmp
new file mode 100644
index 0000000000..19bff3d010
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-24bpp/bmp-size-2x2-24bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-24bpp/bmp-size-2x2-24bpp.png b/image/test/reftest/bmp/bmp-24bpp/bmp-size-2x2-24bpp.png
new file mode 100644
index 0000000000..e512d3f9b4
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-24bpp/bmp-size-2x2-24bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-24bpp/bmp-size-31x31-24bpp.bmp b/image/test/reftest/bmp/bmp-24bpp/bmp-size-31x31-24bpp.bmp
new file mode 100644
index 0000000000..da11048cb0
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-24bpp/bmp-size-31x31-24bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-24bpp/bmp-size-31x31-24bpp.png b/image/test/reftest/bmp/bmp-24bpp/bmp-size-31x31-24bpp.png
new file mode 100644
index 0000000000..e4a8642514
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-24bpp/bmp-size-31x31-24bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-24bpp/bmp-size-32x32-24bpp.bmp b/image/test/reftest/bmp/bmp-24bpp/bmp-size-32x32-24bpp.bmp
new file mode 100644
index 0000000000..e1631e5fdb
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-24bpp/bmp-size-32x32-24bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-24bpp/bmp-size-32x32-24bpp.png b/image/test/reftest/bmp/bmp-24bpp/bmp-size-32x32-24bpp.png
new file mode 100644
index 0000000000..3a6fbe8ee9
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-24bpp/bmp-size-32x32-24bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-24bpp/bmp-size-33x33-24bpp.bmp b/image/test/reftest/bmp/bmp-24bpp/bmp-size-33x33-24bpp.bmp
new file mode 100644
index 0000000000..d228cf0635
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-24bpp/bmp-size-33x33-24bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-24bpp/bmp-size-33x33-24bpp.png b/image/test/reftest/bmp/bmp-24bpp/bmp-size-33x33-24bpp.png
new file mode 100644
index 0000000000..72ef7eb636
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-24bpp/bmp-size-33x33-24bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-24bpp/bmp-size-3x3-24bpp.bmp b/image/test/reftest/bmp/bmp-24bpp/bmp-size-3x3-24bpp.bmp
new file mode 100644
index 0000000000..f353f9b6d3
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-24bpp/bmp-size-3x3-24bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-24bpp/bmp-size-3x3-24bpp.png b/image/test/reftest/bmp/bmp-24bpp/bmp-size-3x3-24bpp.png
new file mode 100644
index 0000000000..cb42ec4f87
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-24bpp/bmp-size-3x3-24bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-24bpp/bmp-size-4x4-24bpp.bmp b/image/test/reftest/bmp/bmp-24bpp/bmp-size-4x4-24bpp.bmp
new file mode 100644
index 0000000000..2373435f48
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-24bpp/bmp-size-4x4-24bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-24bpp/bmp-size-4x4-24bpp.png b/image/test/reftest/bmp/bmp-24bpp/bmp-size-4x4-24bpp.png
new file mode 100644
index 0000000000..e6afafd89a
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-24bpp/bmp-size-4x4-24bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-24bpp/bmp-size-5x5-24bpp.bmp b/image/test/reftest/bmp/bmp-24bpp/bmp-size-5x5-24bpp.bmp
new file mode 100644
index 0000000000..a3016fc1ab
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-24bpp/bmp-size-5x5-24bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-24bpp/bmp-size-5x5-24bpp.png b/image/test/reftest/bmp/bmp-24bpp/bmp-size-5x5-24bpp.png
new file mode 100644
index 0000000000..a844aff76d
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-24bpp/bmp-size-5x5-24bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-24bpp/bmp-size-6x6-24bpp.bmp b/image/test/reftest/bmp/bmp-24bpp/bmp-size-6x6-24bpp.bmp
new file mode 100644
index 0000000000..cba1d62cc7
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-24bpp/bmp-size-6x6-24bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-24bpp/bmp-size-6x6-24bpp.png b/image/test/reftest/bmp/bmp-24bpp/bmp-size-6x6-24bpp.png
new file mode 100644
index 0000000000..415c2d9c6a
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-24bpp/bmp-size-6x6-24bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-24bpp/bmp-size-7x7-24bpp.bmp b/image/test/reftest/bmp/bmp-24bpp/bmp-size-7x7-24bpp.bmp
new file mode 100644
index 0000000000..87cd419b40
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-24bpp/bmp-size-7x7-24bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-24bpp/bmp-size-7x7-24bpp.png b/image/test/reftest/bmp/bmp-24bpp/bmp-size-7x7-24bpp.png
new file mode 100644
index 0000000000..ab2f892747
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-24bpp/bmp-size-7x7-24bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-24bpp/bmp-size-8x8-24bpp.bmp b/image/test/reftest/bmp/bmp-24bpp/bmp-size-8x8-24bpp.bmp
new file mode 100644
index 0000000000..b6f108a044
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-24bpp/bmp-size-8x8-24bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-24bpp/bmp-size-8x8-24bpp.png b/image/test/reftest/bmp/bmp-24bpp/bmp-size-8x8-24bpp.png
new file mode 100644
index 0000000000..fe2ff40a1d
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-24bpp/bmp-size-8x8-24bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-24bpp/bmp-size-9x9-24bpp.bmp b/image/test/reftest/bmp/bmp-24bpp/bmp-size-9x9-24bpp.bmp
new file mode 100644
index 0000000000..8140b1905b
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-24bpp/bmp-size-9x9-24bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-24bpp/bmp-size-9x9-24bpp.png b/image/test/reftest/bmp/bmp-24bpp/bmp-size-9x9-24bpp.png
new file mode 100644
index 0000000000..18ab4b25de
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-24bpp/bmp-size-9x9-24bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-24bpp/os2bmp-size-32x32-24bpp.bmp b/image/test/reftest/bmp/bmp-24bpp/os2bmp-size-32x32-24bpp.bmp
new file mode 100644
index 0000000000..b75ae62ca8
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-24bpp/os2bmp-size-32x32-24bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-24bpp/reftest.list b/image/test/reftest/bmp/bmp-24bpp/reftest.list
new file mode 100644
index 0000000000..83ec17563b
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-24bpp/reftest.list
@@ -0,0 +1,21 @@
+# BMP 24BPP tests
+
+# Images of various sizes
+== bmp-size-1x1-24bpp.bmp bmp-size-1x1-24bpp.png
+== bmp-size-2x2-24bpp.bmp bmp-size-2x2-24bpp.png
+== bmp-size-3x3-24bpp.bmp bmp-size-3x3-24bpp.png
+== bmp-size-4x4-24bpp.bmp bmp-size-4x4-24bpp.png
+== bmp-size-5x5-24bpp.bmp bmp-size-5x5-24bpp.png
+== bmp-size-6x6-24bpp.bmp bmp-size-6x6-24bpp.png
+== bmp-size-7x7-24bpp.bmp bmp-size-7x7-24bpp.png
+== bmp-size-8x8-24bpp.bmp bmp-size-8x8-24bpp.png
+== bmp-size-9x9-24bpp.bmp bmp-size-9x9-24bpp.png
+== bmp-size-15x15-24bpp.bmp bmp-size-15x15-24bpp.png
+== bmp-size-16x16-24bpp.bmp bmp-size-16x16-24bpp.png
+== bmp-size-17x17-24bpp.bmp bmp-size-17x17-24bpp.png
+== bmp-size-31x31-24bpp.bmp bmp-size-31x31-24bpp.png
+== bmp-size-32x32-24bpp.bmp bmp-size-32x32-24bpp.png
+== bmp-size-33x33-24bpp.bmp bmp-size-33x33-24bpp.png
+== bmp-not-square-24bpp.bmp bmp-not-square-24bpp.png
+== os2bmp-size-32x32-24bpp.bmp bmp-size-32x32-24bpp.png
+== top-to-bottom-16x16-24bpp.bmp bmp-size-16x16-24bpp.png
diff --git a/image/test/reftest/bmp/bmp-24bpp/top-to-bottom-16x16-24bpp.bmp b/image/test/reftest/bmp/bmp-24bpp/top-to-bottom-16x16-24bpp.bmp
new file mode 100644
index 0000000000..bd18f85d48
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-24bpp/top-to-bottom-16x16-24bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-4bpp/bmp-not-square-4bpp.bmp b/image/test/reftest/bmp/bmp-4bpp/bmp-not-square-4bpp.bmp
new file mode 100644
index 0000000000..f63dd81bde
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-4bpp/bmp-not-square-4bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-4bpp/bmp-not-square-4bpp.png b/image/test/reftest/bmp/bmp-4bpp/bmp-not-square-4bpp.png
new file mode 100644
index 0000000000..7c713c557c
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-4bpp/bmp-not-square-4bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-4bpp/bmp-size-15x15-4bpp.bmp b/image/test/reftest/bmp/bmp-4bpp/bmp-size-15x15-4bpp.bmp
new file mode 100644
index 0000000000..8b586dbfd6
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-4bpp/bmp-size-15x15-4bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-4bpp/bmp-size-15x15-4bpp.png b/image/test/reftest/bmp/bmp-4bpp/bmp-size-15x15-4bpp.png
new file mode 100644
index 0000000000..5d4a3f9534
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-4bpp/bmp-size-15x15-4bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-4bpp/bmp-size-16x16-4bpp.bmp b/image/test/reftest/bmp/bmp-4bpp/bmp-size-16x16-4bpp.bmp
new file mode 100644
index 0000000000..eae432e656
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-4bpp/bmp-size-16x16-4bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-4bpp/bmp-size-16x16-4bpp.png b/image/test/reftest/bmp/bmp-4bpp/bmp-size-16x16-4bpp.png
new file mode 100644
index 0000000000..d45d63f539
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-4bpp/bmp-size-16x16-4bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-4bpp/bmp-size-17x17-4bpp.bmp b/image/test/reftest/bmp/bmp-4bpp/bmp-size-17x17-4bpp.bmp
new file mode 100644
index 0000000000..5880c6111c
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-4bpp/bmp-size-17x17-4bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-4bpp/bmp-size-17x17-4bpp.png b/image/test/reftest/bmp/bmp-4bpp/bmp-size-17x17-4bpp.png
new file mode 100644
index 0000000000..bf48903299
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-4bpp/bmp-size-17x17-4bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-4bpp/bmp-size-1x1-4bpp.bmp b/image/test/reftest/bmp/bmp-4bpp/bmp-size-1x1-4bpp.bmp
new file mode 100644
index 0000000000..2ba68a3913
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-4bpp/bmp-size-1x1-4bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-4bpp/bmp-size-1x1-4bpp.png b/image/test/reftest/bmp/bmp-4bpp/bmp-size-1x1-4bpp.png
new file mode 100644
index 0000000000..d41dd645b7
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-4bpp/bmp-size-1x1-4bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-4bpp/bmp-size-2x2-4bpp.bmp b/image/test/reftest/bmp/bmp-4bpp/bmp-size-2x2-4bpp.bmp
new file mode 100644
index 0000000000..6c6383aa80
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-4bpp/bmp-size-2x2-4bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-4bpp/bmp-size-2x2-4bpp.png b/image/test/reftest/bmp/bmp-4bpp/bmp-size-2x2-4bpp.png
new file mode 100644
index 0000000000..b2d6050415
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-4bpp/bmp-size-2x2-4bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-4bpp/bmp-size-31x31-4bpp.bmp b/image/test/reftest/bmp/bmp-4bpp/bmp-size-31x31-4bpp.bmp
new file mode 100644
index 0000000000..ac440a6d8d
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-4bpp/bmp-size-31x31-4bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-4bpp/bmp-size-31x31-4bpp.png b/image/test/reftest/bmp/bmp-4bpp/bmp-size-31x31-4bpp.png
new file mode 100644
index 0000000000..cb12a3448d
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-4bpp/bmp-size-31x31-4bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-4bpp/bmp-size-32x32-4bpp.bmp b/image/test/reftest/bmp/bmp-4bpp/bmp-size-32x32-4bpp.bmp
new file mode 100644
index 0000000000..e4383c473a
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-4bpp/bmp-size-32x32-4bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-4bpp/bmp-size-32x32-4bpp.png b/image/test/reftest/bmp/bmp-4bpp/bmp-size-32x32-4bpp.png
new file mode 100644
index 0000000000..58d867d120
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-4bpp/bmp-size-32x32-4bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-4bpp/bmp-size-33x33-4bpp.bmp b/image/test/reftest/bmp/bmp-4bpp/bmp-size-33x33-4bpp.bmp
new file mode 100644
index 0000000000..04b2c1d1fd
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-4bpp/bmp-size-33x33-4bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-4bpp/bmp-size-33x33-4bpp.png b/image/test/reftest/bmp/bmp-4bpp/bmp-size-33x33-4bpp.png
new file mode 100644
index 0000000000..064fde198c
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-4bpp/bmp-size-33x33-4bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-4bpp/bmp-size-3x3-4bpp.bmp b/image/test/reftest/bmp/bmp-4bpp/bmp-size-3x3-4bpp.bmp
new file mode 100644
index 0000000000..179dbcfa59
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-4bpp/bmp-size-3x3-4bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-4bpp/bmp-size-3x3-4bpp.png b/image/test/reftest/bmp/bmp-4bpp/bmp-size-3x3-4bpp.png
new file mode 100644
index 0000000000..e34114d5c9
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-4bpp/bmp-size-3x3-4bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-4bpp/bmp-size-4x4-4bpp.bmp b/image/test/reftest/bmp/bmp-4bpp/bmp-size-4x4-4bpp.bmp
new file mode 100644
index 0000000000..0f57e102e2
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-4bpp/bmp-size-4x4-4bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-4bpp/bmp-size-4x4-4bpp.png b/image/test/reftest/bmp/bmp-4bpp/bmp-size-4x4-4bpp.png
new file mode 100644
index 0000000000..3efa555620
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-4bpp/bmp-size-4x4-4bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-4bpp/bmp-size-5x5-4bpp.bmp b/image/test/reftest/bmp/bmp-4bpp/bmp-size-5x5-4bpp.bmp
new file mode 100644
index 0000000000..a4efe66601
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-4bpp/bmp-size-5x5-4bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-4bpp/bmp-size-5x5-4bpp.png b/image/test/reftest/bmp/bmp-4bpp/bmp-size-5x5-4bpp.png
new file mode 100644
index 0000000000..02ebf57a51
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-4bpp/bmp-size-5x5-4bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-4bpp/bmp-size-6x6-4bpp.bmp b/image/test/reftest/bmp/bmp-4bpp/bmp-size-6x6-4bpp.bmp
new file mode 100644
index 0000000000..f4e1a29185
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-4bpp/bmp-size-6x6-4bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-4bpp/bmp-size-6x6-4bpp.png b/image/test/reftest/bmp/bmp-4bpp/bmp-size-6x6-4bpp.png
new file mode 100644
index 0000000000..1f5769d09c
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-4bpp/bmp-size-6x6-4bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-4bpp/bmp-size-7x7-4bpp.bmp b/image/test/reftest/bmp/bmp-4bpp/bmp-size-7x7-4bpp.bmp
new file mode 100644
index 0000000000..e7ee1cf20a
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-4bpp/bmp-size-7x7-4bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-4bpp/bmp-size-7x7-4bpp.png b/image/test/reftest/bmp/bmp-4bpp/bmp-size-7x7-4bpp.png
new file mode 100644
index 0000000000..59a1b98b52
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-4bpp/bmp-size-7x7-4bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-4bpp/bmp-size-8x8-4bpp.bmp b/image/test/reftest/bmp/bmp-4bpp/bmp-size-8x8-4bpp.bmp
new file mode 100644
index 0000000000..aa6959baf5
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-4bpp/bmp-size-8x8-4bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-4bpp/bmp-size-8x8-4bpp.png b/image/test/reftest/bmp/bmp-4bpp/bmp-size-8x8-4bpp.png
new file mode 100644
index 0000000000..cf44f59676
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-4bpp/bmp-size-8x8-4bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-4bpp/bmp-size-9x9-4bpp.bmp b/image/test/reftest/bmp/bmp-4bpp/bmp-size-9x9-4bpp.bmp
new file mode 100644
index 0000000000..65ec12a376
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-4bpp/bmp-size-9x9-4bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-4bpp/bmp-size-9x9-4bpp.png b/image/test/reftest/bmp/bmp-4bpp/bmp-size-9x9-4bpp.png
new file mode 100644
index 0000000000..2e07364135
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-4bpp/bmp-size-9x9-4bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-4bpp/os2bmp-size-32x32-4bpp.bmp b/image/test/reftest/bmp/bmp-4bpp/os2bmp-size-32x32-4bpp.bmp
new file mode 100644
index 0000000000..08fc30d5fc
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-4bpp/os2bmp-size-32x32-4bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-4bpp/reftest.list b/image/test/reftest/bmp/bmp-4bpp/reftest.list
new file mode 100644
index 0000000000..4a1785e86f
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-4bpp/reftest.list
@@ -0,0 +1,24 @@
+# BMP 4BPP tests
+
+# Images of various sizes
+== bmp-size-1x1-4bpp.bmp bmp-size-1x1-4bpp.png
+== bmp-size-2x2-4bpp.bmp bmp-size-2x2-4bpp.png
+== bmp-size-3x3-4bpp.bmp bmp-size-3x3-4bpp.png
+== bmp-size-4x4-4bpp.bmp bmp-size-4x4-4bpp.png
+== bmp-size-5x5-4bpp.bmp bmp-size-5x5-4bpp.png
+== bmp-size-6x6-4bpp.bmp bmp-size-6x6-4bpp.png
+== bmp-size-7x7-4bpp.bmp bmp-size-7x7-4bpp.png
+== bmp-size-8x8-4bpp.bmp bmp-size-8x8-4bpp.png
+== bmp-size-9x9-4bpp.bmp bmp-size-9x9-4bpp.png
+== bmp-size-15x15-4bpp.bmp bmp-size-15x15-4bpp.png
+== bmp-size-16x16-4bpp.bmp bmp-size-16x16-4bpp.png
+== bmp-size-17x17-4bpp.bmp bmp-size-17x17-4bpp.png
+== bmp-size-31x31-4bpp.bmp bmp-size-31x31-4bpp.png
+== bmp-size-32x32-4bpp.bmp bmp-size-32x32-4bpp.png
+== bmp-size-33x33-4bpp.bmp bmp-size-33x33-4bpp.png
+== bmp-not-square-4bpp.bmp bmp-not-square-4bpp.png
+== os2bmp-size-32x32-4bpp.bmp bmp-size-32x32-4bpp.png
+== top-to-bottom-16x16-4bpp.bmp bmp-size-16x16-4bpp.png
+# test that delta skips are drawn as transparent
+# taken from http://bmptestsuite.sourceforge.net/
+== rle4-delta-320x240.bmp rle4-delta-320x240.png
diff --git a/image/test/reftest/bmp/bmp-4bpp/rle4-delta-320x240.bmp b/image/test/reftest/bmp/bmp-4bpp/rle4-delta-320x240.bmp
new file mode 100644
index 0000000000..78a0927870
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-4bpp/rle4-delta-320x240.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-4bpp/rle4-delta-320x240.png b/image/test/reftest/bmp/bmp-4bpp/rle4-delta-320x240.png
new file mode 100644
index 0000000000..f9a3ceae23
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-4bpp/rle4-delta-320x240.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-4bpp/top-to-bottom-16x16-4bpp.bmp b/image/test/reftest/bmp/bmp-4bpp/top-to-bottom-16x16-4bpp.bmp
new file mode 100644
index 0000000000..c77696b325
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-4bpp/top-to-bottom-16x16-4bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-8bpp/bmp-extrapad-8bpp.png b/image/test/reftest/bmp/bmp-8bpp/bmp-extrapad-8bpp.png
new file mode 100644
index 0000000000..827de11a52
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/bmp-extrapad-8bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-8bpp/bmp-not-square-8bpp.bmp b/image/test/reftest/bmp/bmp-8bpp/bmp-not-square-8bpp.bmp
new file mode 100644
index 0000000000..d7a99164c2
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/bmp-not-square-8bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-8bpp/bmp-not-square-8bpp.png b/image/test/reftest/bmp/bmp-8bpp/bmp-not-square-8bpp.png
new file mode 100644
index 0000000000..be45f19d50
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/bmp-not-square-8bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-8bpp/bmp-size-15x15-8bpp.bmp b/image/test/reftest/bmp/bmp-8bpp/bmp-size-15x15-8bpp.bmp
new file mode 100644
index 0000000000..8dac8ec86c
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/bmp-size-15x15-8bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-8bpp/bmp-size-15x15-8bpp.png b/image/test/reftest/bmp/bmp-8bpp/bmp-size-15x15-8bpp.png
new file mode 100644
index 0000000000..ce00553055
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/bmp-size-15x15-8bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-8bpp/bmp-size-16x16-8bpp.bmp b/image/test/reftest/bmp/bmp-8bpp/bmp-size-16x16-8bpp.bmp
new file mode 100644
index 0000000000..bb60249ac8
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/bmp-size-16x16-8bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-8bpp/bmp-size-16x16-8bpp.png b/image/test/reftest/bmp/bmp-8bpp/bmp-size-16x16-8bpp.png
new file mode 100644
index 0000000000..6a2394618f
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/bmp-size-16x16-8bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-8bpp/bmp-size-17x17-8bpp.bmp b/image/test/reftest/bmp/bmp-8bpp/bmp-size-17x17-8bpp.bmp
new file mode 100644
index 0000000000..b817888510
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/bmp-size-17x17-8bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-8bpp/bmp-size-17x17-8bpp.png b/image/test/reftest/bmp/bmp-8bpp/bmp-size-17x17-8bpp.png
new file mode 100644
index 0000000000..494cd96cd6
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/bmp-size-17x17-8bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-8bpp/bmp-size-1x1-8bpp.bmp b/image/test/reftest/bmp/bmp-8bpp/bmp-size-1x1-8bpp.bmp
new file mode 100644
index 0000000000..9f3ef5136b
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/bmp-size-1x1-8bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-8bpp/bmp-size-1x1-8bpp.png b/image/test/reftest/bmp/bmp-8bpp/bmp-size-1x1-8bpp.png
new file mode 100644
index 0000000000..a7553a73f7
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/bmp-size-1x1-8bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-8bpp/bmp-size-2x2-8bpp.bmp b/image/test/reftest/bmp/bmp-8bpp/bmp-size-2x2-8bpp.bmp
new file mode 100644
index 0000000000..63d3f1c058
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/bmp-size-2x2-8bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-8bpp/bmp-size-2x2-8bpp.png b/image/test/reftest/bmp/bmp-8bpp/bmp-size-2x2-8bpp.png
new file mode 100644
index 0000000000..17257e9924
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/bmp-size-2x2-8bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-8bpp/bmp-size-31x31-8bpp.bmp b/image/test/reftest/bmp/bmp-8bpp/bmp-size-31x31-8bpp.bmp
new file mode 100644
index 0000000000..e4fd01fe0d
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/bmp-size-31x31-8bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-8bpp/bmp-size-31x31-8bpp.png b/image/test/reftest/bmp/bmp-8bpp/bmp-size-31x31-8bpp.png
new file mode 100644
index 0000000000..d43ac83900
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/bmp-size-31x31-8bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-8bpp/bmp-size-32x32-8bpp.bmp b/image/test/reftest/bmp/bmp-8bpp/bmp-size-32x32-8bpp.bmp
new file mode 100644
index 0000000000..d2f800d673
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/bmp-size-32x32-8bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-8bpp/bmp-size-32x32-8bpp.png b/image/test/reftest/bmp/bmp-8bpp/bmp-size-32x32-8bpp.png
new file mode 100644
index 0000000000..03642849aa
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/bmp-size-32x32-8bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-8bpp/bmp-size-33x33-8bpp.bmp b/image/test/reftest/bmp/bmp-8bpp/bmp-size-33x33-8bpp.bmp
new file mode 100644
index 0000000000..19b0744dbf
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/bmp-size-33x33-8bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-8bpp/bmp-size-33x33-8bpp.png b/image/test/reftest/bmp/bmp-8bpp/bmp-size-33x33-8bpp.png
new file mode 100644
index 0000000000..078b56df0d
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/bmp-size-33x33-8bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-8bpp/bmp-size-3x3-8bpp.bmp b/image/test/reftest/bmp/bmp-8bpp/bmp-size-3x3-8bpp.bmp
new file mode 100644
index 0000000000..9f15f35831
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/bmp-size-3x3-8bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-8bpp/bmp-size-3x3-8bpp.png b/image/test/reftest/bmp/bmp-8bpp/bmp-size-3x3-8bpp.png
new file mode 100644
index 0000000000..ba34b2601b
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/bmp-size-3x3-8bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-8bpp/bmp-size-4x4-8bpp.bmp b/image/test/reftest/bmp/bmp-8bpp/bmp-size-4x4-8bpp.bmp
new file mode 100644
index 0000000000..1ad7a8de11
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/bmp-size-4x4-8bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-8bpp/bmp-size-4x4-8bpp.png b/image/test/reftest/bmp/bmp-8bpp/bmp-size-4x4-8bpp.png
new file mode 100644
index 0000000000..ecf9e5e795
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/bmp-size-4x4-8bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-8bpp/bmp-size-5x5-8bpp.bmp b/image/test/reftest/bmp/bmp-8bpp/bmp-size-5x5-8bpp.bmp
new file mode 100644
index 0000000000..6eb759d061
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/bmp-size-5x5-8bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-8bpp/bmp-size-5x5-8bpp.png b/image/test/reftest/bmp/bmp-8bpp/bmp-size-5x5-8bpp.png
new file mode 100644
index 0000000000..1a440a16bd
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/bmp-size-5x5-8bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-8bpp/bmp-size-6x6-8bpp.bmp b/image/test/reftest/bmp/bmp-8bpp/bmp-size-6x6-8bpp.bmp
new file mode 100644
index 0000000000..a1e0e2415a
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/bmp-size-6x6-8bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-8bpp/bmp-size-6x6-8bpp.png b/image/test/reftest/bmp/bmp-8bpp/bmp-size-6x6-8bpp.png
new file mode 100644
index 0000000000..e0ac1a8f6d
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/bmp-size-6x6-8bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-8bpp/bmp-size-7x7-8bpp.bmp b/image/test/reftest/bmp/bmp-8bpp/bmp-size-7x7-8bpp.bmp
new file mode 100644
index 0000000000..25c59d7350
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/bmp-size-7x7-8bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-8bpp/bmp-size-7x7-8bpp.png b/image/test/reftest/bmp/bmp-8bpp/bmp-size-7x7-8bpp.png
new file mode 100644
index 0000000000..51c7642656
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/bmp-size-7x7-8bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-8bpp/bmp-size-8x8-8bpp.bmp b/image/test/reftest/bmp/bmp-8bpp/bmp-size-8x8-8bpp.bmp
new file mode 100644
index 0000000000..ff5b7681c8
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/bmp-size-8x8-8bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-8bpp/bmp-size-8x8-8bpp.png b/image/test/reftest/bmp/bmp-8bpp/bmp-size-8x8-8bpp.png
new file mode 100644
index 0000000000..77dc7782e4
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/bmp-size-8x8-8bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-8bpp/bmp-size-9x9-8bpp.bmp b/image/test/reftest/bmp/bmp-8bpp/bmp-size-9x9-8bpp.bmp
new file mode 100644
index 0000000000..006961628f
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/bmp-size-9x9-8bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-8bpp/bmp-size-9x9-8bpp.png b/image/test/reftest/bmp/bmp-8bpp/bmp-size-9x9-8bpp.png
new file mode 100644
index 0000000000..93914c3e16
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/bmp-size-9x9-8bpp.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-8bpp/os2-bmp-size-32x32-8bpp.bmp b/image/test/reftest/bmp/bmp-8bpp/os2-bmp-size-32x32-8bpp.bmp
new file mode 100644
index 0000000000..b6df221e1b
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/os2-bmp-size-32x32-8bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-8bpp/reftest.list b/image/test/reftest/bmp/bmp-8bpp/reftest.list
new file mode 100644
index 0000000000..6fcef4742a
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/reftest.list
@@ -0,0 +1,25 @@
+# BMP 8BPP tests
+
+# Images of various sizes
+== bmp-size-1x1-8bpp.bmp bmp-size-1x1-8bpp.png
+== bmp-size-2x2-8bpp.bmp bmp-size-2x2-8bpp.png
+== bmp-size-3x3-8bpp.bmp bmp-size-3x3-8bpp.png
+== bmp-size-4x4-8bpp.bmp bmp-size-4x4-8bpp.png
+== bmp-size-5x5-8bpp.bmp bmp-size-5x5-8bpp.png
+== bmp-size-6x6-8bpp.bmp bmp-size-6x6-8bpp.png
+== bmp-size-7x7-8bpp.bmp bmp-size-7x7-8bpp.png
+== bmp-size-8x8-8bpp.bmp bmp-size-8x8-8bpp.png
+== bmp-size-9x9-8bpp.bmp bmp-size-9x9-8bpp.png
+== bmp-size-15x15-8bpp.bmp bmp-size-15x15-8bpp.png
+== bmp-size-16x16-8bpp.bmp bmp-size-16x16-8bpp.png
+== bmp-size-17x17-8bpp.bmp bmp-size-17x17-8bpp.png
+== bmp-size-31x31-8bpp.bmp bmp-size-31x31-8bpp.png
+== bmp-size-32x32-8bpp.bmp bmp-size-32x32-8bpp.png
+== bmp-size-33x33-8bpp.bmp bmp-size-33x33-8bpp.png
+== bmp-not-square-8bpp.bmp bmp-not-square-8bpp.png
+== rle-bmp-extrapad-8bpp.bmp bmp-extrapad-8bpp.png
+== rle-bmp-not-square-8bpp.bmp bmp-not-square-8bpp.png
+== os2-bmp-size-32x32-8bpp.bmp bmp-size-32x32-8bpp.png
+== rle-bmp-size-32x32-8bpp.bmp bmp-size-32x32-8bpp.png
+== top-to-bottom-rle-bmp-size-32x32-8bpp.bmp bmp-size-32x32-8bpp.png
+== top-to-bottom-16x16-8bpp.bmp bmp-size-16x16-8bpp.png
diff --git a/image/test/reftest/bmp/bmp-8bpp/rle-bmp-extrapad-8bpp.bmp b/image/test/reftest/bmp/bmp-8bpp/rle-bmp-extrapad-8bpp.bmp
new file mode 100644
index 0000000000..9550ab2af6
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/rle-bmp-extrapad-8bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-8bpp/rle-bmp-not-square-8bpp.bmp b/image/test/reftest/bmp/bmp-8bpp/rle-bmp-not-square-8bpp.bmp
new file mode 100644
index 0000000000..8687aab6cf
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/rle-bmp-not-square-8bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-8bpp/rle-bmp-size-32x32-8bpp.bmp b/image/test/reftest/bmp/bmp-8bpp/rle-bmp-size-32x32-8bpp.bmp
new file mode 100644
index 0000000000..bd793b6b66
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/rle-bmp-size-32x32-8bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-8bpp/top-to-bottom-16x16-8bpp.bmp b/image/test/reftest/bmp/bmp-8bpp/top-to-bottom-16x16-8bpp.bmp
new file mode 100644
index 0000000000..bb60249ac8
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/top-to-bottom-16x16-8bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-8bpp/top-to-bottom-rle-bmp-size-32x32-8bpp.bmp b/image/test/reftest/bmp/bmp-8bpp/top-to-bottom-rle-bmp-size-32x32-8bpp.bmp
new file mode 100644
index 0000000000..396672ea15
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-8bpp/top-to-bottom-rle-bmp-size-32x32-8bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-corrupted/invalid-bpp.bmp b/image/test/reftest/bmp/bmp-corrupted/invalid-bpp.bmp
new file mode 100644
index 0000000000..c00dd3fa4c
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-corrupted/invalid-bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-corrupted/invalid-compression-BITFIELDS.bmp b/image/test/reftest/bmp/bmp-corrupted/invalid-compression-BITFIELDS.bmp
new file mode 100644
index 0000000000..92a7225261
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-corrupted/invalid-compression-BITFIELDS.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-corrupted/invalid-compression-RLE4.bmp b/image/test/reftest/bmp/bmp-corrupted/invalid-compression-RLE4.bmp
new file mode 100644
index 0000000000..d73c89411d
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-corrupted/invalid-compression-RLE4.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-corrupted/invalid-compression-RLE8.bmp b/image/test/reftest/bmp/bmp-corrupted/invalid-compression-RLE8.bmp
new file mode 100644
index 0000000000..5a88064543
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-corrupted/invalid-compression-RLE8.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-corrupted/invalid-compression.bmp b/image/test/reftest/bmp/bmp-corrupted/invalid-compression.bmp
new file mode 100644
index 0000000000..aa3134e562
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-corrupted/invalid-compression.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-corrupted/invalid-data-offset.bmp b/image/test/reftest/bmp/bmp-corrupted/invalid-data-offset.bmp
new file mode 100644
index 0000000000..b89bc55a8e
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-corrupted/invalid-data-offset.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-corrupted/invalid-signature.bmp b/image/test/reftest/bmp/bmp-corrupted/invalid-signature.bmp
new file mode 100644
index 0000000000..6eebb57180
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-corrupted/invalid-signature.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-corrupted/invalid-truncated-metadata.bmp b/image/test/reftest/bmp/bmp-corrupted/invalid-truncated-metadata.bmp
new file mode 100644
index 0000000000..228c5c9992
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-corrupted/invalid-truncated-metadata.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-corrupted/os2-invalid-bpp.bmp b/image/test/reftest/bmp/bmp-corrupted/os2-invalid-bpp.bmp
new file mode 100644
index 0000000000..af4678a284
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-corrupted/os2-invalid-bpp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmp-corrupted/reftest.list b/image/test/reftest/bmp/bmp-corrupted/reftest.list
new file mode 100644
index 0000000000..882657983a
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-corrupted/reftest.list
@@ -0,0 +1,21 @@
+# Corrupted BMP tests
+
+== wrapper.html?invalid-signature.bmp about:blank
+== wrapper.html?invalid-bpp.bmp about:blank
+== wrapper.html?os2-invalid-bpp.bmp about:blank
+# Tests for an unsupported compression value
+== wrapper.html?invalid-compression.bmp about:blank
+# Tests for RLE4 with an invalid BPP
+== wrapper.html?invalid-compression-RLE4.bmp about:blank
+# Tests for RLE8 with an invalid BPP
+== wrapper.html?invalid-compression-RLE8.bmp about:blank
+
+# Test for BITFIELDS with an invalid BIH size. (This is the obscure
+# BITMAPV3INFOHEADER variant mentioned in
+# https://en.wikipedia.org/wiki/BMP_file_format which we don't accept.)
+== wrapper.html?invalid-compression-BITFIELDS.bmp about:blank
+
+== wrapper.html?invalid-truncated-metadata.bmp about:blank
+
+# Test for an invalid data offset
+== wrapper.html?invalid-data-offset.bmp about:blank \ No newline at end of file
diff --git a/image/test/reftest/bmp/bmp-corrupted/wrapper.html b/image/test/reftest/bmp/bmp-corrupted/wrapper.html
new file mode 100644
index 0000000000..22b74c8fc1
--- /dev/null
+++ b/image/test/reftest/bmp/bmp-corrupted/wrapper.html
@@ -0,0 +1,28 @@
+<!DOCTYPE HTML>
+<html class="reftest-wait">
+<head>
+<title>Image reftest wrapper</title>
+<style type="text/css">
+ #image1 { background-color: rgb(10, 100, 250); }
+</style>
+<script>
+ // The image is loaded async after the page loads
+ // wait for it to finish loading
+ function onImageLoad() {
+ document.documentElement.removeAttribute("class");
+ };
+</script>
+</head>
+<body>
+<!-- non-empty alt to avoid the broken image icon -->
+<img id="image1" alt=" ">
+<script>
+ // Use as "wrapper.html?image.png"
+ var imgURL = document.location.search.substr(1);
+ document.images[0].onload = onImageLoad;
+ document.images[0].onerror = onImageLoad;
+ document.images[0].src = imgURL;
+</script>
+</body>
+</html>
+
diff --git a/image/test/reftest/bmp/bmpsuite/COPYING.txt b/image/test/reftest/bmp/bmpsuite/COPYING.txt
new file mode 100644
index 0000000000..10926e87f1
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/COPYING.txt
@@ -0,0 +1,675 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
+
diff --git a/image/test/reftest/bmp/bmpsuite/README.mozilla b/image/test/reftest/bmp/bmpsuite/README.mozilla
new file mode 100644
index 0000000000..f59a494c26
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/README.mozilla
@@ -0,0 +1,40 @@
+bmpsuite, by Jason Summers, is an excellent BMP test suite that covers many
+obscure corners of the BMP format. All the test images can be seen here:
+
+ http://entropymine.com/jason/bmpsuite/bmpsuite/html/bmpsuite.html
+
+The code used to generate the test images is available here:
+
+ https://github.com/jsummers/bmpsuite/
+
+The readme.txt file states that the code is GPLv3 and the generated image files
+are in the public domain. We have not included the code, but we have included:
+(a) some quotes from the documentation and (b) some of the reference PNG
+images. However, (a) and (b) are for testing purposes only and are not included
+in Firefox releases.
+
+The BMP files within this directory were generated with bmpsuite v2.3 (git
+revision 3adcc9e20c0b6d2d665966b7e047b6f9474cef12).
+
+There are three sub-directories.
+- g/: for "good" images.
+- q/: for "questionable" images.
+- b/: for "bad" images.
+- x/: for images that arguably may not truly be in "BMP format".
+
+Each file listed in a reftest.list file is annotated with the following lines.
+
+- The first line starts with "BMP:" and is the output of the MOZ_LOG call in
+ nsBMPDecoder.cpp. It has basic image info.
+
+- Next is a quote from the bmpsuite docs, which describes the particulars of
+ the file.
+
+- Some files also have additional notes in square brackets. These explain
+ anything non-obvious about the file, such as how we handle things that are
+ ambiguous, any shortcomings in our decoding, and how Chromium handles the
+ image.
+
+Some of the reference PNGs need a small amount of fuzziness to match the BMPs.
+This might be due to PNG color correction.
+
diff --git a/image/test/reftest/bmp/bmpsuite/b/badbitcount.bmp b/image/test/reftest/bmp/bmpsuite/b/badbitcount.bmp
new file mode 100644
index 0000000000..d4fa4e8b88
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/b/badbitcount.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/b/badbitssize.bmp b/image/test/reftest/bmp/bmpsuite/b/badbitssize.bmp
new file mode 100644
index 0000000000..0a99a605af
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/b/badbitssize.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/b/baddens1.bmp b/image/test/reftest/bmp/bmpsuite/b/baddens1.bmp
new file mode 100644
index 0000000000..a6150a6fe7
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/b/baddens1.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/b/baddens2.bmp b/image/test/reftest/bmp/bmpsuite/b/baddens2.bmp
new file mode 100644
index 0000000000..f2c1dfb665
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/b/baddens2.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/b/badfilesize.bmp b/image/test/reftest/bmp/bmpsuite/b/badfilesize.bmp
new file mode 100644
index 0000000000..da52cb51d7
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/b/badfilesize.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/b/badheadersize.bmp b/image/test/reftest/bmp/bmpsuite/b/badheadersize.bmp
new file mode 100644
index 0000000000..2a4083a6f9
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/b/badheadersize.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/b/badpalettesize.bmp b/image/test/reftest/bmp/bmpsuite/b/badpalettesize.bmp
new file mode 100644
index 0000000000..7d9d1b745d
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/b/badpalettesize.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/b/badplanes.bmp b/image/test/reftest/bmp/bmpsuite/b/badplanes.bmp
new file mode 100644
index 0000000000..92d2855b62
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/b/badplanes.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/b/badrle.bmp b/image/test/reftest/bmp/bmpsuite/b/badrle.bmp
new file mode 100644
index 0000000000..cbf8fdc2e1
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/b/badrle.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/b/badrle.png b/image/test/reftest/bmp/bmpsuite/b/badrle.png
new file mode 100644
index 0000000000..1764ef9f98
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/b/badrle.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/b/badrle4.bmp b/image/test/reftest/bmp/bmpsuite/b/badrle4.bmp
new file mode 100644
index 0000000000..632787a730
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/b/badrle4.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/b/badrle4.png b/image/test/reftest/bmp/bmpsuite/b/badrle4.png
new file mode 100644
index 0000000000..7f5af39fe0
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/b/badrle4.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/b/badrle4bis.bmp b/image/test/reftest/bmp/bmpsuite/b/badrle4bis.bmp
new file mode 100644
index 0000000000..130b7e659c
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/b/badrle4bis.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/b/badrle4bis.png b/image/test/reftest/bmp/bmpsuite/b/badrle4bis.png
new file mode 100644
index 0000000000..7d0d95871a
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/b/badrle4bis.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/b/badrle4ter.bmp b/image/test/reftest/bmp/bmpsuite/b/badrle4ter.bmp
new file mode 100644
index 0000000000..8107a335fc
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/b/badrle4ter.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/b/badrle4ter.png b/image/test/reftest/bmp/bmpsuite/b/badrle4ter.png
new file mode 100644
index 0000000000..230bb60f47
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/b/badrle4ter.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/b/badrlebis.bmp b/image/test/reftest/bmp/bmpsuite/b/badrlebis.bmp
new file mode 100644
index 0000000000..893eb11ab7
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/b/badrlebis.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/b/badrlebis.png b/image/test/reftest/bmp/bmpsuite/b/badrlebis.png
new file mode 100644
index 0000000000..f0094a1156
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/b/badrlebis.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/b/badrleter.bmp b/image/test/reftest/bmp/bmpsuite/b/badrleter.bmp
new file mode 100644
index 0000000000..04d5874e67
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/b/badrleter.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/b/badrleter.png b/image/test/reftest/bmp/bmpsuite/b/badrleter.png
new file mode 100644
index 0000000000..359bc12e12
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/b/badrleter.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/b/badwidth.bmp b/image/test/reftest/bmp/bmpsuite/b/badwidth.bmp
new file mode 100644
index 0000000000..9fca005dc3
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/b/badwidth.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/b/pal1.png b/image/test/reftest/bmp/bmpsuite/b/pal1.png
new file mode 100644
index 0000000000..89a433ed76
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/b/pal1.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/b/pal8.png b/image/test/reftest/bmp/bmpsuite/b/pal8.png
new file mode 100644
index 0000000000..2bfd3e650f
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/b/pal8.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/b/pal8badindex.bmp b/image/test/reftest/bmp/bmpsuite/b/pal8badindex.bmp
new file mode 100644
index 0000000000..efe16c05c1
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/b/pal8badindex.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/b/pal8badindex.png b/image/test/reftest/bmp/bmpsuite/b/pal8badindex.png
new file mode 100644
index 0000000000..0efb392b9e
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/b/pal8badindex.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/b/reallybig.bmp b/image/test/reftest/bmp/bmpsuite/b/reallybig.bmp
new file mode 100644
index 0000000000..101e0b4943
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/b/reallybig.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/b/reftest.list b/image/test/reftest/bmp/bmpsuite/b/reftest.list
new file mode 100644
index 0000000000..c892288b40
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/b/reftest.list
@@ -0,0 +1,110 @@
+# bmpsuite "bad" tests
+
+# See ../README.mozilla for details.
+
+# BMP: bihsize=40, 127 x 64, bpp=30000, compression=0, colors=2
+# "Header indicates an absurdly large number of bits/pixel."
+# [We reject it. So does Chromium.]
+== wrapper.html?badbitcount.bmp about:blank
+
+# BMP: bihsize=40, 127 x 64, bpp=1, compression=0, colors=2
+# "Header incorrectly indicates that the bitmap is several GB in size."
+# [We accept it. So does Chromium.]
+fuzzy(0-1,0-926) == badbitssize.bmp pal1.png
+
+# BMP: bihsize=40, 127 x 64, bpp=1, compression=0, colors=2
+# BMP: bihsize=40, 127 x 64, bpp=1, compression=0, colors=2
+# "Density (pixels per meter) suggests the image is much larger in one
+# dimension than the other."
+# [We accept them. So does Chromium.]
+== baddens1.bmp pal1.png
+== baddens2.bmp pal1.png
+
+# BMP: bihsize=40, 127 x 64, bpp=1, compression=0, colors=2
+# "Header incorrectly indicates that the file is several GB in size."
+# [We accept it. So does Chromium.]
+== badfilesize.bmp pal1.png
+
+# BMP: <no "BMP:" output is produced for files with bad header sizes>
+# "Header size is 66 bytes, which is not a valid size for any known BMP
+# version."
+# [We reject it. So does Chromium.]
+== wrapper.html?badheadersize.bmp about:blank
+
+# BMP: bihsize=40, 127 x 64, bpp=8, compression=0, colors=305402420
+# "Header incorrectly indicates that the palette contains an absurdly large
+# number of colors."
+# [We reject it. Chromium accepts it but draws nothing. Rejecting seems
+# preferable give that the data is clearly untrustworthy.]
+fuzzy(0-245,0-8128) == wrapper.html?badpalettesize.bmp about:blank
+
+# BMP: bihsize=40, 127 x 64, bpp=1, compression=0, colors=2
+# "The 'planes' setting, which is required to be 1, is not 1."
+# [We accept it. So does Chromium.]
+== badplanes.bmp pal1.png
+
+# BMP: bihsize=40, 127 x 64, bpp=4, compression=2, colors=13
+# "An invalid RLE4-compressed image that tries to cause buffer overruns."
+== badrle4.bmp badrle4.png
+
+# BMP: bihsize=40, 127 x 64, bpp=4, compression=2, colors=13
+# "Another invalid RLE4-compressed image that tries to cause buffer overruns."
+== badrle4bis.bmp badrle4bis.png
+
+# BMP: bihsize=40, 127 x 64, bpp=4, compression=2, colors=13
+# "Another invalid RLE4-compressed image that tries to cause buffer overruns."
+== badrle4ter.bmp badrle4ter.png
+
+# BMP: bihsize=40, 127 x 64, bpp=8, compression=1, colors=253
+# "An invalid RLE-compressed image that tries to cause buffer overruns."
+# [We accept it, drawing the valid first part and leaving the rest black.
+# Chromium accepts it, drawing the valid first part and leaving the rest
+# transparent. Using black for the invalid part is arguably better because it
+# makes the image edges more obvious.]
+== badrle.bmp badrle.png
+
+# BMP: bihsize=40, 127 x 64, bpp=8, compression=1, colors=253
+# "8-bit version of b/badrle4bis.bmp."
+== badrlebis.bmp badrlebis.png
+
+# BMP: bihsize=40, 127 x 64, bpp=8, compression=1, colors=253
+# "8-bit version of b/badrle4ter.bmp."
+== badrleter.bmp badrleter.png
+
+# BMP: bihsize=40, -127 x 64, bpp=1, compression=0, colors=2
+# "The image claims to be a negative number of pixels in width."
+# [We reject it. So does Chromium.]
+== wrapper.html?badwidth.bmp about:blank
+
+# BMP: bihsize=40, 127 x 64, bpp=8, compression=0, colors=101
+# "Many of the palette indices used in the image are not present in the
+# palette."
+# [We accept it and use black for the missing colors. So does Chromium.]
+== pal8badindex.bmp pal8badindex.png
+
+# BMP: bihsize=40, 3000000 x 2000000, bpp=24, compression=0, colors=0
+# "An image with a very large reported width and height."
+# [We reject it. So does Chromium.]
+== wrapper.html?reallybig.bmp about:blank
+
+# BMP: bihsize=40, 127 x 64, bpp=16, compression=3, colors=0
+# "A 16-bit image with a BITFIELDS segment indicating 8 red, 8 green, and 0
+# blue bits. The documentation doesn’t say whether undefined channels are
+# legal, or how they should be handled."
+== rgb16-880.bmp rgb16-880.png
+
+# BMP: bihsize=40, 127 x -64, bpp=8, compression=1, colors=252
+# "An RLE-compressed image that tries to use top-down orientation, which isn’t
+# allowed."
+# [We accept it. Chromium rejects it. Accepting seems better given that we can
+# decode it perfectly well.]
+fuzzy(0-1,0-996) == rletopdown.bmp pal8.png
+
+# BMP: bihsize=40, 127 x 64, bpp=1, compression=0, colors=2
+# "A file that has been truncated in the middle of the bitmap."
+# [We accept it, drawing the part that is present and leaving the rest black.
+# Chromium draws the part that is present and leaves the rest transparent.
+# Using black for the invalid part is arguably better because it makes the
+# image edges more obvious.]
+== shortfile.bmp shortfile.png
+
diff --git a/image/test/reftest/bmp/bmpsuite/b/rgb16-880.bmp b/image/test/reftest/bmp/bmpsuite/b/rgb16-880.bmp
new file mode 100644
index 0000000000..72e7ce0eaf
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/b/rgb16-880.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/b/rgb16-880.png b/image/test/reftest/bmp/bmpsuite/b/rgb16-880.png
new file mode 100644
index 0000000000..9450eba2bb
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/b/rgb16-880.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/b/rletopdown.bmp b/image/test/reftest/bmp/bmpsuite/b/rletopdown.bmp
new file mode 100644
index 0000000000..21a909fda9
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/b/rletopdown.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/b/shortfile.bmp b/image/test/reftest/bmp/bmpsuite/b/shortfile.bmp
new file mode 100644
index 0000000000..73960797b9
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/b/shortfile.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/b/shortfile.png b/image/test/reftest/bmp/bmpsuite/b/shortfile.png
new file mode 100644
index 0000000000..0ec21d9295
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/b/shortfile.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/b/wrapper.html b/image/test/reftest/bmp/bmpsuite/b/wrapper.html
new file mode 100644
index 0000000000..22b74c8fc1
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/b/wrapper.html
@@ -0,0 +1,28 @@
+<!DOCTYPE HTML>
+<html class="reftest-wait">
+<head>
+<title>Image reftest wrapper</title>
+<style type="text/css">
+ #image1 { background-color: rgb(10, 100, 250); }
+</style>
+<script>
+ // The image is loaded async after the page loads
+ // wait for it to finish loading
+ function onImageLoad() {
+ document.documentElement.removeAttribute("class");
+ };
+</script>
+</head>
+<body>
+<!-- non-empty alt to avoid the broken image icon -->
+<img id="image1" alt=" ">
+<script>
+ // Use as "wrapper.html?image.png"
+ var imgURL = document.location.search.substr(1);
+ document.images[0].onload = onImageLoad;
+ document.images[0].onerror = onImageLoad;
+ document.images[0].src = imgURL;
+</script>
+</body>
+</html>
+
diff --git a/image/test/reftest/bmp/bmpsuite/g/pal1.bmp b/image/test/reftest/bmp/bmpsuite/g/pal1.bmp
new file mode 100644
index 0000000000..4776f82778
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/pal1.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/pal1.png b/image/test/reftest/bmp/bmpsuite/g/pal1.png
new file mode 100644
index 0000000000..89a433ed76
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/pal1.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/pal1bg.bmp b/image/test/reftest/bmp/bmpsuite/g/pal1bg.bmp
new file mode 100644
index 0000000000..466d0ba727
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/pal1bg.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/pal1bg.png b/image/test/reftest/bmp/bmpsuite/g/pal1bg.png
new file mode 100644
index 0000000000..20c4bb838f
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/pal1bg.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/pal1wb.bmp b/image/test/reftest/bmp/bmpsuite/g/pal1wb.bmp
new file mode 100644
index 0000000000..56cb93203e
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/pal1wb.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/pal4.bmp b/image/test/reftest/bmp/bmpsuite/g/pal4.bmp
new file mode 100644
index 0000000000..7fd36303ca
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/pal4.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/pal4.png b/image/test/reftest/bmp/bmpsuite/g/pal4.png
new file mode 100644
index 0000000000..188bb0499e
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/pal4.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/pal4gs.bmp b/image/test/reftest/bmp/bmpsuite/g/pal4gs.bmp
new file mode 100644
index 0000000000..813268ca77
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/pal4gs.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/pal4gs.png b/image/test/reftest/bmp/bmpsuite/g/pal4gs.png
new file mode 100644
index 0000000000..3a9fc855e4
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/pal4gs.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/pal4rle.bmp b/image/test/reftest/bmp/bmpsuite/g/pal4rle.bmp
new file mode 100644
index 0000000000..a5672aebd6
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/pal4rle.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/pal8-0.bmp b/image/test/reftest/bmp/bmpsuite/g/pal8-0.bmp
new file mode 100644
index 0000000000..ab8815a360
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/pal8-0.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/pal8.bmp b/image/test/reftest/bmp/bmpsuite/g/pal8.bmp
new file mode 100644
index 0000000000..96b2f86680
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/pal8.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/pal8.png b/image/test/reftest/bmp/bmpsuite/g/pal8.png
new file mode 100644
index 0000000000..2bfd3e650f
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/pal8.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/pal8gs.bmp b/image/test/reftest/bmp/bmpsuite/g/pal8gs.bmp
new file mode 100644
index 0000000000..66a0d70dc3
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/pal8gs.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/pal8gs.png b/image/test/reftest/bmp/bmpsuite/g/pal8gs.png
new file mode 100644
index 0000000000..b33b38e1d3
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/pal8gs.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/pal8nonsquare-e.png b/image/test/reftest/bmp/bmpsuite/g/pal8nonsquare-e.png
new file mode 100644
index 0000000000..646665f2d0
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/pal8nonsquare-e.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/pal8nonsquare.bmp b/image/test/reftest/bmp/bmpsuite/g/pal8nonsquare.bmp
new file mode 100644
index 0000000000..0aa8de04cb
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/pal8nonsquare.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/pal8nonsquare.png b/image/test/reftest/bmp/bmpsuite/g/pal8nonsquare.png
new file mode 100644
index 0000000000..9648cb6825
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/pal8nonsquare.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/pal8os2.bmp b/image/test/reftest/bmp/bmpsuite/g/pal8os2.bmp
new file mode 100644
index 0000000000..14901b3882
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/pal8os2.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/pal8rle.bmp b/image/test/reftest/bmp/bmpsuite/g/pal8rle.bmp
new file mode 100644
index 0000000000..d43101490f
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/pal8rle.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/pal8topdown.bmp b/image/test/reftest/bmp/bmpsuite/g/pal8topdown.bmp
new file mode 100644
index 0000000000..4b2f8e019f
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/pal8topdown.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/pal8v4.bmp b/image/test/reftest/bmp/bmpsuite/g/pal8v4.bmp
new file mode 100644
index 0000000000..34ebb8030c
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/pal8v4.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/pal8v5.bmp b/image/test/reftest/bmp/bmpsuite/g/pal8v5.bmp
new file mode 100644
index 0000000000..c54647a31a
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/pal8v5.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/pal8w124.bmp b/image/test/reftest/bmp/bmpsuite/g/pal8w124.bmp
new file mode 100644
index 0000000000..b7cc2d8bf7
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/pal8w124.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/pal8w124.png b/image/test/reftest/bmp/bmpsuite/g/pal8w124.png
new file mode 100644
index 0000000000..f80236df60
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/pal8w124.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/pal8w125.bmp b/image/test/reftest/bmp/bmpsuite/g/pal8w125.bmp
new file mode 100644
index 0000000000..06efed7443
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/pal8w125.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/pal8w125.png b/image/test/reftest/bmp/bmpsuite/g/pal8w125.png
new file mode 100644
index 0000000000..2a45116b91
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/pal8w125.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/pal8w126.bmp b/image/test/reftest/bmp/bmpsuite/g/pal8w126.bmp
new file mode 100644
index 0000000000..112aa9fe67
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/pal8w126.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/pal8w126.png b/image/test/reftest/bmp/bmpsuite/g/pal8w126.png
new file mode 100644
index 0000000000..a41eab93d0
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/pal8w126.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/reftest.list b/image/test/reftest/bmp/bmpsuite/g/reftest.list
new file mode 100644
index 0000000000..d14c5aa42e
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/reftest.list
@@ -0,0 +1,129 @@
+# bmpsuite "good" tests
+
+# See ../README.mozilla for details.
+
+# BMP: bihsize=40, 127 x 64, bpp=1, compression=0, colors=2
+# "1 bit/pixel paletted image, in which black is the first color in the
+# palette."
+fuzzy(0-1,0-926) == pal1.bmp pal1.png
+
+# BMP: bihsize=40, 127 x 64, bpp=1, compression=0, colors=2
+# "1 bit/pixel paletted image, in which white is the first color in the
+# palette."
+fuzzy(0-1,0-926) == pal1wb.bmp pal1.png
+
+# BMP: bihsize=40, 127 x 64, bpp=1, compression=0, colors=2
+# "1 bit/pixel paletted image, with colors other than black and white."
+== pal1bg.bmp pal1bg.png
+
+# BMP: bihsize=40, 127 x 64, bpp=4, compression=0, colors=12
+# "Paletted image with 12 palette colors, and 4 bits/pixel."
+== pal4.bmp pal4.png
+
+# BMP: bihsize=40, 127 x 64, bpp=4, compression=0, colors=12
+# "Paletted image with 12 grayscale palette colors, and 4 bits/pixel."
+== pal4gs.bmp pal4gs.png
+
+# BMP: bihsize=40, 127 x 64, bpp=4, compression=2, colors=12
+# "4-bit image that uses RLE compression."
+== pal4rle.bmp pal4.png
+
+# BMP: bihsize=40, 127 x 64, bpp=8, compression=0, colors=252
+# "Our standard paletted image, with 252 palette colors, and 8 bits/pixel."
+fuzzy(0-1,0-996) == pal8.bmp pal8.png
+
+# BMP: bihsize=40, 127 x 64, bpp=8, compression=0, colors=0
+# "Every field that can be set to 0 is set to 0: pixels/meter=0; colors used=0
+# (meaning the default 256); size-of-image=0."
+fuzzy(0-1,0-996) == pal8-0.bmp pal8.png
+
+# BMP: bihsize=40, 127 x 64, bpp=8, compression=0, colors=252
+# "An 8-bit image with a palette of 252 grayscale colors."
+== pal8gs.bmp pal8gs.png
+
+# BMP: bihsize=40, 127 x 64, bpp=8, compression=1, colors=252
+# "8-bit image that uses RLE compression."
+fuzzy(0-1,0-996) == pal8rle.bmp pal8.png
+
+# BMP: bihsize=40, 126 x 63, bpp=8, compression=0, colors=252
+# BMP: bihsize=40, 125 x 62, bpp=8, compression=0, colors=252
+# BMP: bihsize=40, 124 x 61, bpp=8, compression=0, colors=252
+# "Images with different widths and heights. In BMP format, rows are padded to
+# a multiple of four bytes, so we test all four possibilities."
+fuzzy(0-1,0-889) == pal8w126.bmp pal8w126.png
+fuzzy(0-1,0-974) == pal8w125.bmp pal8w125.png
+fuzzy(0-1,0-870) == pal8w124.bmp pal8w124.png
+
+# BMP: bihsize=40, 127 x -64, bpp=8, compression=0, colors=252
+# "BMP images are normally stored from the bottom up, but there is a way to
+# store them from the top down."
+fuzzy(0-1,0-996) == pal8topdown.bmp pal8.png
+
+# BMP: bihsize=40, 127 x 32, bpp=8, compression=0, colors=252
+# "An image with non-square pixels: the X pixels/meter is twice the Y
+# pixels/meter. Image editors can be expected to leave the image 'squashed';
+# image viewers should consider stretching it to its correct proportions."
+# [We leave it squashed, as does Chromium.]
+fuzzy(0-1,0-1462) == pal8nonsquare.bmp pal8nonsquare-e.png
+
+# BMP: bihsize=12, 127 x 64, bpp=8, compression=0, colors=0
+# "An OS/2-style bitmap."
+fuzzy(0-1,0-996) == pal8os2.bmp pal8.png
+
+# BMP: bihsize=108, 127 x 64, bpp=8, compression=0, colors=252
+# "A v4 bitmap. I’m not sure that the gamma and chromaticity values in this
+# file are sensible, because I can’t find any detailed documentation of them."
+# [We seem to handle the profile wrong in QCMS. See bug 1619332.]
+fuzzy-if((/^Windows\x20NT\x2010\.0/.test(http.oscpu)&&/^aarch64-msvc/.test(xulRuntime.XPCOMABI)),1-4,899-6376) fuzzy-if(!(/^Windows\x20NT\x2010\.0/.test(http.oscpu)&&/^aarch64-msvc/.test(xulRuntime.XPCOMABI)),3-3,6376-6376) fuzzy-if(appleSilicon,4-4,6376-6376) == pal8v4.bmp pal8.png #bug 1619847
+
+# BMP: bihsize=124, 127 x 64, bpp=8, compression=0, colors=252
+# "A v5 bitmap. Version 5 has additional colorspace options over v4, so it is
+# easier to create, and ought to be more portable."
+fuzzy(0-1,0-996) == pal8v5.bmp pal8.png
+
+# BMP: bihsize=40, 127 x 64, bpp=16, compression=0, colors=0
+# "A 16-bit image with the default color format: 5 bits each for red, green, and
+# blue, and 1 unused bit. The whitest colors should (I assume) be displayed as
+# pure white: (255,255,255), not (248,248,248)."
+fuzzy(0-1,0-1296) == rgb16.bmp rgb16.png
+
+# BMP: bihsize=40, 127 x 64, bpp=16, compression=3, colors=0
+# "Same format as rgb16.bmp, but with a BITFIELDS segment."
+fuzzy(0-1,0-1296) == rgb16bfdef.bmp rgb16.png
+
+# BMP: bihsize=40, 127 x 64, bpp=16, compression=3, colors=0
+# "A 16-bit image with a BITFIELDS segment indicating 5 red, 6 green, and 5 blue
+# bits. This is a standard 16-bit format, even supported by old versions of
+# Windows that don’t support any other non-default 16-bit formats. The whitest
+# colors should be displayed as pure white: (255,255,255), not (248,252,248)."
+fuzzy(0-1,0-1296) == rgb16.bmp rgb16.png
+
+# BMP: bihsize=40, 127 x 64, bpp=16, compression=3, colors=256
+# "A 16-bit image with both a BITFIELDS segment and a palette."
+fuzzy(0-1,0-1516) == rgb16.bmp rgb16.png
+
+# BMP: bihsize=40, 127 x 64, bpp=24, compression=0, colors=0
+# "A perfectly ordinary 24-bit (truecolor) image."
+== rgb24.bmp rgb24.png
+
+# BMP: bihsize=40, 127 x 64, bpp=24, compression=0, colors=256
+# "A 24-bit image, with a palette containing 256 colors. There is little if any
+# reason for a truecolor image to contain a palette, but it is legal."
+== rgb24pal.bmp rgb24.png
+
+# BMP: bihsize=40, 127 x 64, bpp=32, compression=0, colors=0
+# "A 32-bit image using the default color format for 32-bit images (no
+# BITFIELDS segment). There are 8 bits per color channel, and 8 unused bits.
+# The unused bits are set to 0."
+== rgb32.bmp rgb24.png
+
+# BMP: bihsize=40, 127 x 64, bpp=32, compression=3, colors=0
+# "Same format as rgb32.bmp, but with a BITFIELDS segment."
+== rgb32bfdef.bmp rgb24.png
+
+# BMP: bihsize=40, 127 x 64, bpp=32, compression=3, colors=0
+# "A 32-bit image with a BITFIELDS segment. As usual, there are 8 bits per color
+# channel, and 8 unused bits. But the color channels are in an unusual order,
+# so the viewer must read the BITFIELDS, and not just guess."
+== rgb32bf.bmp rgb24.png
+
diff --git a/image/test/reftest/bmp/bmpsuite/g/rgb16-565.bmp b/image/test/reftest/bmp/bmpsuite/g/rgb16-565.bmp
new file mode 100644
index 0000000000..c03a27975a
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/rgb16-565.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/rgb16-565.png b/image/test/reftest/bmp/bmpsuite/g/rgb16-565.png
new file mode 100644
index 0000000000..04a3121d24
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/rgb16-565.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/rgb16-565pal.bmp b/image/test/reftest/bmp/bmpsuite/g/rgb16-565pal.bmp
new file mode 100644
index 0000000000..e7632e344b
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/rgb16-565pal.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/rgb16.bmp b/image/test/reftest/bmp/bmpsuite/g/rgb16.bmp
new file mode 100644
index 0000000000..6bfe47af4f
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/rgb16.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/rgb16.png b/image/test/reftest/bmp/bmpsuite/g/rgb16.png
new file mode 100644
index 0000000000..d9545840ab
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/rgb16.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/rgb16bfdef.bmp b/image/test/reftest/bmp/bmpsuite/g/rgb16bfdef.bmp
new file mode 100644
index 0000000000..30fe8bb8d6
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/rgb16bfdef.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/rgb24.bmp b/image/test/reftest/bmp/bmpsuite/g/rgb24.bmp
new file mode 100644
index 0000000000..40f8bb094b
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/rgb24.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/rgb24.png b/image/test/reftest/bmp/bmpsuite/g/rgb24.png
new file mode 100644
index 0000000000..86a9c945b0
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/rgb24.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/rgb24pal.bmp b/image/test/reftest/bmp/bmpsuite/g/rgb24pal.bmp
new file mode 100644
index 0000000000..102e971dd3
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/rgb24pal.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/rgb32.bmp b/image/test/reftest/bmp/bmpsuite/g/rgb32.bmp
new file mode 100644
index 0000000000..5d57eaaea8
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/rgb32.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/rgb32bf.bmp b/image/test/reftest/bmp/bmpsuite/g/rgb32bf.bmp
new file mode 100644
index 0000000000..20fa9a1326
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/rgb32bf.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/g/rgb32bfdef.bmp b/image/test/reftest/bmp/bmpsuite/g/rgb32bfdef.bmp
new file mode 100644
index 0000000000..d7e64e5a41
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/g/rgb32bfdef.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/pal1huff.bmp b/image/test/reftest/bmp/bmpsuite/q/pal1huff.bmp
new file mode 100644
index 0000000000..790a483697
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/pal1huff.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/pal1p1.bmp b/image/test/reftest/bmp/bmpsuite/q/pal1p1.bmp
new file mode 100644
index 0000000000..b68321c4c1
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/pal1p1.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/pal1p1.png b/image/test/reftest/bmp/bmpsuite/q/pal1p1.png
new file mode 100644
index 0000000000..92fc0f945b
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/pal1p1.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/pal2.bmp b/image/test/reftest/bmp/bmpsuite/q/pal2.bmp
new file mode 100644
index 0000000000..983e9fa92d
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/pal2.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/pal2color.bmp b/image/test/reftest/bmp/bmpsuite/q/pal2color.bmp
new file mode 100644
index 0000000000..27fe7276bc
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/pal2color.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/pal4rlecut.bmp b/image/test/reftest/bmp/bmpsuite/q/pal4rlecut.bmp
new file mode 100644
index 0000000000..2f32d1d7ad
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/pal4rlecut.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/pal4rlecut.png b/image/test/reftest/bmp/bmpsuite/q/pal4rlecut.png
new file mode 100644
index 0000000000..767f5a0ad7
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/pal4rlecut.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/pal4rletrns.bmp b/image/test/reftest/bmp/bmpsuite/q/pal4rletrns.bmp
new file mode 100644
index 0000000000..58994e92ba
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/pal4rletrns.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/pal4rletrns.png b/image/test/reftest/bmp/bmpsuite/q/pal4rletrns.png
new file mode 100644
index 0000000000..9b0c044364
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/pal4rletrns.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/pal8.png b/image/test/reftest/bmp/bmpsuite/q/pal8.png
new file mode 100644
index 0000000000..2bfd3e650f
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/pal8.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/pal8offs.bmp b/image/test/reftest/bmp/bmpsuite/q/pal8offs.bmp
new file mode 100644
index 0000000000..8673e9740b
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/pal8offs.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/pal8os2-hs.bmp b/image/test/reftest/bmp/bmpsuite/q/pal8os2-hs.bmp
new file mode 100644
index 0000000000..018a3c4b16
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/pal8os2-hs.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/pal8os2-sz.bmp b/image/test/reftest/bmp/bmpsuite/q/pal8os2-sz.bmp
new file mode 100644
index 0000000000..7f1455d5ef
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/pal8os2-sz.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/pal8os2sp.bmp b/image/test/reftest/bmp/bmpsuite/q/pal8os2sp.bmp
new file mode 100644
index 0000000000..e532c89863
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/pal8os2sp.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/pal8os2v2-16.bmp b/image/test/reftest/bmp/bmpsuite/q/pal8os2v2-16.bmp
new file mode 100644
index 0000000000..95a1d2345a
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/pal8os2v2-16.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/pal8os2v2-40sz.bmp b/image/test/reftest/bmp/bmpsuite/q/pal8os2v2-40sz.bmp
new file mode 100644
index 0000000000..d1e66b615c
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/pal8os2v2-40sz.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/pal8os2v2-sz.bmp b/image/test/reftest/bmp/bmpsuite/q/pal8os2v2-sz.bmp
new file mode 100644
index 0000000000..6fe566e3fd
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/pal8os2v2-sz.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/pal8os2v2.bmp b/image/test/reftest/bmp/bmpsuite/q/pal8os2v2.bmp
new file mode 100644
index 0000000000..1324a40d00
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/pal8os2v2.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/pal8oversizepal.bmp b/image/test/reftest/bmp/bmpsuite/q/pal8oversizepal.bmp
new file mode 100644
index 0000000000..93b8187ca1
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/pal8oversizepal.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/pal8rlecut.bmp b/image/test/reftest/bmp/bmpsuite/q/pal8rlecut.bmp
new file mode 100644
index 0000000000..840d31cce6
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/pal8rlecut.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/pal8rlecut.png b/image/test/reftest/bmp/bmpsuite/q/pal8rlecut.png
new file mode 100644
index 0000000000..dfceeb568b
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/pal8rlecut.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/pal8rletrns.bmp b/image/test/reftest/bmp/bmpsuite/q/pal8rletrns.bmp
new file mode 100644
index 0000000000..a2af88d87c
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/pal8rletrns.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/pal8rletrns.png b/image/test/reftest/bmp/bmpsuite/q/pal8rletrns.png
new file mode 100644
index 0000000000..2d8e957f1f
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/pal8rletrns.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/reftest.list b/image/test/reftest/bmp/bmpsuite/q/reftest.list
new file mode 100644
index 0000000000..cead5df00b
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/reftest.list
@@ -0,0 +1,251 @@
+# bmpsuite "questionable" tests
+
+# See ../README.mozilla for details.
+
+# BMP: bihsize=40, 127 x 64, bpp=1, compression=0, colors=1
+# "1 bit/pixel paletted image, with only one color in the palette. The
+# documentation says that 1-bpp images have a palette size of 2 (not 'up to
+# 2'), but it would be silly for a viewer not to support a size of 1."
+# [We accept it. So does Chromium.]
+fuzzy(0-1,0-926) == pal1p1.bmp pal1p1.png
+
+# BMP: bihsize=64, 127 x 64, bpp=1, compression=3, colors=2
+# "My attempt to make a BMP file with Huffman 1D compression. It is quite
+# possibly incorrect. Even if everything else about it is correct, I have no
+# way to know whether it is black/white reversed."
+# [We reject it. So does Chromium.]
+== wrapper.html?pal1huff.bmp about:blank
+
+# BMP: bihsize=40, 127 x 64, bpp=2, compression=0, colors=4
+# "A paletted image with 2 bits/pixel. Usually only 1, 4, and 8 are allowed,
+# but 2 is legal on Windows CE."
+# [We reject it. Chromium accepts it.]
+== wrapper.html?pal2.bmp about:blank
+
+# BMP: bihsize=40, 127 x 64, bpp=2, compression=0, colors=4
+# "Same as pal2.bmp, but with a color palette instead of grayscale palette."
+# [We reject it. Chromium accepts it.]
+== wrapper.html?pal2color.bmp about:blank
+
+# BMP: bihsize=40, 127 x 64, bpp=4, compression=2, colors=13
+# "An RLE-compressed image that used 'delta' codes to skip over some pixels,
+# leaving them undefined. Some viewers make undefined pixels transparent,
+# others make them black, and others assign them palette color 0 (purple, in
+# this case)."
+# [We make the undefined pixels transparent. So does Chromium.]
+== pal4rletrns.bmp pal4rletrns.png
+
+# BMP: bihsize=40, 127 x 64, bpp=4, compression=2, colors=13
+# "An RLE-compressed image that uses “delta” codes, and early EOL & EOBMP
+# markers, to skip over some pixels."
+== pal4rlecut.bmp pal4rlecut.png
+
+# BMP: bihsize=40, 127 x 64, bpp=8, compression=1, colors=253
+# "8-bit version of q/pal4rletrns.bmp."
+# [Ditto.]
+== pal8rletrns.bmp pal8rletrns.png
+
+# BMP: bihsize=40, 127 x 64, bpp=8, compression=1, colors=253
+# "8-bit version of q/pal4rlecut.bmp."
+== pal8rlecut.bmp pal8rlecut.png
+
+# BMP: bihsize=40, 127 x 64, bpp=8, compression=0, colors=252
+# "A file with some unused bytes between the palette and the image. This is
+# probably valid, but I’m not 100% sure."
+# [We accept it. So does Chromium.]
+fuzzy(0-1,0-996) == pal8offs.bmp pal8.png
+
+# BMP: bihsize=40, 127 x 64, bpp=8, compression=0, colors=300
+# "An 8-bit image with 300 palette colors. This may be invalid, because the
+# documentation could be interpreted to imply that 8-bit images aren’t allowed
+# to have more than 256 colors."
+# [We accept it. So does Chromium.]
+fuzzy(0-1,0-996) == pal8oversizepal.bmp pal8.png
+
+# BMP: bihsize=12, 127 x 64, bpp=8, compression=0, colors=0
+# # "Some OS/2 BMP specifications say that the size field in the file header
+# should be set to the aggregate size of the file header and infoheader,
+# instead of the total file size. For OS/2v1, that means it will always be 26.
+# BMP decoders usually ignore this field, so it shouldn’t cause a problem."
+fuzzy(0-1,0-996) == pal8os2-sz.bmp pal8.png
+
+# BMP: bihsize=12, 127 x 64, bpp=8, compression=0, colors=0
+# "Some OS/2 BMP specifications define the fields at offsets 6 and 8 to be a
+# “hotspot” (for cursor graphics). Though the fields are not used in BMP files,
+# they are sometimes, as in this file, set to nonzero values. This should cause
+# no problems, except that it could prevent some programs from detecting this
+# file as a BMP file."
+fuzzy(0-1,0-996) == pal8os2-hs.bmp pal8.png
+
+# BMP: bihsize=12, 127 x 64, bpp=8, compression=0, colors=0
+# "An OS/2v1 with a less-than-full-sized palette. Probably not valid, but such
+# files have been seen in the wild."
+# [We reject it. Chromium accepts it.]
+fuzzy(0-245,0-8128) == wrapper.html?pal8os2sp.bmp about:blank
+
+# BMP: bihsize=64, 127 x 64, bpp=8, compression=0, colors=252
+# "My attempt to make an OS/2v2 bitmap."
+# [We accept it. So does Chromium.]
+fuzzy(0-1,0-996) == pal8os2v2.bmp pal8.png
+
+# BMP: bihsize=16, 127 x 64, bpp=8, compression=0, colors=0
+# "An OS/2v2 bitmap whose header has only 16 bytes, instead of the full 64."
+# [We accept it. So does Chromium.]
+fuzzy(0-1,0-996) == pal8os2v2-16.bmp pal8.png
+
+# BMP: bihsize=64, 127 x 64, bpp=8, compression=0, colors=252
+# "An OS/2v2 bitmap. Like q/pal8os2-sz.bmp, the size field is set to the size
+# of the headers (78), instead of the size of the file."
+fuzzy(0-1,0-996) == pal8os2v2-sz.bmp pal8.png
+
+# BMP: bihsize=40, 127 x 64, bpp=8, compression=0, colors=252
+# "An OS/2v2 bitmap, with a 40-byte header. Like q/pal8os2-sz.bmp, the size
+# field is set to the size of the headers (54), instead of the size of the
+# file. Except for that, this file cannot be distinguished from a Windows
+# BMPv3 file."
+fuzzy(0-1,0-996) == pal8os2v2-40sz.bmp pal8.png
+
+# BMP: bihsize=40, 127 x 64, bpp=16, compression=0, colors=0
+# "Same idea as q/rgb32fakealpha.bmp. The default 16-bit color format has one
+# unused bit per pixel, and in this image some of the unused bits are set to 1.
+# It’s possible that some viewers will interpret this image as having
+# transparency."
+fuzzy(0-1,0-1296) == rgb16faketrns.bmp rgb16.png
+
+# BMP: bihsize=40, 127 x 64, bpp=16, compression=3, colors=0
+# "An unusual and silly 16-bit image, with 2 red bits, 3 green bits, and 1 blue
+# bit. Most viewers do support this image, but the colors may be darkened with
+# a yellow-green shadow. That’s because they’re doing simple bit-shifting
+# (possibly including one round of bit replication), instead of proper
+# scaling."
+== rgb16-231.bmp rgb16-231.png
+
+# BMP: bihsize=40, 127 x 64, bpp=16, compression=3, colors=0
+# "Similar to q/rgb16-231.bmp, with 3 red bits, 10 green bits, and 3 blue
+# bits."
+fuzzy(0-1,0-689) == rgb16-3103.bmp rgb16-3103.png
+
+# BMP: bihsize=124, 127 x 64, bpp=16, compression=3, colors=0
+# "A 16-bit image with an alpha channel. There are 4 bits for each color
+# channel, and 4 bits for the alpha channel. It’s not clear if this is valid,
+# but I can’t find anything that suggests it isn’t."
+== rgba16-4444.bmp rgba16-4444.png
+
+# BMP: bihsize=124, 127 x 64, bpp=16, compression=3, colors=0
+# "Similar to q/rgba16-4444.bmp, with 5 red bits, 5 green bits, 5 blue bits,
+# and a 1-bit alpha channel."
+fuzzy(0-1,0-2203) == rgba16-5551.bmp rgba16-5551.png
+
+# BMP: bihsize=124, 127 x 64, bpp=16, compression=3, colors=0
+# "Similar to q/rgba16-4444.bmp, with 1 red bit, 9 green bits, 2 blue bits,
+# and 4 bits for the alpha channel."
+== rgba16-1924.bmp rgba16-1924.png
+
+# BMP: bihsize=40, 127 x 64, bpp=24, compression=0, colors=300
+# "A 24-bit image, with a palette containing 300 colors. The fact that the
+# palette has more than 256 colors may cause some viewers to complain, but the
+# documentation does not mention a size limit."
+# [We accept it. So does Chromium.]
+== rgb24largepal.bmp rgb24.png
+
+# BMP: bihsize=124, 127 x 64, bpp=24, compression=0, colors=0
+# "My attempt to make a BMP file with an embedded color profile."
+fuzzy(1-1,28-73) == rgb24prof.bmp rgb24.png
+
+# BMP: bihsize=124, 127 x 64, bpp=24, compression=0, colors=0
+# "This image tries to test whether color profiles are fully supported. It has
+# the red and green channels swapped, and an embedded color profile that tries
+# to swap them back. Support for this is uncommon."
+# [The image is significantly closer to the desired output than without color
+# management, but we seem to handle the profile wrong in QCMS. See bug 1619332.]
+fuzzy(10-10,6590-6597) == rgb24prof2.bmp rgb24.png
+
+# BMP: bihsize=124, 127 x 64, bpp=24, compression=0, colors=0
+# "My attempt to make a BMP file with a linked color profile."
+# [We accept it, though we don't do anything with the color profile. Chromium
+# also handles it.]
+== rgb24lprof.bmp rgb24.png
+
+# BMP: bihsize=124, 127 x 64, bpp=0, compression=4, colors=0
+# BMP: bihsize=124, 127 x 64, bpp=0, compression=5, colors=0
+# "My attempt to make BMP files with embedded JPEG and PNG images. These are
+# not likely to be supported by much of anything (they’re intended for
+# printers)."
+# [We reject them. Chromium accepts them.]
+== wrapper.html?rgb24jpeg.bmp about:blank
+== wrapper.html?rgb24png.bmp about:blank
+
+# BMP: bihsize=64, 127 x 64, bpp=24, compression=4, colors=0
+# "An OS/2v2 bitmap with RLE24 compression. This image uses a limited number
+# of colors, just to make it more compressible."
+# [We reject it. Chromium accepts it.]
+== wrapper.html?rgb24rle24.bmp about:blank
+
+# BMP: bihsize=52, 127 x 64, bpp=32, compression=3, colors=0
+# "Similar to g/rgb32bf.bmp, but with a 52-byte “BITMAPV2INFOHEADER”. This is
+# an uncommon version of BMP, and I can’t confirm that this file is correct."
+# [We reject it. Chromium accepts it.]
+== wrapper.html?rgb32h52.bmp about:blank
+
+# BMP: bihsize=124, 127 x 64, bpp=32, compression=3, colors=0
+# "Color channels are the same size and order as rgb32bfdef.bmp, but they use
+# the highest available bits, instead of the lowest (or vice versa, depending
+# on your byte-order perspective)."
+== rgb32-xbgr.bmp rgb24.png
+
+# BMP: bihsize=40, 127 x 64, bpp=32, compression=0, colors=0
+# "Same as g/rgb32.bmp, except that the unused bits are set to something other
+# than 0. If the image becomes transparent toward the bottom, it probably means
+# the viewer uses heuristics to guess whether the undefined data represents
+# transparency."
+# [We don't apply transparency here. Chromium does the same.]
+== rgb32fakealpha.bmp rgb24.png
+
+# BMP: bihsize=40, 127 x 64, bpp=32, compression=3, colors=0
+# "A 32 bits/pixel image, with all 32 bits used: 11 each for red and green, and
+# 10 for blue. As far as I know, this is perfectly valid, but it is unusual."
+fuzzy(0-1,0-1408) == rgb32-111110.bmp rgb24.png
+
+# BMP: bihsize=40, 127 x 64, bpp=32, compression=3, colors=0
+# "A 32 bits/pixel image, with 7 bits for red, 18 for green, and 7 for blue."
+fuzzy(0-1,0-753) == rgb32-7187.bmp rgb32-7187.png
+
+# BMP: bihsize=124, 127 x 64, bpp=32, compression=3, colors=0
+# "A BMP with an alpha channel. Transparency is barely documented, so it’s
+# possible that this file is not correctly formed. The color channels are in an
+# unusual order, to prevent viewers from passing this test by making a lucky
+# guess."
+== rgba32-1.bmp rgba32.png
+
+# BMP: bihsize=124, 127 x 64, bpp=32, compression=3, colors=0
+# "Same as rgba32-1.bmp, but with the color channels in an unusual order, to
+# prevent viewers from passing this test by making a lucky guess."
+== rgba32-2.bmp rgba32.png
+
+# BMP: bihsize=124, 127 x 64, bpp=32, compression=3, colors=0
+# "A 32 bits/pixel image, with 10 bits for red, 10 for green, 10 for blue, and
+# 2 for alpha."
+fuzzy(0-1,0-1296) == rgba32-1010102.bmp rgba32-1010102.png
+
+# BMP: bihsize=124, 127 x 64, bpp=32, compression=3, colors=0
+# "A 32 bits/pixel image, with 8 bits for red, 12 for green, 8 for blue, and 4
+# for alpha."
+fuzzy(0-1,0-753) == rgba32-81284.bmp rgba32-81284.png
+
+# BMP: bihsize=124, 127 x 64, bpp=32, compression=3, colors=0
+# "A 32 bits/pixel image, with 6 bits for red, 17 for green, 5 for blue, and 4
+# for alpha."
+fuzzy(0-1,0-1554) == rgba32-61754.bmp rgba32-61754.png
+
+# BMP: bihsize=40, 127 x 64, bpp=32, compression=6, colors=0
+# "An image of type BI_ALPHABITFIELDS. Supposedly, this was used on Windows CE.
+# I don’t know whether it is constructed correctly."
+# [We reject it. Chromium accepts it.]
+== wrapper.html?rgba32abf.bmp about:blank
+
+# BMP: bihsize=56, 127 x 64, bpp=32, compression=3, colors=0
+# "Similar to q/rgba32.bmp, but with a 56-byte “BITMAPV3INFOHEADER”. This is an
+# uncommon version of BMP, and I can’t confirm that this file is correct."
+# [We reject it. Chromium accepts it.]
+== wrapper.html?rgba32h56.bmp about:blank
+
diff --git a/image/test/reftest/bmp/bmpsuite/q/rgb16-231.bmp b/image/test/reftest/bmp/bmpsuite/q/rgb16-231.bmp
new file mode 100644
index 0000000000..6300f69f0c
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/rgb16-231.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/rgb16-231.png b/image/test/reftest/bmp/bmpsuite/q/rgb16-231.png
new file mode 100644
index 0000000000..76efe526e5
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/rgb16-231.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/rgb16-3103.bmp b/image/test/reftest/bmp/bmpsuite/q/rgb16-3103.bmp
new file mode 100644
index 0000000000..6e01226029
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/rgb16-3103.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/rgb16-3103.png b/image/test/reftest/bmp/bmpsuite/q/rgb16-3103.png
new file mode 100644
index 0000000000..79ba23c834
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/rgb16-3103.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/rgb16.png b/image/test/reftest/bmp/bmpsuite/q/rgb16.png
new file mode 100644
index 0000000000..d9545840ab
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/rgb16.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/rgb16faketrns.bmp b/image/test/reftest/bmp/bmpsuite/q/rgb16faketrns.bmp
new file mode 100644
index 0000000000..62fb393bb9
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/rgb16faketrns.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/rgb24.png b/image/test/reftest/bmp/bmpsuite/q/rgb24.png
new file mode 100644
index 0000000000..86a9c945b0
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/rgb24.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/rgb24jpeg.bmp b/image/test/reftest/bmp/bmpsuite/q/rgb24jpeg.bmp
new file mode 100644
index 0000000000..87d73d75b8
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/rgb24jpeg.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/rgb24largepal.bmp b/image/test/reftest/bmp/bmpsuite/q/rgb24largepal.bmp
new file mode 100644
index 0000000000..d5e418c2d4
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/rgb24largepal.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/rgb24lprof.bmp b/image/test/reftest/bmp/bmpsuite/q/rgb24lprof.bmp
new file mode 100644
index 0000000000..b868b88f20
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/rgb24lprof.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/rgb24png.bmp b/image/test/reftest/bmp/bmpsuite/q/rgb24png.bmp
new file mode 100644
index 0000000000..e87ec7adda
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/rgb24png.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/rgb24prof.bmp b/image/test/reftest/bmp/bmpsuite/q/rgb24prof.bmp
new file mode 100644
index 0000000000..627e676eae
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/rgb24prof.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/rgb24prof2.bmp b/image/test/reftest/bmp/bmpsuite/q/rgb24prof2.bmp
new file mode 100644
index 0000000000..f9f61b8ee3
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/rgb24prof2.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/rgb24rle24.bmp b/image/test/reftest/bmp/bmpsuite/q/rgb24rle24.bmp
new file mode 100644
index 0000000000..360aee649c
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/rgb24rle24.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/rgb32-111110.bmp b/image/test/reftest/bmp/bmpsuite/q/rgb32-111110.bmp
new file mode 100644
index 0000000000..ec07d89b5b
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/rgb32-111110.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/rgb32-7187.bmp b/image/test/reftest/bmp/bmpsuite/q/rgb32-7187.bmp
new file mode 100644
index 0000000000..887ba52c91
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/rgb32-7187.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/rgb32-7187.png b/image/test/reftest/bmp/bmpsuite/q/rgb32-7187.png
new file mode 100644
index 0000000000..a1da44d6be
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/rgb32-7187.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/rgb32-xbgr.bmp b/image/test/reftest/bmp/bmpsuite/q/rgb32-xbgr.bmp
new file mode 100644
index 0000000000..c6c05e1480
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/rgb32-xbgr.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/rgb32fakealpha.bmp b/image/test/reftest/bmp/bmpsuite/q/rgb32fakealpha.bmp
new file mode 100644
index 0000000000..cb544da5b6
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/rgb32fakealpha.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/rgb32h52.bmp b/image/test/reftest/bmp/bmpsuite/q/rgb32h52.bmp
new file mode 100644
index 0000000000..db6e4538ef
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/rgb32h52.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/rgba16-1924.bmp b/image/test/reftest/bmp/bmpsuite/q/rgba16-1924.bmp
new file mode 100644
index 0000000000..6564098a4d
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/rgba16-1924.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/rgba16-1924.png b/image/test/reftest/bmp/bmpsuite/q/rgba16-1924.png
new file mode 100644
index 0000000000..0fc182f153
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/rgba16-1924.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/rgba16-4444.bmp b/image/test/reftest/bmp/bmpsuite/q/rgba16-4444.bmp
new file mode 100644
index 0000000000..051ff23589
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/rgba16-4444.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/rgba16-4444.png b/image/test/reftest/bmp/bmpsuite/q/rgba16-4444.png
new file mode 100644
index 0000000000..bfeda6faed
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/rgba16-4444.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/rgba16-5551.bmp b/image/test/reftest/bmp/bmpsuite/q/rgba16-5551.bmp
new file mode 100644
index 0000000000..73e2cd533f
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/rgba16-5551.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/rgba16-5551.png b/image/test/reftest/bmp/bmpsuite/q/rgba16-5551.png
new file mode 100644
index 0000000000..613126a8ab
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/rgba16-5551.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/rgba32-1.bmp b/image/test/reftest/bmp/bmpsuite/q/rgba32-1.bmp
new file mode 100644
index 0000000000..3c1e2648fc
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/rgba32-1.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/rgba32-1010102.bmp b/image/test/reftest/bmp/bmpsuite/q/rgba32-1010102.bmp
new file mode 100644
index 0000000000..1a918cebf5
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/rgba32-1010102.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/rgba32-1010102.png b/image/test/reftest/bmp/bmpsuite/q/rgba32-1010102.png
new file mode 100644
index 0000000000..a472fbc799
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/rgba32-1010102.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/rgba32-2.bmp b/image/test/reftest/bmp/bmpsuite/q/rgba32-2.bmp
new file mode 100644
index 0000000000..829c7c7e34
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/rgba32-2.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/rgba32-61754.bmp b/image/test/reftest/bmp/bmpsuite/q/rgba32-61754.bmp
new file mode 100644
index 0000000000..d5936fd20b
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/rgba32-61754.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/rgba32-61754.png b/image/test/reftest/bmp/bmpsuite/q/rgba32-61754.png
new file mode 100644
index 0000000000..c593b14c66
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/rgba32-61754.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/rgba32-81284.bmp b/image/test/reftest/bmp/bmpsuite/q/rgba32-81284.bmp
new file mode 100644
index 0000000000..1f9fc29d6b
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/rgba32-81284.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/rgba32-81284.png b/image/test/reftest/bmp/bmpsuite/q/rgba32-81284.png
new file mode 100644
index 0000000000..c958cd36fc
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/rgba32-81284.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/rgba32.png b/image/test/reftest/bmp/bmpsuite/q/rgba32.png
new file mode 100644
index 0000000000..25e542a655
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/rgba32.png
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/rgba32abf.bmp b/image/test/reftest/bmp/bmpsuite/q/rgba32abf.bmp
new file mode 100644
index 0000000000..d9bb0189c4
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/rgba32abf.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/rgba32h56.bmp b/image/test/reftest/bmp/bmpsuite/q/rgba32h56.bmp
new file mode 100644
index 0000000000..343baa3300
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/rgba32h56.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/q/wrapper.html b/image/test/reftest/bmp/bmpsuite/q/wrapper.html
new file mode 100644
index 0000000000..22b74c8fc1
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/q/wrapper.html
@@ -0,0 +1,28 @@
+<!DOCTYPE HTML>
+<html class="reftest-wait">
+<head>
+<title>Image reftest wrapper</title>
+<style type="text/css">
+ #image1 { background-color: rgb(10, 100, 250); }
+</style>
+<script>
+ // The image is loaded async after the page loads
+ // wait for it to finish loading
+ function onImageLoad() {
+ document.documentElement.removeAttribute("class");
+ };
+</script>
+</head>
+<body>
+<!-- non-empty alt to avoid the broken image icon -->
+<img id="image1" alt=" ">
+<script>
+ // Use as "wrapper.html?image.png"
+ var imgURL = document.location.search.substr(1);
+ document.images[0].onload = onImageLoad;
+ document.images[0].onerror = onImageLoad;
+ document.images[0].src = imgURL;
+</script>
+</body>
+</html>
+
diff --git a/image/test/reftest/bmp/bmpsuite/reftest.list b/image/test/reftest/bmp/bmpsuite/reftest.list
new file mode 100644
index 0000000000..532ea5ed93
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/reftest.list
@@ -0,0 +1,8 @@
+# bmpsuite tests
+
+# See README.mozilla for details about these tests.
+
+include g/reftest.list
+include q/reftest.list
+include b/reftest.list
+include x/reftest.list
diff --git a/image/test/reftest/bmp/bmpsuite/x/ba-bm.bmp b/image/test/reftest/bmp/bmpsuite/x/ba-bm.bmp
new file mode 100644
index 0000000000..d2615bde3e
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/x/ba-bm.bmp
Binary files differ
diff --git a/image/test/reftest/bmp/bmpsuite/x/reftest.list b/image/test/reftest/bmp/bmpsuite/x/reftest.list
new file mode 100644
index 0000000000..3c93479292
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/x/reftest.list
@@ -0,0 +1,10 @@
+# bmpsuite 'files in formats related to BMP, that you might not consider to
+# truly be in "BMP format"' tests
+
+# See ../README.mozilla for details.
+
+# "This image uses the OS/2v2 “Bitmap Array” (BA) container format. Although a
+# BA file may contain multiple images, this file has only one."
+== wrapper.html?ba-bm.bmp about:blank
+
+
diff --git a/image/test/reftest/bmp/bmpsuite/x/wrapper.html b/image/test/reftest/bmp/bmpsuite/x/wrapper.html
new file mode 100644
index 0000000000..f6c3ade538
--- /dev/null
+++ b/image/test/reftest/bmp/bmpsuite/x/wrapper.html
@@ -0,0 +1,28 @@
+<!DOCTYPE HTML>
+<html class="reftest-wait">
+<head>
+<title>Image reftest wrapper</title>
+<style type="text/css">
+ #image1 { background-color: rgb(10, 100, 250); }
+</style>
+<script>
+ // The image is loaded async after the page loads
+ // wait for it to finish loading
+ function onImageLoad() {
+ document.documentElement.removeAttribute("class");
+ };
+</script>
+</head>
+<body>
+<!-- non-empty alt to avoid the broken image icon -->
+<img id="image1" alt=" ">
+<script>
+ // Use as "wrapper.html?image.png"
+ var imgURL = document.location.search.substr(1);
+ document.images[0].onload = onImageLoad;
+ document.images[0].onerror = onImageLoad;
+ document.images[0].src = imgURL;
+</script>
+</body>
+</html>
+
diff --git a/image/test/reftest/bmp/reftest.list b/image/test/reftest/bmp/reftest.list
new file mode 100644
index 0000000000..87183e6b2f
--- /dev/null
+++ b/image/test/reftest/bmp/reftest.list
@@ -0,0 +1,16 @@
+# BMP tests
+
+include bmp-1bpp/reftest.list
+include bmp-4bpp/reftest.list
+include bmp-8bpp/reftest.list
+include bmp-24bpp/reftest.list
+include bmp-corrupted/reftest.list
+include bmpsuite/reftest.list
+
+# Two bmp files where the offset to the start of the image data in the file
+# is past the end of the file. In 1240629-1.bmp the offset us uint32_max,
+# so we are testing that we don't try to allocate a buffer that size (and
+# fail on 32 bit platforms) and declare the image in error state. If in the
+# future we decide that such bmps (offset past the end of the file) are
+# invalid the test will still pass, but won't be testing much.
+== 1240629-1.bmp 1240629-2.bmp