]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Corrected TextDecoder.decode() usage to run when its input references a SharedArrayBu...
authorstephan <stephan@noemail.net>
Sat, 13 Aug 2022 13:42:07 +0000 (13:42 +0000)
committerstephan <stephan@noemail.net>
Sat, 13 Aug 2022 13:42:07 +0000 (13:42 +0000)
FossilOrigin-Name: d4d773405c579e7efd95be8d81fe14d71218e62e44c523d38e02f89424ba6ce8

ext/wasm/common/whwasmutil.js
ext/wasm/jaccwabyt/jaccwabyt.js
manifest
manifest.uuid

index 5a1d425caf13bcf3c9f9531e6685df3d3da1712c..e51f690e2926803b05cb522c9eb3ee2e518f1e60 100644 (file)
@@ -669,6 +669,18 @@ self.WhWasmUtilInstaller = function(target){
     return pos - ptr;
   };
 
+  /** Internal helper to use in operations which need to distinguish
+      between SharedArrayBuffer heap memory and non-shared heap. */
+  const __SAB = ('undefined'===typeof SharedArrayBuffer)
+        ? function(){} : SharedArrayBuffer;
+  const __utf8Decode = function(arrayBuffer, begin, end){
+    return cache.utf8Decoder.decode(
+      (arrayBuffer.buffer instanceof __SAB)
+        ? arrayBuffer.slice(begin, end)
+        : arrayBuffer.subarray(begin, end)
+    );
+  };
+
   /**
      Expects ptr to be a pointer into the WASM heap memory which
      refers to a NUL-terminated C-style string encoded as UTF-8. This
@@ -678,11 +690,7 @@ self.WhWasmUtilInstaller = function(target){
   */
   target.cstringToJs = function(ptr){
     const n = this.cstrlen(ptr);
-    if(null===n) return n;
-    return n
-      ? cache.utf8Decoder.decode(
-        new Uint8Array(heapWrappers().HEAP8U.buffer, ptr, n)
-      ) : "";
+    return n ? __utf8Decode(heapWrappers().HEAP8U, ptr, ptr+n) : (null===n ? n : "");
   }.bind(target);
 
   /**
@@ -1070,11 +1078,11 @@ self.WhWasmUtilInstaller = function(target){
   
   /**
      Looks up a WASM-exported function named fname from
-     target.exports.  If found, it is called, passed all remaining
+     target.exports. If found, it is called, passed all remaining
      arguments, and its return value is returned to xCall's caller. If
      not found, an exception is thrown. This function does no
-     conversion of argument or return types, but see xWrap()
-     and xCallWrapped() for variants which do.
+     conversion of argument or return types, but see xWrap() and
+     xCallWrapped() for variants which do.
 
      As a special case, if passed only 1 argument after the name and
      that argument in an Array, that array's entries become the
index a018658579ffe685d7f078fe218eebf1e5799e24..14c93b3a2e8b7625f56acc6ee75235e91be27151 100644 (file)
@@ -394,7 +394,17 @@ self.Jaccwabyt = function StructBinderFactory(config){
 
   const __utf8Decoder = new TextDecoder('utf-8');
   const __utf8Encoder = new TextEncoder();
-
+  /** Internal helper to use in operations which need to distinguish
+      between SharedArrayBuffer heap memory and non-shared heap. */
+  const __SAB = ('undefined'===typeof SharedArrayBuffer)
+        ? function(){} : SharedArrayBuffer;
+  const __utf8Decode = function(arrayBuffer, begin, end){
+    return __utf8Decoder.decode(
+      (arrayBuffer.buffer instanceof __SAB)
+        ? arrayBuffer.slice(begin, end)
+        : arrayBuffer.subarray(begin, end)
+    );
+  };
   /**
      Uses __lookupMember() to find the given obj.structInfo key.
      Returns that member if it is a string, else returns false. If the
@@ -437,8 +447,7 @@ self.Jaccwabyt = function StructBinderFactory(config){
       //log("mem[",pos,"]",mem[pos]);
     };
     //log("addr =",addr,"pos =",pos);
-    if(addr===pos) return "";
-    return __utf8Decoder.decode(new Uint8Array(mem.buffer, addr, pos-addr));
+    return (addr===pos) ? "" : __utf8Decode(mem, addr, pos);
   };
 
   /**
index 83bed6954d2cd7a55de4f23ba731df22cb71ead7..1c235509d7970119b4301bfe644bf3ec23d1ff91 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Use\snew\s-DSQLITE_DEFAULT_UNIX_VFS="unix-none"\sfor\sfiddle\sbuild\sto\sbypass\sOPFS\slocking\serrors.
-D 2022-08-12T18:54:08.424
+C Corrected\sTextDecoder.decode()\susage\sto\srun\swhen\sits\sinput\sreferences\sa\sSharedArrayBuffer.
+D 2022-08-13T13:42:07.359
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -493,12 +493,12 @@ F ext/wasm/api/sqlite3-worker.js 1325ca8d40129a82531902a3a077b795db2eeaee81746e5
 F ext/wasm/common/SqliteTestUtil.js e41a1406f18da9224523fad0c48885caf995b56956a5b9852909c0989e687e90
 F ext/wasm/common/emscripten.css 3d253a6fdb8983a2ac983855bfbdd4b6fa1ff267c28d69513dd6ef1f289ada3f
 F ext/wasm/common/testing.css 572cf1ffae0b6eb7ca63684d3392bf350217a07b90e7a896e4fa850700c989b0
-F ext/wasm/common/whwasmutil.js 3d9deda1be718e2b10e2b6b474ba6ba857d905be314201ae5b3df5eef79f66aa
+F ext/wasm/common/whwasmutil.js 41b8e097e0a9cb07c24c0ede3c81b72470a63f4a4efb07f75586dc131569f5ae
 F ext/wasm/fiddle/emscripten.css 3d253a6fdb8983a2ac983855bfbdd4b6fa1ff267c28d69513dd6ef1f289ada3f
 F ext/wasm/fiddle/fiddle-worker.js c9d66230269cc26d33aa84501ae601c24f8697c3711be5d769c4c687bfcaba8f
 F ext/wasm/fiddle/fiddle.html 550c5aafce40bd218de9bf26192749f69f9b10bc379423ecd2e162bcef885c08
 F ext/wasm/fiddle/fiddle.js bef4b30e078445a7cd2255fba07acd083aa1c3cc074a73b38ea847fd340f1adc
-F ext/wasm/jaccwabyt/jaccwabyt.js 99b424b4d467d4544e82615b58e2fe07532a898540bf9de2a985f3c21e7082b2
+F ext/wasm/jaccwabyt/jaccwabyt.js 0d7f32817456a0f3937fcfd934afeb32154ca33580ab264dab6c285e6dbbd215
 F ext/wasm/jaccwabyt/jaccwabyt.md 447cc02b598f7792edaa8ae6853a7847b8178a18ed356afacbdbf312b2588106
 F ext/wasm/jaccwabyt/jaccwabyt_test.c 39e4b865a33548f943e2eb9dd0dc8d619a80de05d5300668e9960fff30d0d36f
 F ext/wasm/jaccwabyt/jaccwabyt_test.exports 5ff001ef975c426ffe88d7d8a6e96ec725e568d2c2307c416902059339c06f19
@@ -1999,8 +1999,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P f0ca02611484f5031076d7fae88845e9931715e9108ec0572629200d4f6636ef 49828bdec5f926cd18a069d39a5db0b1e1f3528a2affcfbaa1cf7b98aca51b3b
-R cdc00c7ef64a776b22c16fe2546768af
+P b3a93ec75acb38535691d6eaceb5a1a218a5ee3f755a1e12c9255b90567fc795
+R 243b6e88d1ed7db99fd955f733548f1c
 U stephan
-Z abf4f77a1cc7fc6241b9153ec6b252c6
+Z ddf468f7ec78d048a46e361913445144
 # Remove this line to create a well-formed Fossil manifest.
index fd28b4f82d33cd40a5b1797d7c186142282a7778..ab645ba532d514652e9532e85275abfdc886fee3 100644 (file)
@@ -1 +1 @@
-b3a93ec75acb38535691d6eaceb5a1a218a5ee3f755a1e12c9255b90567fc795
\ No newline at end of file
+d4d773405c579e7efd95be8d81fe14d71218e62e44c523d38e02f89424ba6ce8
\ No newline at end of file