diff options
| author | Rémi Verschelde <rverschelde@gmail.com> | 2019-07-17 21:18:10 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-07-17 21:18:10 +0200 |
| commit | 72b5a9e4764d711b9983bb3530e21fb17fb026ca (patch) | |
| tree | 3b3611a5f7385783ae1f803ad8e0290a884de738 /modules/bmp/image_loader_bmp.cpp | |
| parent | fa4cb80a1eee24dec947ed5a262a917518d6c799 (diff) | |
| parent | 422a8ffe02c5b914739bbc8ad07057c323ba11e8 (diff) | |
Merge pull request #30655 from Xrayez/bmp-compression-fix
Fix BMP loader to distinguish between compression types
Diffstat (limited to 'modules/bmp/image_loader_bmp.cpp')
| -rw-r--r-- | modules/bmp/image_loader_bmp.cpp | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/modules/bmp/image_loader_bmp.cpp b/modules/bmp/image_loader_bmp.cpp index bd7aeeebeb..88732dff33 100644 --- a/modules/bmp/image_loader_bmp.cpp +++ b/modules/bmp/image_loader_bmp.cpp @@ -47,9 +47,6 @@ Error ImageLoaderBMP::convert_to_image(Ref<Image> p_image, size_t height = (size_t)p_header.bmp_info_header.bmp_height; size_t bits_per_pixel = (size_t)p_header.bmp_info_header.bmp_bit_count; - if (p_header.bmp_info_header.bmp_compression != BI_RGB) { - err = FAILED; - } // Check whether we can load it if (bits_per_pixel == 1) { @@ -238,11 +235,16 @@ Error ImageLoaderBMP::load_image(Ref<Image> p_image, FileAccess *f, bmp_header.bmp_info_header.bmp_colors_used = f->get_32(); bmp_header.bmp_info_header.bmp_important_colors = f->get_32(); - // Compressed bitmaps not supported, stop parsing - if (bmp_header.bmp_info_header.bmp_compression != BI_RGB) { - ERR_EXPLAIN("Unsupported bmp file: " + f->get_path()); - f->close(); - ERR_FAIL_V(ERR_UNAVAILABLE); + switch (bmp_header.bmp_info_header.bmp_compression) { + case BI_RLE8: + case BI_RLE4: + case BI_CMYKRLE8: + case BI_CMYKRLE4: { + // Stop parsing + ERR_EXPLAIN("Compressed BMP files are not supported: " + f->get_path()); + f->close(); + ERR_FAIL_V(ERR_UNAVAILABLE); + } break; } // Don't rely on sizeof(bmp_file_header) as structure padding // adds 2 bytes offset leading to misaligned color table reading |