https://github.com/cacalabs/libcaca/commit/e4968ba6e93e9fd35429eb16895c785c51072015.patch Patch adjusted to remove the lines modifying caca/t/canvas.cpp. This file does not exist in the current release. From e4968ba6e93e9fd35429eb16895c785c51072015 Mon Sep 17 00:00:00 2001 From: Sam Hocevar Date: Fri, 26 Feb 2021 12:40:06 +0100 Subject: [PATCH] Fix a problem in the caca_resize() overflow detection and add several unit tests. --- caca/canvas.c | 16 ++++++++-------- caca/t/canvas.cpp | 18 +++++++++++++++--- tools/makefont.c | 22 +++++++++++++++++++--- 3 files changed, 42 insertions(+), 14 deletions(-) diff --git a/caca/canvas.c b/caca/canvas.c index d0715392..08c628c9 100644 --- a/caca/canvas.c +++ b/caca/canvas.c @@ -367,6 +367,14 @@ int caca_resize(caca_canvas_t *cv, int width, int height) { int x, y, f, old_width, old_height, old_size; + /* Check for overflow */ + int new_size = width * height; + if (new_size < 0 || (width > 0 && new_size / width != height)) + { + seterrno(EOVERFLOW); + return -1; + } + old_width = cv->width; old_height = cv->height; old_size = old_width * old_height; @@ -377,14 +385,6 @@ int caca_resize(caca_canvas_t *cv, int width, int height) * dirty rectangle handling */ cv->width = width; cv->height = height; - int new_size = width * height; - - /* Check for overflow */ - if (new_size / width != height) - { - seterrno(EOVERFLOW); - return -1; - } /* If width or height is smaller (or both), we have the opportunity to * reduce or even remove dirty rectangles */ diff --git a/tools/makefont.c b/tools/makefont.c index 226c8838..66718605 100644 --- a/tools/makefont.c +++ b/tools/makefont.c @@ -40,7 +40,8 @@ * and the UTF-8 glyphs necessary for canvas rotation and mirroring. */ static unsigned int const blocklist[] = { - 0x0000, 0x0080, /* Basic latin: A, B, C, a, b, c */ + 0x0020, 0x0080, /* Basic latin: A, B, C, a, b, c */ +#if 0 0x0080, 0x0100, /* Latin-1 Supplement: Ä, Ç, å, ß */ 0x0100, 0x0180, /* Latin Extended-A: Ā č Ō œ */ 0x0180, 0x0250, /* Latin Extended-B: Ǝ Ƹ */ @@ -63,6 +64,7 @@ static unsigned int const blocklist[] = 0x30a0, 0x3100, /* Katakana: ロ ル */ 0xff00, 0xfff0, /* Halfwidth and Fullwidth Forms: A, B, C, a, b, c */ 0x10400, 0x10450, /* Deseret: 𐐒 𐐋 */ +#endif 0, 0 }; @@ -317,8 +319,22 @@ int main(int argc, char *argv[]) printf_unicode(>ab[n]); if(gtab[n].same_as == n) - printf_hex(" */ %s\n", - glyph_data + gtab[n].data_offset, gtab[n].data_size); + { + char const *lut = " .:nmW@"; + printf("\n"); + for (int y = 0; y < height; ++y) + { + for (int x = 0; x < gtab[n].data_width; ++x) + { + int val = glyph_data[gtab[n].data_offset + y * gtab[n].data_width + x]; + char ch = lut[val * val * 7 / 256 / 256]; + printf("%c%c", ch, ch); + } + printf("\n"); + } + //printf_hex(" */ %s\n", + // glyph_data + gtab[n].data_offset, gtab[n].data_size); + } else { printf(" is "); 022-06-06packages: Add 'specifications->packages'....* gnu/packages.scm (specifications->packages): New procedure. * guix/scripts/home/import.scm (manifest+configuration-files->code): Use it. * tests/home-import.scm (match-home-environment-no-services) (match-home-environment-no-services-nor-packages) (match-home-environment-bash-service) (match-home-environment-bash-service-with-alias): Adjust 'packages' field accordingly. Co-authored-by: Ludovic Courtès <ludo@gnu.org> Antero Mejr 2022-04-04packages: Add 'package-unique-version-prefix'....* gnu/packages.scm (package-unique-version-prefix): New procedure. * guix/scripts/package.scm (manifest-entry-version-prefix): Use it. * tests/packages.scm ("package-unique-version-prefix, gcc@8") ("package-unique-version-prefix, grep"): New tests. Ludovic Courtès 2022-01-11shell: Cache profiles even when using package specs....This enables profile caching not just when '-m' or '-f' is used, but also when package specs are passed on the command line, as in: guix shell -D guix git It also changes profile cache keys to include the system type, which was previously ignored. * guix/scripts/shell.scm (options-with-caching)[single-file-for-caching]: Remove. Call 'profile-cached-gc-root' instead; adjust to accept two values. (profile-cache-primary-key): New procedure. (profile-cache-key): Remove. (profile-file-cache-key, profile-spec-cache-key): New procedures. (profile-cached-gc-root): Rewrite to include functionality formally in 'single-file-for-caching', but extend to handle package specs. * gnu/packages.scm (cache-is-authoritative?): Export. * guix/transformations.scm (transformation-option-key?): New procedure. * doc/guix.texi (Invoking guix shell): Move '--rebuild-cache' documentation to the bottom, just above '--root'. Explain caching and how these two options relate to that. Ludovic Courtès