This patch adds an additional overflow check after computing new_size
to ensure the multiplication by sizeof(uint32_t) will not overflow:
if (new_size > 0 && (size_t)new_size > SIZE_MAX / sizeof(uint32_t))
This check is added in:
- caca_resize() in caca/canvas.c
- caca_create_frame() in caca/frame.c
Fixes#86Fixes#89
Fixes CVE-2026-42046
The Xlib and ncurses libraries query the LC_CTYPE locale value to guess
the usable character set. If the calling program did not call setlocale(),
that character set will be severely limited. Extensive Unicode support
is a reasonable libcaca user expectation.
The locale is restored as soon as possible, once the window or terminal
have been initialised. Unfortunately, the effect of setlocale() is process-
wide, and may affect other threads. This is now documented.
Note also that both Xlib and ncurses ignore the effects of uselocale()
which would have been the thread-safe solution to this problem.
- Save and correctly restore console input mode, ie. do not
change settings of the original console.
- Fix hiding of cursor.
- Free console again if the driver actually created a new one.
- Default canvas size is current window size.
- Base calculation on current font.
- Properly handle press and release events of up to 5 mouse buttons.
- Map right mouse button to button #3. This is a change in behaviour,
which is desirable for cross-platform codes.
- Generate two click events for double mouse clicks.
- Mouse wheel support, creates button press events. Button numbers
are identical to X11 mappings.
- Handle window buffer resize events.