Bug#925824: sgt-puzzles: ftbfs with GCC-9

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Bug#925824: sgt-puzzles: ftbfs with GCC-9

Étienne Mollier
The upstream maintainer, Simon Thatam, noticed this build problem
and brought a fix in this commit:

    https://git.tartarus.org/?p=simon/puzzles.git;a=commit;h=907c42bcf0f06826279d5be91be7f7f9c45876d9

Note that it fuzzes with the current 20170606.272beef-1 version
of the package, so I took the liberty to test out the patch here
below.  But I suspect that a better approach would be to upgrade
to the latest version of the Portable Puzzle Collection.

This is yet to be tested on 263-bit int platform.  ;)

_________________________________________________________________
fix-ftbfs-with-gcc-9.patch:

--- a/twiddle.c 2019-12-10 21:28:42.488548074 +0100
+++ b/twiddle.c 2019-12-10 21:29:49.945015261 +0100
@@ -556,6 +556,12 @@
     char *ret, *p, buf[80];
     int i, x, y, col, o, maxlen;

+    /* Pedantic check: ensure buf is large enough to format an int in
+     * decimal, using the bound log10(2) < 1/3. (Obviously in practice
+     * int is not going to be larger than even 32 bits any time soon,
+     * but.) */
+    assert(sizeof(buf) >= 1 + sizeof(int) * CHAR_BIT/3);
+
     /*
      * First work out how many characters we need to display each
      * number. We're pretty flexible on grid contents here, so we
@@ -568,6 +574,11 @@
     }
     o = (state->orientable ? 1 : 0);

+    /* Reassure sprintf-checking compilers like gcc that the field
+     * width we've just computed is not now excessive */
+    if (col >= sizeof(buf))
+        col = sizeof(buf)-1;
+
     /*
      * Now we know the exact total size of the grid we're going to
      * produce: it's got h rows, each containing w lots of col+o,


signature.asc (673 bytes) Download Attachment