2023-01-02 16:00:42 -05:00
|
|
|
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
|
2021-08-23 12:31:19 -04:00
|
|
|
|
2021-11-23 11:45:18 -05:00
|
|
|
import { assertThrows } from "./test_util.ts";
|
2021-08-23 12:31:19 -04:00
|
|
|
|
2021-11-23 11:45:18 -05:00
|
|
|
Deno.test({ permissions: { ffi: true } }, function dlopenInvalidArguments() {
|
2021-08-23 12:31:19 -04:00
|
|
|
const filename = "/usr/lib/libc.so.6";
|
|
|
|
assertThrows(() => {
|
|
|
|
// @ts-expect-error: ForeignFunction cannot be null
|
|
|
|
Deno.dlopen(filename, { malloc: null });
|
|
|
|
}, TypeError);
|
|
|
|
assertThrows(() => {
|
|
|
|
Deno.dlopen(filename, {
|
|
|
|
// @ts-expect-error: invalid NativeType
|
|
|
|
malloc: { parameters: ["a"], result: "b" },
|
|
|
|
});
|
|
|
|
}, TypeError);
|
|
|
|
assertThrows(() => {
|
|
|
|
// @ts-expect-error: DynamicLibrary symbols cannot be null
|
|
|
|
Deno.dlopen(filename, null);
|
|
|
|
}, TypeError);
|
|
|
|
assertThrows(() => {
|
|
|
|
// @ts-expect-error: require 2 arguments
|
|
|
|
Deno.dlopen(filename);
|
|
|
|
}, TypeError);
|
|
|
|
});
|
2022-03-25 07:29:54 -04:00
|
|
|
|
|
|
|
Deno.test({ permissions: { ffi: false } }, function ffiPermissionDenied() {
|
|
|
|
assertThrows(() => {
|
|
|
|
Deno.dlopen("/usr/lib/libc.so.6", {});
|
|
|
|
}, Deno.errors.PermissionDenied);
|
|
|
|
const fnptr = new Deno.UnsafeFnPointer(
|
2022-06-20 09:38:10 -04:00
|
|
|
0n,
|
2022-03-25 07:29:54 -04:00
|
|
|
{
|
|
|
|
parameters: ["u32", "pointer"],
|
|
|
|
result: "void",
|
|
|
|
} as const,
|
|
|
|
);
|
|
|
|
assertThrows(() => {
|
|
|
|
fnptr.call(123, null);
|
|
|
|
}, Deno.errors.PermissionDenied);
|
|
|
|
assertThrows(() => {
|
|
|
|
Deno.UnsafePointer.of(new Uint8Array(0));
|
|
|
|
}, Deno.errors.PermissionDenied);
|
2022-06-20 09:38:10 -04:00
|
|
|
const ptrView = new Deno.UnsafePointerView(0n);
|
2022-03-25 07:29:54 -04:00
|
|
|
assertThrows(() => {
|
|
|
|
ptrView.copyInto(new Uint8Array(0));
|
|
|
|
}, Deno.errors.PermissionDenied);
|
|
|
|
assertThrows(() => {
|
|
|
|
ptrView.getCString();
|
|
|
|
}, Deno.errors.PermissionDenied);
|
|
|
|
assertThrows(() => {
|
|
|
|
ptrView.getUint8();
|
|
|
|
}, Deno.errors.PermissionDenied);
|
|
|
|
assertThrows(() => {
|
|
|
|
ptrView.getInt8();
|
|
|
|
}, Deno.errors.PermissionDenied);
|
|
|
|
assertThrows(() => {
|
|
|
|
ptrView.getUint16();
|
|
|
|
}, Deno.errors.PermissionDenied);
|
|
|
|
assertThrows(() => {
|
|
|
|
ptrView.getInt16();
|
|
|
|
}, Deno.errors.PermissionDenied);
|
|
|
|
assertThrows(() => {
|
|
|
|
ptrView.getUint32();
|
|
|
|
}, Deno.errors.PermissionDenied);
|
|
|
|
assertThrows(() => {
|
|
|
|
ptrView.getInt32();
|
|
|
|
}, Deno.errors.PermissionDenied);
|
|
|
|
assertThrows(() => {
|
|
|
|
ptrView.getFloat32();
|
|
|
|
}, Deno.errors.PermissionDenied);
|
|
|
|
assertThrows(() => {
|
|
|
|
ptrView.getFloat64();
|
|
|
|
}, Deno.errors.PermissionDenied);
|
|
|
|
});
|