Browse Source

fix: WTF-8 decoding issue in `node:fs` (#41673)

fix: WTF-8 decoding issue in node:fs
Shelley Vohr 1 year ago
parent
commit
ed28ead8ac
2 changed files with 31 additions and 0 deletions
  1. 1 0
      patches/node/.patches
  2. 30 0
      patches/node/fs_fix_wtf-8_decoding_issue.patch

+ 1 - 0
patches/node/.patches

@@ -47,3 +47,4 @@ build_ensure_v8_pointer_compression_sandbox_is_enabled_on_64bit.patch
 fix_revert_src_lb_reducing_c_calls_of_esm_legacy_main_resolve.patch
 src_preload_function_for_environment.patch
 deprecate_vector_v8_local_in_v8.patch
+fs_fix_wtf-8_decoding_issue.patch

+ 30 - 0
patches/node/fs_fix_wtf-8_decoding_issue.patch

@@ -0,0 +1,30 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Richard Lau <[email protected]>
+Date: Fri, 1 Mar 2024 19:15:40 +0000
+Subject: fs: fix WTF-8 decoding issue
+
+Cherry-pick of libuv/libuv@d09441c
+
+Refs: https://github.com/libuv/libuv/pull/2970
+Fixes: https://github.com/nodejs/node/issues/48673
+
+We forgot to mask off the high bits from the first byte, so we ended up
+always failing the subsequent range check.
+
+diff --git a/deps/uv/src/win/fs.c b/deps/uv/src/win/fs.c
+index fc209c54f470edaa031009979061cff071cbf66d..4fc13b04bdae5bd9e2627027a10c534c2d9675dc 100644
+--- a/deps/uv/src/win/fs.c
++++ b/deps/uv/src/win/fs.c
+@@ -176,9 +176,11 @@ static int32_t fs__decode_wtf8_char(const char** input) {
+   if ((b4 & 0xC0) != 0x80)
+     return -1; /* invalid: not a continuation byte */
+   code_point = (code_point << 6) | (b4 & 0x3F);
+-  if (b1 <= 0xF4)
++  if (b1 <= 0xF4) {
++    code_point &= 0x1FFFFF;
+     if (code_point <= 0x10FFFF)
+       return code_point; /* four-byte character */
++  }
+ 
+   /* code point too large */
+   return -1;