aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorGravatar Ciro Spaciari <ciro.spaciari@gmail.com> 2023-09-20 22:50:10 -0300
committerGravatar GitHub <noreply@github.com> 2023-09-20 18:50:10 -0700
commitb65862e23b255d2ebf6df8cd32481e5162c7f978 (patch)
tree1d8bbbef70f3a46b3e290d0e9832ee2f97455b71 /test
parent5f66b4e729105286863a13955b1ed8897b45210e (diff)
downloadbun-b65862e23b255d2ebf6df8cd32481e5162c7f978.tar.gz
bun-b65862e23b255d2ebf6df8cd32481e5162c7f978.tar.zst
bun-b65862e23b255d2ebf6df8cd32481e5162c7f978.zip
fix(ffi) fix size limit for dlopen (#5516)
* fix size limit * 63 * throw error * ffi.test.js * add macos tests * oops
Diffstat (limited to 'test')
-rw-r--r--test/js/bun/ffi/ffi.test.js286
1 files changed, 286 insertions, 0 deletions
diff --git a/test/js/bun/ffi/ffi.test.js b/test/js/bun/ffi/ffi.test.js
index 80367e555..b0fe58d77 100644
--- a/test/js/bun/ffi/ffi.test.js
+++ b/test/js/bun/ffi/ffi.test.js
@@ -1,5 +1,7 @@
import { afterAll, describe, expect, it } from "bun:test";
import { existsSync } from "fs";
+import { platform } from "os";
+
import {
CFunction,
CString,
@@ -641,3 +643,287 @@ it(".ptr is not leaked", () => {
expect(fn.ptr).toBeUndefined();
}
});
+
+const lib_path =
+ platform() === "darwin"
+ ? "/usr/lib/libSystem.B.dylib"
+ : existsSync("/lib/x86_64-linux-gnu/libc.so.6")
+ ? "/lib/x86_64-linux-gnu/libc.so.6"
+ : null;
+const test = lib_path ? it : it.skip;
+test("can open more than 63 symbols", () => {
+ const lib = dlopen(lib_path, {
+ memchr: {
+ returns: "ptr",
+ args: ["ptr", "int", "usize"],
+ },
+ strcpy: {
+ returns: "ptr",
+ args: ["ptr", "ptr"],
+ },
+ strcat: {
+ returns: "ptr",
+ args: ["ptr", "ptr"],
+ },
+ strncat: {
+ returns: "ptr",
+ args: ["ptr", "ptr", "usize"],
+ },
+ strcmp: {
+ returns: "int",
+ args: ["ptr", "ptr"],
+ },
+ strncmp: {
+ returns: "int",
+ args: ["ptr", "ptr", "usize"],
+ },
+ strcoll: {
+ returns: "int",
+ args: ["ptr", "ptr"],
+ },
+ strxfrm: {
+ returns: "int",
+ args: ["ptr", "ptr", "usize"],
+ },
+ strchr: {
+ returns: "ptr",
+ args: ["ptr", "int"],
+ },
+ strrchr: {
+ returns: "ptr",
+ args: ["ptr", "int"],
+ },
+ strcspn: {
+ returns: "usize",
+ args: ["ptr", "ptr"],
+ },
+ strspn: {
+ returns: "usize",
+ args: ["ptr", "ptr"],
+ },
+ strpbrk: {
+ returns: "ptr",
+ args: ["ptr", "ptr"],
+ },
+ strstr: {
+ returns: "ptr",
+ args: ["ptr", "ptr"],
+ },
+ strtok: {
+ returns: "ptr",
+ args: ["ptr", "ptr"],
+ },
+ strerror: {
+ returns: "ptr",
+ args: ["int"],
+ },
+ strerror_r: {
+ returns: "ptr",
+ args: ["int", "ptr", "usize"],
+ },
+ strsep: {
+ returns: "ptr",
+ args: ["ptr", "ptr"],
+ },
+ strsignal: {
+ returns: "ptr",
+ args: ["int"],
+ },
+ stpcpy: {
+ returns: "ptr",
+ args: ["ptr", "ptr"],
+ },
+ stpncpy: {
+ returns: "ptr",
+ args: ["ptr", "ptr", "usize"],
+ },
+ basename: {
+ returns: "ptr",
+ args: ["ptr"],
+ },
+ bcmp: {
+ returns: "int",
+ args: ["ptr", "ptr", "usize"],
+ },
+ getdate: {
+ returns: "ptr",
+ args: ["ptr"],
+ },
+ gmtime: {
+ returns: "ptr",
+ args: ["ptr"],
+ },
+ localtime: {
+ returns: "ptr",
+ args: ["ptr"],
+ },
+ ctime: {
+ returns: "ptr",
+ args: ["ptr"],
+ },
+ asctime: {
+ returns: "ptr",
+ args: ["ptr"],
+ },
+ strftime: {
+ returns: "usize",
+ args: ["ptr", "usize", "ptr", "ptr"],
+ },
+ strptime: {
+ returns: "ptr",
+ args: ["ptr", "ptr", "ptr"],
+ },
+ asctime_r: {
+ returns: "ptr",
+ args: ["ptr", "ptr"],
+ },
+ ctime_r: {
+ returns: "ptr",
+ args: ["ptr", "ptr"],
+ },
+ gmtime_r: {
+ returns: "ptr",
+ args: ["ptr", "ptr"],
+ },
+ localtime_r: {
+ returns: "ptr",
+ args: ["ptr", "ptr"],
+ },
+ bcopy: {
+ returns: "int",
+ args: ["ptr", "ptr", "usize"],
+ },
+ bzero: {
+ returns: "void",
+ args: ["ptr", "usize"],
+ },
+ index: {
+ returns: "ptr",
+ args: ["ptr", "int"],
+ },
+ rindex: {
+ returns: "ptr",
+ args: ["ptr", "int"],
+ },
+ ffs: {
+ returns: "int",
+ args: ["int"],
+ },
+ strcasecmp: {
+ returns: "int",
+ args: ["ptr", "ptr"],
+ },
+ strncasecmp: {
+ returns: "int",
+ args: ["ptr", "ptr", "usize"],
+ },
+ pthread_attr_init: {
+ returns: "int",
+ args: ["ptr"],
+ },
+ pthread_attr_destroy: {
+ returns: "int",
+ args: ["ptr"],
+ },
+ pthread_attr_getdetachstate: {
+ returns: "int",
+ args: ["ptr", "ptr"],
+ },
+ pthread_attr_setdetachstate: {
+ returns: "int",
+ args: ["ptr", "int"],
+ },
+ pthread_attr_getguardsize: {
+ returns: "int",
+ args: ["ptr", "ptr"],
+ },
+ pthread_attr_setguardsize: {
+ returns: "int",
+ args: ["ptr", "usize"],
+ },
+ pthread_attr_getschedparam: {
+ returns: "int",
+ args: ["ptr", "ptr"],
+ },
+ pthread_attr_setschedparam: {
+ returns: "int",
+ args: ["ptr", "ptr"],
+ },
+ pthread_attr_getschedpolicy: {
+ returns: "int",
+ args: ["ptr", "ptr"],
+ },
+ pthread_attr_setschedpolicy: {
+ returns: "int",
+ args: ["ptr", "int"],
+ },
+ pthread_attr_getinheritsched: {
+ returns: "int",
+ args: ["ptr", "ptr"],
+ },
+ pthread_attr_setinheritsched: {
+ returns: "int",
+ args: ["ptr", "int"],
+ },
+ pthread_attr_getscope: {
+ returns: "int",
+ args: ["ptr", "ptr"],
+ },
+ pthread_attr_setscope: {
+ returns: "int",
+ args: ["ptr", "int"],
+ },
+ pthread_attr_getstackaddr: {
+ returns: "int",
+ args: ["ptr", "ptr"],
+ },
+ pthread_attr_setstackaddr: {
+ returns: "int",
+ args: ["ptr", "ptr"],
+ },
+ pthread_attr_getstacksize: {
+ returns: "int",
+ args: ["ptr", "ptr"],
+ },
+ pthread_attr_setstacksize: {
+ returns: "int",
+ args: ["ptr", "usize"],
+ },
+ pthread_attr_getstack: {
+ returns: "int",
+ args: ["ptr", "ptr", "ptr"],
+ },
+ pthread_attr_setstack: {
+ returns: "int",
+ args: ["ptr", "ptr", "usize"],
+ },
+ pthread_attr_getguardsize: {
+ returns: "int",
+ args: ["ptr", "ptr"],
+ },
+ pthread_attr_setguardsize: {
+ returns: "int",
+ args: ["ptr", "usize"],
+ },
+ login_tty: {
+ returns: "int",
+ args: ["int"],
+ },
+ login: {
+ returns: "int",
+ args: ["ptr"],
+ },
+ logout: {
+ returns: "int",
+ args: ["ptr"],
+ },
+ strlen: {
+ returns: "usize",
+ args: ["ptr"],
+ },
+ });
+
+ expect(Object.keys(lib.symbols).length).toBe(65);
+ expect(lib.symbols.strcasecmp(Buffer.from("ciro"), Buffer.from("CIRO"))).toBe(0);
+ expect(lib.symbols.strlen(Buffer.from("bunbun", "ascii"))).toBe(6n);
+});