Issue #12546: Allow \x00 as a fill character for builtin type __format__ methods.
diff --git a/Python/formatter_unicode.c b/Python/formatter_unicode.c
index 0a3cc59..e3a8149 100644
--- a/Python/formatter_unicode.c
+++ b/Python/formatter_unicode.c
@@ -156,8 +156,9 @@
 
     Py_ssize_t consumed;
     int align_specified = 0;
+    int fill_char_specified = 0;
 
-    format->fill_char = '\0';
+    format->fill_char = ' ';
     format->align = default_align;
     format->alternate = 0;
     format->sign = '\0';
@@ -171,6 +172,7 @@
     if (end-pos >= 2 && is_alignment_token(READ_spec(pos+1))) {
         format->align = READ_spec(pos+1);
         format->fill_char = READ_spec(pos);
+        fill_char_specified = 1;
         align_specified = 1;
         pos += 2;
     }
@@ -194,7 +196,7 @@
     }
 
     /* The special case for 0-padding (backwards compat) */
-    if (format->fill_char == '\0' && end-pos >= 1 && READ_spec(pos) == '0') {
+    if (!fill_char_specified && end-pos >= 1 && READ_spec(pos) == '0') {
         format->fill_char = '0';
         if (!align_specified) {
             format->align = '=';
@@ -784,9 +786,7 @@
         goto done;
 
     /* Write into that space. First the padding. */
-    result = fill_padding(writer, len,
-                          format->fill_char=='\0'?' ':format->fill_char,
-                          lpad, rpad);
+    result = fill_padding(writer, len, format->fill_char, lpad, rpad);
     if (result == -1)
         goto done;
 
@@ -956,8 +956,7 @@
     /* Populate the memory. */
     result = fill_number(writer, &spec,
                          tmp, inumeric_chars, inumeric_chars + n_digits,
-                         tmp, prefix,
-                         format->fill_char == '\0' ? ' ' : format->fill_char,
+                         tmp, prefix, format->fill_char,
                          &locale, format->type == 'X');
 
 done:
@@ -1104,8 +1103,7 @@
     /* Populate the memory. */
     result = fill_number(writer, &spec,
                          unicode_tmp, index, index + n_digits,
-                         NULL, 0,
-                         format->fill_char == '\0' ? ' ' : format->fill_char,
+                         NULL, 0, format->fill_char,
                          &locale, 0);
 
 done:
@@ -1311,8 +1309,7 @@
     /* Populate the memory. First, the padding. */
     result = fill_padding(writer,
                           n_re_total + n_im_total + 1 + add_parens * 2,
-                          format->fill_char=='\0' ? ' ' : format->fill_char,
-                          lpad, rpad);
+                          format->fill_char, lpad, rpad);
     if (result == -1)
         goto done;