diff options
Diffstat (limited to 'test_ffi')
-rw-r--r-- | test_ffi/src/lib.rs | 7 | ||||
-rw-r--r-- | test_ffi/tests/test.js | 24 |
2 files changed, 31 insertions, 0 deletions
diff --git a/test_ffi/src/lib.rs b/test_ffi/src/lib.rs index b061ca8d5..08ef7cb7f 100644 --- a/test_ffi/src/lib.rs +++ b/test_ffi/src/lib.rs @@ -411,3 +411,10 @@ static STRING: &str = "Hello, world!\0"; extern "C" fn ffi_string() -> *const u8 { STRING.as_ptr() } + +/// Invalid UTF-8 characters, array of length 14 +#[no_mangle] +pub static static_char: [u8; 14] = [ + 0xC0, 0xC1, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF, + 0x00, +]; diff --git a/test_ffi/tests/test.js b/test_ffi/tests/test.js index d658ec169..23b46902a 100644 --- a/test_ffi/tests/test.js +++ b/test_ffi/tests/test.js @@ -3,6 +3,7 @@ // Run using cargo test or `--v8-options=--allow-natives-syntax` +import { assertEquals } from "https://deno.land/std@0.149.0/testing/asserts.ts"; import { assertThrows, } from "../../test_util/std/testing/asserts.ts"; @@ -186,6 +187,12 @@ const dylib = Deno.dlopen(libPath, { "static_ptr": { type: "pointer", }, + /** + * Invalid UTF-8 characters, buffer of length 14 + */ + "static_char": { + type: "pointer", + }, }); const { symbols } = dylib; @@ -478,6 +485,23 @@ uint32Array[0] = 55; // MUTATES! console.log("uint32Array[0] after mutation:", uint32Array[0]); console.log("Static ptr value after mutation:", view.getUint32()); +// Test non-UTF-8 characters + +const charView = new Deno.UnsafePointerView(dylib.symbols.static_char); + +const charArrayBuffer = charView.getArrayBuffer(14); +const uint8Array = new Uint8Array(charArrayBuffer); +assertEquals([...uint8Array], [ + 0xC0, 0xC1, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF, + 0x00 +]); + +try { + assertThrows(() => charView.getCString(), TypeError, "Invalid CString pointer, not valid UTF-8"); +} catch (_err) { + console.log("Invalid UTF-8 characters to `v8::String`:", charView.getCString()); +} + (function cleanup() { dylib.close(); throwCallback.close(); |