diff options
-rw-r--r-- | Makefile | 4 | ||||
-rw-r--r-- | include/libnsbmp.h | 2 | ||||
-rw-r--r-- | src/libnsbmp.c | 14 | ||||
-rw-r--r-- | test/decode_bmp.c | 14 | ||||
-rw-r--r-- | test/decode_ico.c | 10 |
5 files changed, 13 insertions, 31 deletions
@@ -2,11 +2,11 @@ # # Makefile for libnsbmp # -# Copyright 2009-2015 John-Mark Bell <jmb@netsurf-browser.org> +# Copyright 2009-2020 John-Mark Bell <jmb@netsurf-browser.org> # Component settings COMPONENT := nsbmp -COMPONENT_VERSION := 0.1.5 +COMPONENT_VERSION := 0.1.7 # Default to a static library COMPONENT_TYPE ?= lib-static diff --git a/include/libnsbmp.h b/include/libnsbmp.h index 7e90b4a..ad683f0 100644 --- a/include/libnsbmp.h +++ b/include/libnsbmp.h @@ -62,8 +62,6 @@ typedef struct bmp_bitmap_callback_vt_s { bmp_bitmap_cb_destroy bitmap_destroy; /** Return a pointer to the pixel data in a bitmap. */ bmp_bitmap_cb_get_buffer bitmap_get_buffer; - /** Find the width of a pixel row in bytes. */ - bmp_bitmap_cb_get_bpp bitmap_get_bpp; } bmp_bitmap_callback_vt; /** diff --git a/src/libnsbmp.c b/src/libnsbmp.c index f6ebd6c..b4da553 100644 --- a/src/libnsbmp.c +++ b/src/libnsbmp.c @@ -530,7 +530,7 @@ static bmp_result bmp_decode_rgb32(bmp_image *bmp, uint8_t **start, int bytes) assert(bmp->bpp == 32); data = *start; - swidth = bmp->bitmap_callbacks.bitmap_get_bpp(bmp->bitmap) * bmp->width; + swidth = sizeof(uint32_t) * bmp->width; top = bmp->bitmap_callbacks.bitmap_get_buffer(bmp->bitmap); if (!top) return BMP_INSUFFICIENT_MEMORY; @@ -612,7 +612,7 @@ static bmp_result bmp_decode_rgb24(bmp_image *bmp, uint8_t **start, int bytes) assert(bmp->bpp == 24); data = *start; - swidth = bmp->bitmap_callbacks.bitmap_get_bpp(bmp->bitmap) * bmp->width; + swidth = sizeof(uint32_t) * bmp->width; top = bmp->bitmap_callbacks.bitmap_get_buffer(bmp->bitmap); if (!top) { return BMP_INSUFFICIENT_MEMORY; @@ -683,7 +683,7 @@ static bmp_result bmp_decode_rgb16(bmp_image *bmp, uint8_t **start, int bytes) uint16_t word; data = *start; - swidth = bmp->bitmap_callbacks.bitmap_get_bpp(bmp->bitmap) * bmp->width; + swidth = sizeof(uint32_t) * bmp->width; top = bmp->bitmap_callbacks.bitmap_get_buffer(bmp->bitmap); if (!top) return BMP_INSUFFICIENT_MEMORY; @@ -777,7 +777,7 @@ static bmp_result bmp_decode_rgb(bmp_image *bmp, uint8_t **start, int bytes) bit_shifts[i] = 8 - ((i + 1) * bmp->bpp); data = *start; - swidth = bmp->bitmap_callbacks.bitmap_get_bpp(bmp->bitmap) * bmp->width; + swidth = sizeof(uint32_t) * bmp->width; top = bmp->bitmap_callbacks.bitmap_get_buffer(bmp->bitmap); if (!top) return BMP_INSUFFICIENT_MEMORY; @@ -842,7 +842,7 @@ static bmp_result bmp_decode_mask(bmp_image *bmp, uint8_t *data, int bytes) uint32_t x, y, swidth; uint32_t cur_byte = 0; - swidth = bmp->bitmap_callbacks.bitmap_get_bpp(bmp->bitmap) * bmp->width; + swidth = sizeof(uint32_t) * bmp->width; top = bmp->bitmap_callbacks.bitmap_get_buffer(bmp->bitmap); if (!top) return BMP_INSUFFICIENT_MEMORY; @@ -897,7 +897,7 @@ bmp_decode_rle8(bmp_image *bmp, uint8_t *data, int bytes) if (bmp->ico) return BMP_DATA_ERROR; - swidth = bmp->bitmap_callbacks.bitmap_get_bpp(bmp->bitmap) * bmp->width; + swidth = sizeof(uint32_t) * bmp->width; top = bmp->bitmap_callbacks.bitmap_get_buffer(bmp->bitmap); if (!top) return BMP_INSUFFICIENT_MEMORY; @@ -1051,7 +1051,7 @@ bmp_decode_rle4(bmp_image *bmp, uint8_t *data, int bytes) if (bmp->ico) return BMP_DATA_ERROR; - swidth = bmp->bitmap_callbacks.bitmap_get_bpp(bmp->bitmap) * bmp->width; + swidth = sizeof(uint32_t) * bmp->width; top = bmp->bitmap_callbacks.bitmap_get_buffer(bmp->bitmap); if (!top) return BMP_INSUFFICIENT_MEMORY; diff --git a/test/decode_bmp.c b/test/decode_bmp.c index 68de542..a0b02e8 100644 --- a/test/decode_bmp.c +++ b/test/decode_bmp.c @@ -17,7 +17,7 @@ #include <sys/stat.h> #include "../include/libnsbmp.h" -#define BYTES_PER_PIXEL 4 +#define BYTES_PER_PIXEL sizeof(uint32_t) #define MAX_IMAGE_BYTES (48 * 1024 * 1024) #define TRANSPARENT_COLOR 0xffffffff @@ -25,8 +25,8 @@ static void *bitmap_create(int width, int height, unsigned int state) { (void) state; /* unused */ - /* ensure a stupidly large (>50Megs or so) bitmap is not created */ - if (((long long)width * (long long)height) > (MAX_IMAGE_BYTES/BYTES_PER_PIXEL)) { + /* Ensure a stupidly large bitmap is not created */ + if (width > 4096 || height > 4096) { return NULL; } return calloc(width * height, BYTES_PER_PIXEL); @@ -40,13 +40,6 @@ static unsigned char *bitmap_get_buffer(void *bitmap) } -static size_t bitmap_get_bpp(void *bitmap) -{ - (void) bitmap; /* unused */ - return BYTES_PER_PIXEL; -} - - static void bitmap_destroy(void *bitmap) { assert(bitmap); @@ -144,7 +137,6 @@ int main(int argc, char *argv[]) bitmap_create, bitmap_destroy, bitmap_get_buffer, - bitmap_get_bpp }; bmp_result code; bmp_image bmp; diff --git a/test/decode_ico.c b/test/decode_ico.c index 5dbc7a5..94db57e 100644 --- a/test/decode_ico.c +++ b/test/decode_ico.c @@ -24,7 +24,7 @@ /* Currently the library returns the data in RGBA format, * so there are 4 bytes per pixel */ -#define BYTES_PER_PIXEL 4 +#define BYTES_PER_PIXEL sizeof(uint32_t) /* White with alpha masking. */ #define TRANSPARENT_COLOR 0xffffffff @@ -43,13 +43,6 @@ static unsigned char *bitmap_get_buffer(void *bitmap) } -static size_t bitmap_get_bpp(void *bitmap) -{ - (void) bitmap; /* unused */ - return BYTES_PER_PIXEL; -} - - static void bitmap_destroy(void *bitmap) { assert(bitmap); @@ -175,7 +168,6 @@ int main(int argc, char *argv[]) bitmap_create, bitmap_destroy, bitmap_get_buffer, - bitmap_get_bpp }; uint16_t width, height; ico_collection ico; |