Skip to content

Commit cdd64f5

Browse files
zouyonghehpjansson
authored andcommitted
chafa: Move image size helper to util
1 parent 88b7371 commit cdd64f5

10 files changed

Lines changed: 35 additions & 40 deletions

tests/Makefile.am

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
AUTOMAKE_OPTIONS = subdir-objects
2+
13
SUBDIRS = data
24

35
AM_CFLAGS = $(LIBCHAFA_CFLAGS) $(GLIB_CFLAGS)
@@ -26,7 +28,8 @@ canvas_test_SOURCES = \
2628
canvas-test.c
2729

2830
loader_arithmetic_test_SOURCES = \
29-
loader-arithmetic-test.c
31+
loader-arithmetic-test.c \
32+
$(top_srcdir)/tools/chafa/chicle-util.c
3033

3134
term_info_test_SOURCES = \
3235
term-info-test.c

tests/loader-arithmetic-test.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#include "config.h"
22

33
#include <chafa.h>
4-
#include "chicle-image-size.h"
4+
#include "chicle-util.h"
55

66
#define IMAGE_BUFFER_SIZE_MAX (0xffffffffU >> 2)
77

tools/chafa/Makefile.am

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ chafa_SOURCES = \
1313
chicle-gif-loader.h \
1414
chicle-grid-layout.c \
1515
chicle-grid-layout.h \
16-
chicle-image-size.h \
1716
chicle-media-loader.c \
1817
chicle-media-loader.h \
1918
chicle-media-pipeline.c \

tools/chafa/chicle-avif-loader.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
#include <chafa.h>
3232
#include <avif/avif.h>
3333
#include "chicle-avif-loader.h"
34-
#include "chicle-image-size.h"
3534
#include "chicle-util.h"
3635

3736
#define N_CHANNELS 4

tools/chafa/chicle-heif-loader.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
#include <chafa.h>
3232
#include <libheif/heif.h>
3333
#include "chicle-heif-loader.h"
34-
#include "chicle-image-size.h"
34+
#include "chicle-util.h"
3535

3636
#define BYTES_PER_PIXEL 4
3737
#define IMAGE_BUFFER_SIZE_MAX (0xffffffffU >> 2)

tools/chafa/chicle-image-size.h

Lines changed: 0 additions & 33 deletions
This file was deleted.

tools/chafa/chicle-jxl-loader.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@
2525
#include <jxl/resizable_parallel_runner.h>
2626
#include <stdio.h>
2727

28-
#include "chicle-image-size.h"
2928
#include "chicle-jxl-loader.h"
29+
#include "chicle-util.h"
3030

3131
#define IMAGE_BUFFER_SIZE_MAX (0xffffffffU >> 2)
3232

tools/chafa/chicle-util.c

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,31 @@ chicle_rotate_image (gpointer *src, guint *width, guint *height, guint *rowstrid
173173
*rowstride = dest_rowstride;
174174
}
175175

176+
gboolean
177+
chicle_checked_image_buffer_size (guint64 width, guint64 height, guint64 n_channels,
178+
guint64 max_size, gsize *size_out)
179+
{
180+
guint64 size;
181+
182+
if (width < 1 || height < 1 || n_channels < 1)
183+
return FALSE;
184+
if (width > G_MAXSIZE / height)
185+
return FALSE;
186+
187+
size = width * height;
188+
if (size > G_MAXSIZE / n_channels)
189+
return FALSE;
190+
191+
size *= n_channels;
192+
if (size > max_size)
193+
return FALSE;
194+
195+
if (size_out)
196+
*size_out = (gsize) size;
197+
198+
return TRUE;
199+
}
200+
176201
/* Replaces control characters (C0: U+0000..U+001F, U+007F; C1:
177202
* U+0080..U+009F) with '?' so attacker-controlled input cannot inject
178203
* terminal escape sequences when this string is later printed to a

tools/chafa/chicle-util.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ ChicleRotationType;
4545
ChicleRotationType chicle_invert_rotation (ChicleRotationType rot);
4646
void chicle_rotate_image (gpointer *src, guint *width, guint *height, guint *rowstride,
4747
guint n_channels, ChicleRotationType rot);
48+
gboolean chicle_checked_image_buffer_size (guint64 width, guint64 height, guint64 n_channels,
49+
guint64 max_size, gsize *size_out);
4850

4951
void chicle_flatten_cntrl_inplace (gchar *str);
5052
gchar *chicle_ellipsize_string (const gchar *str, gint len_max,

tools/chafa/chicle-webp-loader.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232

3333
#include <chafa.h>
3434
#include "chicle-webp-loader.h"
35-
#include "chicle-image-size.h"
35+
#include "chicle-util.h"
3636

3737
#define DEFAULT_FRAME_DURATION_MS 50
3838
#define BYTES_PER_PIXEL 4

0 commit comments

Comments
 (0)