test_locale ();
if (getenv ("MPFR_CHECK_LIBC_PRINTF"))
+diff -Naurd mpfr-4.2.0-a/PATCHES mpfr-4.2.0-b/PATCHES
+--- mpfr-4.2.0-a/PATCHES 2023-07-17 13:54:11.126789510 +0000
++++ mpfr-4.2.0-b/PATCHES 2023-07-17 13:54:11.170788387 +0000
+@@ -0,0 +1 @@
++gcc-pr106155-workaround
+diff -Naurd mpfr-4.2.0-a/VERSION mpfr-4.2.0-b/VERSION
+--- mpfr-4.2.0-a/VERSION 2023-05-17 17:19:35.596201603 +0000
++++ mpfr-4.2.0-b/VERSION 2023-07-17 13:54:11.170788387 +0000
+@@ -1 +1 @@
+-4.2.0-p9
++4.2.0-p10
+diff -Naurd mpfr-4.2.0-a/src/mpfr.h mpfr-4.2.0-b/src/mpfr.h
+--- mpfr-4.2.0-a/src/mpfr.h 2023-05-17 17:19:35.592201606 +0000
++++ mpfr-4.2.0-b/src/mpfr.h 2023-07-17 13:54:11.170788387 +0000
+@@ -27,7 +27,7 @@
+ #define MPFR_VERSION_MAJOR 4
+ #define MPFR_VERSION_MINOR 2
+ #define MPFR_VERSION_PATCHLEVEL 0
+-#define MPFR_VERSION_STRING "4.2.0-p9"
++#define MPFR_VERSION_STRING "4.2.0-p10"
+
+ /* User macros:
+ MPFR_USE_FILE: Define it to make MPFR define functions dealing
+diff -Naurd mpfr-4.2.0-a/src/version.c mpfr-4.2.0-b/src/version.c
+--- mpfr-4.2.0-a/src/version.c 2023-05-17 17:19:35.592201606 +0000
++++ mpfr-4.2.0-b/src/version.c 2023-07-17 13:54:11.170788387 +0000
+@@ -25,5 +25,5 @@
+ const char *
+ mpfr_get_version (void)
+ {
+- return "4.2.0-p9";
++ return "4.2.0-p10";
+ }
+diff -Naurd mpfr-4.2.0-a/tests/tfpif.c mpfr-4.2.0-b/tests/tfpif.c
+--- mpfr-4.2.0-a/tests/tfpif.c 2023-01-05 17:09:48.000000000 +0000
++++ mpfr-4.2.0-b/tests/tfpif.c 2023-07-17 13:54:11.162788591 +0000
+@@ -277,7 +277,10 @@
+
+ for (i = 0; i < BAD; i++)
+ {
+- mpfr_exp_t emax;
++ mpfr_exp_t INITIALIZED(emax);
++ /* The INITIALIZED() is a workaround for GCC bug 106155:
++ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106155 */
++
+ /* For i == 6, mpfr_prec_t needs at least a 65-bit precision
+ (64 value bits + 1 sign bit) to avoid a failure. */
+ if (i == 6 && MPFR_PREC_BITS > 64)
+diff -Naurd mpfr-4.2.0-a/PATCHES mpfr-4.2.0-b/PATCHES
+--- mpfr-4.2.0-a/PATCHES 2023-07-17 13:56:17.375566485 +0000
++++ mpfr-4.2.0-b/PATCHES 2023-07-17 13:56:17.415565464 +0000
+@@ -0,0 +1 @@
++inp_str-nullchar
+diff -Naurd mpfr-4.2.0-a/VERSION mpfr-4.2.0-b/VERSION
+--- mpfr-4.2.0-a/VERSION 2023-07-17 13:54:11.170788387 +0000
++++ mpfr-4.2.0-b/VERSION 2023-07-17 13:56:17.415565464 +0000
+@@ -1 +1 @@
+-4.2.0-p10
++4.2.0-p11
+diff -Naurd mpfr-4.2.0-a/src/inp_str.c mpfr-4.2.0-b/src/inp_str.c
+--- mpfr-4.2.0-a/src/inp_str.c 2023-01-05 17:09:48.000000000 +0000
++++ mpfr-4.2.0-b/src/inp_str.c 2023-07-17 13:56:17.407565669 +0000
+@@ -69,6 +69,15 @@
+ if (c == EOF || isspace (c))
+ break;
+ str[str_size++] = (unsigned char) c;
++ /* If c is '\0' (while not being a whitespace character), the word will
++ not have a valid format. But in the context of a string in memory,
++ '\0' is a terminating null character. So, to avoid ending with a
++ valid string format (like "1" with ignored characters after the
++ terminating null character), we need to make sure that the string
++ does not have a valid format; so let's start it with '*'. Note
++ that we should read the full word, so we cannot break. */
++ if (MPFR_UNLIKELY (c == '\0'))
++ str[0] = '*';
+ if (str_size == (size_t) -1)
+ break;
+ c = getc (stream);
+diff -Naurd mpfr-4.2.0-a/src/mpfr.h mpfr-4.2.0-b/src/mpfr.h
+--- mpfr-4.2.0-a/src/mpfr.h 2023-07-17 13:54:11.170788387 +0000
++++ mpfr-4.2.0-b/src/mpfr.h 2023-07-17 13:56:17.411565566 +0000
+@@ -27,7 +27,7 @@
+ #define MPFR_VERSION_MAJOR 4
+ #define MPFR_VERSION_MINOR 2
+ #define MPFR_VERSION_PATCHLEVEL 0
+-#define MPFR_VERSION_STRING "4.2.0-p10"
++#define MPFR_VERSION_STRING "4.2.0-p11"
+
+ /* User macros:
+ MPFR_USE_FILE: Define it to make MPFR define functions dealing
+diff -Naurd mpfr-4.2.0-a/src/version.c mpfr-4.2.0-b/src/version.c
+--- mpfr-4.2.0-a/src/version.c 2023-07-17 13:54:11.170788387 +0000
++++ mpfr-4.2.0-b/src/version.c 2023-07-17 13:56:17.415565464 +0000
+@@ -25,5 +25,5 @@
+ const char *
+ mpfr_get_version (void)
+ {
+- return "4.2.0-p10";
++ return "4.2.0-p11";
+ }
+diff -Naurd mpfr-4.2.0-a/PATCHES mpfr-4.2.0-b/PATCHES
+--- mpfr-4.2.0-a/PATCHES 2023-07-17 13:57:28.913739912 +0000
++++ mpfr-4.2.0-b/PATCHES 2023-07-17 13:57:28.961738687 +0000
+@@ -0,0 +1 @@
++strtofr-nullchar
+diff -Naurd mpfr-4.2.0-a/VERSION mpfr-4.2.0-b/VERSION
+--- mpfr-4.2.0-a/VERSION 2023-07-17 13:56:17.415565464 +0000
++++ mpfr-4.2.0-b/VERSION 2023-07-17 13:57:28.961738687 +0000
+@@ -1 +1 @@
+-4.2.0-p11
++4.2.0-p12
+diff -Naurd mpfr-4.2.0-a/src/mpfr.h mpfr-4.2.0-b/src/mpfr.h
+--- mpfr-4.2.0-a/src/mpfr.h 2023-07-17 13:56:17.411565566 +0000
++++ mpfr-4.2.0-b/src/mpfr.h 2023-07-17 13:57:28.957738789 +0000
+@@ -27,7 +27,7 @@
+ #define MPFR_VERSION_MAJOR 4
+ #define MPFR_VERSION_MINOR 2
+ #define MPFR_VERSION_PATCHLEVEL 0
+-#define MPFR_VERSION_STRING "4.2.0-p11"
++#define MPFR_VERSION_STRING "4.2.0-p12"
+
+ /* User macros:
+ MPFR_USE_FILE: Define it to make MPFR define functions dealing
+diff -Naurd mpfr-4.2.0-a/src/strtofr.c mpfr-4.2.0-b/src/strtofr.c
+--- mpfr-4.2.0-a/src/strtofr.c 2023-01-05 17:09:48.000000000 +0000
++++ mpfr-4.2.0-b/src/strtofr.c 2023-07-17 13:57:28.949738993 +0000
+@@ -242,7 +242,10 @@
+ pstr->mantissa = NULL;
+
+ /* Optional leading whitespace */
+- while (isspace((unsigned char) *str)) str++;
++ /* For non-"C" locales, the ISO C standard allows isspace(0) to
++ return true. So we need to stop explicitly on '\0'. */
++ while (*str != '\0' && isspace ((unsigned char) *str))
++ str++;
+
+ /* An optional sign `+' or `-' */
+ pstr->negative = (*str == '-');
+diff -Naurd mpfr-4.2.0-a/src/version.c mpfr-4.2.0-b/src/version.c
+--- mpfr-4.2.0-a/src/version.c 2023-07-17 13:56:17.415565464 +0000
++++ mpfr-4.2.0-b/src/version.c 2023-07-17 13:57:28.961738687 +0000
+@@ -25,5 +25,5 @@
+ const char *
+ mpfr_get_version (void)
+ {
+- return "4.2.0-p11";
++ return "4.2.0-p12";
+ }