From 3ba0f35636f0a826541753806aa41f74566ad2f3 Mon Sep 17 00:00:00 2001 From: Denis Pauk Date: Mon, 15 Jul 2024 00:39:15 +0300 Subject: [PATCH] images: pcx make buffer const --- src/client/vid/image.c | 67 +++++++++++++++++++----------------------- 1 file changed, 30 insertions(+), 37 deletions(-) diff --git a/src/client/vid/image.c b/src/client/vid/image.c index 66dfaa00..3d427994 100644 --- a/src/client/vid/image.c +++ b/src/client/vid/image.c @@ -186,11 +186,12 @@ static void PCX_Decode(const char *name, const byte *raw, int len, byte **pic, byte **palette, int *width, int *height, int *bitesPerPixel) { - pcx_t *pcx; + const pcx_t *pcx; int full_size; - int pcx_width, pcx_height; + int pcx_width, pcx_height, bytes_per_line; qboolean image_issues = false; byte *out, *pix; + const byte *data; *pic = NULL; *bitesPerPixel = 8; @@ -206,21 +207,13 @@ PCX_Decode(const char *name, const byte *raw, int len, byte **pic, byte **palett } /* parse the PCX file */ - pcx = (pcx_t *)raw; + pcx = (const pcx_t *)raw; - pcx->xmin = LittleShort(pcx->xmin); - pcx->ymin = LittleShort(pcx->ymin); - pcx->xmax = LittleShort(pcx->xmax); - pcx->ymax = LittleShort(pcx->ymax); - pcx->hres = LittleShort(pcx->hres); - pcx->vres = LittleShort(pcx->vres); - pcx->bytes_per_line = LittleShort(pcx->bytes_per_line); - pcx->palette_type = LittleShort(pcx->palette_type); + data = &pcx->data; - raw = &pcx->data; - - pcx_width = pcx->xmax - pcx->xmin; - pcx_height = pcx->ymax - pcx->ymin; + bytes_per_line = LittleShort(pcx->bytes_per_line); + pcx_width = LittleShort(pcx->xmax) - LittleShort(pcx->xmin); + pcx_height = LittleShort(pcx->ymax) - LittleShort(pcx->ymin); if ((pcx->manufacturer != 0x0a) || (pcx->version != 5) || @@ -265,29 +258,29 @@ PCX_Decode(const char *name, const byte *raw, int len, byte **pic, byte **palett int x, y; byte *line; - if (pcx->bytes_per_line <= pcx_width) + if (bytes_per_line <= pcx_width) { - pcx->bytes_per_line = pcx_width + 1; + bytes_per_line = pcx_width + 1; image_issues = true; } /* clean image alpha */ memset(pix, 255, full_size); - line = malloc(pcx->bytes_per_line * pcx->color_planes); + line = malloc(bytes_per_line * pcx->color_planes); for (y = 0; y <= pcx_height; y++, pix += (pcx_width + 1) * 4) { - raw = PCX_RLE_Decode(line, line + (pcx_width + 1) * pcx->color_planes, - raw, (byte *)pcx + len, - pcx->bytes_per_line * pcx->color_planes); + data = PCX_RLE_Decode(line, line + (pcx_width + 1) * pcx->color_planes, + data, (byte *)pcx + len, + bytes_per_line * pcx->color_planes); for (x = 0; x <= pcx_width; x++) { int j; for (j = 0; j < pcx->color_planes; j++) { - pix[4 * x + j] = line[x + pcx->bytes_per_line * j]; + pix[4 * x + j] = line[x + bytes_per_line * j]; } } } @@ -313,15 +306,15 @@ PCX_Decode(const char *name, const byte *raw, int len, byte **pic, byte **palett memcpy(*palette, pcx->palette, sizeof(pcx->palette)); } - line = malloc(pcx->bytes_per_line * pcx->color_planes); + line = malloc(bytes_per_line * pcx->color_planes); for (y = 0; y <= pcx_height; y++, pix += pcx_width + 1) { int x; - raw = PCX_RLE_Decode(line, line + pcx->bytes_per_line * pcx->color_planes, - raw, (byte *)pcx + len, - pcx->bytes_per_line * pcx->color_planes); + data = PCX_RLE_Decode(line, line + bytes_per_line * pcx->color_planes, + data, (byte *)pcx + len, + bytes_per_line * pcx->color_planes); for (x = 0; x <= pcx_width; x++) { @@ -332,7 +325,7 @@ PCX_Decode(const char *name, const byte *raw, int len, byte **pic, byte **palett for (i = pcx->color_planes - 1; i >= 0; i--) { v <<= 1; - v += (line[i * pcx->bytes_per_line + (x >> 3)] & m) ? 1 : 0; + v += (line[i * bytes_per_line + (x >> 3)] & m) ? 1 : 0; } pix[x] = v; } @@ -369,17 +362,17 @@ PCX_Decode(const char *name, const byte *raw, int len, byte **pic, byte **palett } } - if (pcx->bytes_per_line <= pcx_width) + if (bytes_per_line <= pcx_width) { - pcx->bytes_per_line = pcx_width + 1; + bytes_per_line = pcx_width + 1; image_issues = true; } for (y = 0; y <= pcx_height; y++, pix += pcx_width + 1) { - raw = PCX_RLE_Decode(pix, pix + pcx_width + 1, - raw, (byte *)pcx + len, - pcx->bytes_per_line); + data = PCX_RLE_Decode(pix, pix + pcx_width + 1, + data, (byte *)pcx + len, + bytes_per_line); } } else @@ -402,15 +395,15 @@ PCX_Decode(const char *name, const byte *raw, int len, byte **pic, byte **palett memcpy(*palette, pcx->palette, sizeof(pcx->palette)); } - line = malloc(pcx->bytes_per_line); + line = malloc(bytes_per_line); for (y = 0; y <= pcx_height; y++, pix += pcx_width + 1) { int x, mask, div; - raw = PCX_RLE_Decode(line, line + pcx->bytes_per_line, - raw, (byte *)pcx + len, - pcx->bytes_per_line); + data = PCX_RLE_Decode(line, line + bytes_per_line, + data, (byte *)pcx + len, + bytes_per_line); mask = (1 << pcx->bits_per_pixel) - 1; div = 8 / pcx->bits_per_pixel; @@ -442,7 +435,7 @@ PCX_Decode(const char *name, const byte *raw, int len, byte **pic, byte **palett *pic = NULL; } - if (raw - (byte *)pcx > len) + if (data - (byte *)pcx > len) { Com_DPrintf("%s: %s file was malformed\n", __func__, name); free(*pic);