Run script/sync.sh: 0.4.0-alpha.12+4048.20261020
diff --git a/release/c/wuffs-v0.4.c b/release/c/wuffs-v0.4.c
index 342cb18..26cec6d 100644
--- a/release/c/wuffs-v0.4.c
+++ b/release/c/wuffs-v0.4.c
@@ -71,15 +71,15 @@
 // each major.minor branch, the commit count should increase monotonically.
 //
 // WUFFS_VERSION was overridden by "wuffs gen -version" based on revision
-// c677bef7fd69e8f336d1f3aa11eda63bcc29672a committed on 2026-10-18.
+// 0d8b52336e4c5a27d885f62bc8c4be996a024d70 committed on 2026-10-20.
 #define WUFFS_VERSION 0x000040000
 #define WUFFS_VERSION_MAJOR 0
 #define WUFFS_VERSION_MINOR 4
 #define WUFFS_VERSION_PATCH 0
-#define WUFFS_VERSION_PRE_RELEASE_LABEL "alpha.11"
-#define WUFFS_VERSION_BUILD_METADATA_COMMIT_COUNT 4041
-#define WUFFS_VERSION_BUILD_METADATA_COMMIT_DATE 20261018
-#define WUFFS_VERSION_STRING "0.4.0-alpha.11+4041.20261018"
+#define WUFFS_VERSION_PRE_RELEASE_LABEL "alpha.12"
+#define WUFFS_VERSION_BUILD_METADATA_COMMIT_COUNT 4048
+#define WUFFS_VERSION_BUILD_METADATA_COMMIT_DATE 20261020
+#define WUFFS_VERSION_STRING "0.4.0-alpha.12+4048.20261020"
 
 // ---------------- Private Implementation Macros Re-definition Check
 
@@ -21669,14 +21669,12 @@
   uint8_t* q = s.ptr + s.len;
 
   if (options & WUFFS_BASE__PARSE_NUMBER_XXX__ALLOW_UNDERSCORES) {
-    for (;; p++) {
-      if (p >= q) {
-        return wuffs_base__make_status(wuffs_base__error__bad_argument);
-      } else if (*p != '_') {
-        break;
-      }
+    for (; (p < q) && (*p == '_'); p++) {
     }
   }
+  if (p >= q) {
+    return wuffs_base__make_status(wuffs_base__error__bad_argument);
+  }
 
   // Parse sign.
   do {
@@ -21689,14 +21687,12 @@
       break;
     }
     if (options & WUFFS_BASE__PARSE_NUMBER_XXX__ALLOW_UNDERSCORES) {
-      for (;; p++) {
-        if (p >= q) {
-          return wuffs_base__make_status(wuffs_base__error__bad_argument);
-        } else if (*p != '_') {
-          break;
-        }
+      for (; (p < q) && (*p == '_'); p++) {
       }
     }
+    if (p >= q) {
+      return wuffs_base__make_status(wuffs_base__error__bad_argument);
+    }
   } while (0);
 
   // Parse digits, up to (and including) a '.', 'E' or 'e'. Examples for each
@@ -21748,9 +21744,12 @@
         if (nd < WUFFS_PRIVATE_IMPL__HPD__DIGITS_PRECISION) {
           h->digits[nd++] = (uint8_t)(*p - '0');
           dp = (int32_t)nd;
-        } else if ('0' != *p) {
-          // Long-tail non-zeroes set the truncated bit.
-          h->truncated = true;
+        } else {
+          dp++;
+          if ('0' != *p) {
+            // Long-tail non-zeroes set the truncated bit.
+            h->truncated = true;
+          }
         }
       } else if (*p ==
                  ((options &
@@ -21809,14 +21808,12 @@
 after_exp:
   do {
     if (options & WUFFS_BASE__PARSE_NUMBER_XXX__ALLOW_UNDERSCORES) {
-      for (;; p++) {
-        if (p >= q) {
-          return wuffs_base__make_status(wuffs_base__error__bad_argument);
-        } else if (*p != '_') {
-          break;
-        }
+      for (; (p < q) && (*p == '_'); p++) {
       }
     }
+    if (p >= q) {
+      return wuffs_base__make_status(wuffs_base__error__bad_argument);
+    }
 
     int32_t exp_sign = +1;
     if (*p == '+') {
@@ -23586,6 +23583,7 @@
       if (p < q) {
         goto hexadecimal;
       }
+      goto fail_bad_argument;
 
     } else if ((*p == 'd') || (*p == 'D')) {
       p++;
@@ -23596,6 +23594,7 @@
       if (p < q) {
         goto decimal;
       }
+      goto fail_bad_argument;
     }
 
     if (options & WUFFS_BASE__PARSE_NUMBER_XXX__ALLOW_MULTIPLE_LEADING_ZEROES) {
diff --git a/sync.txt b/sync.txt
index 28800ca..dbf365e 100644
--- a/sync.txt
+++ b/sync.txt
@@ -1,10 +1,10 @@
 script/sync.sh ran on 2026-10-20
-Sibling directory (../wuffs) git revision is 0baab7fe724ff34b2af517dce47e000227f25ab2
+Sibling directory (../wuffs) git revision is 7f70dda95c77b10c087c0908790837b5e9c15713
 Manifest (sha256sum values, filenames, versions):
 994126492f24a3edae9b95efa92820647cedc42ee933ce3ff2a364fa9c62aba3  release/c/README.md
 3b6a0c78f663bb495d1972fbb2a87c717d70fbac5ea8cc1a50cb9afaa4b03f92  release/c/wuffs-v0.2.c
     #define WUFFS_VERSION_STRING "0.2.0+2078.20191219"
 8295f8cc851c6bc8bf6bd1720623372c6983a8c6dbd2875c5aace259d4b3c5d3  release/c/wuffs-v0.3.c
     #define WUFFS_VERSION_STRING "0.3.6+3407.20261020"
-120d99117039dea38544d565744e9b23b489a067b4200930e0bd674dde022a13  release/c/wuffs-v0.4.c
-    #define WUFFS_VERSION_STRING "0.4.0-alpha.11+4041.20261018"
+458066457347bd6d9bc3c906aa8292bea4488577727569ddd9436fdd89d5f04d  release/c/wuffs-v0.4.c
+    #define WUFFS_VERSION_STRING "0.4.0-alpha.12+4048.20261020"