krille-chan / fluffychat

The cutest instant messenger in the [matrix]
https://fluffychat.im/
GNU Affero General Public License v3.0
1.13k stars 200 forks source link

segmentation fault with SQfLite on Linux #769

Closed TheOneWithTheBraid closed 4 months ago

TheOneWithTheBraid commented 9 months ago

Bug Description

I'm running into segmentation faults with the SQfLite based database API.

I can reproduce them on all my Arch Linux and Fedora machines, both on aarch64 and on amd64.

They happen between the step SQfLite opens the sqlite3 dynamic library an the open process of the database.

It does not matter whether I apply PRAGMA KEY or not.

In #764 I added a unit test for exactly this behavior. In the unit test, it works, if I launch the app itself, it crashes.

Using same sqlite release as bundled in sqflite_sqlcipher, 4.5.5 in particular. But since the DL opens and the unit test passes too, I do not think this is related.

Steps to Reproduce

 ./build/linux/arm64/release/bundle/fluffychat

(fluffychat:14392): Gdk-CRITICAL **: 18:47:54.812: gdk_window_get_state: assertion 'GDK_IS_WINDOW (window)' failed
flutter: [Matrix] Welcome to FluffyChat <3
flutter: [Matrix] Client names in store are corrupted - type 'String' is not a subtype of type 'List<dynamic>?' in type cast
#0      SharedPreferences.getStringList (package:shared_preferences/shared_preferences.dart:130)
#1      ClientManager.getClients (package:fluffychat/utils/client_manager.dart:36)
<asynchronous suspension>
#2      main (package:fluffychat/main.dart:26)
<asynchronous suspension>

[1]    14392 segmentation fault (core dumped)  ./build/linux/arm64/release/bundle/fluffychat
strace ``` ... ioctl(18, DRM_IOCTL_AMDGPU_CTX or DRM_IOCTL_ETNAVIV_GEM_NEW or DRM_IOCTL_LIMA_GEM_INFO or DRM_IOCTL_MSM_GEM_NEW or DRM_IOCTL_QAIC_MMAP_BO or DRM_IOCTL_V3D_CREATE_BO or DRM_IOCTL_VC4_WAIT_BO, 0xffffe27f67c8) = 0 ioctl(18, DRM_IOCTL_AMDGPU_BO_LIST or DRM_IOCTL_MSM_GEM_INFO, 0xffffe27f6790) = 0 ioctl(18, DRM_IOCTL_AMDGPU_BO_LIST or DRM_IOCTL_MSM_GEM_INFO, 0xffffe27f6960) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, 18, 0x1062f1000) = 0xffff8e6b9000 ioctl(18, DRM_IOCTL_AMDGPU_CTX or DRM_IOCTL_ETNAVIV_GEM_NEW or DRM_IOCTL_LIMA_GEM_INFO or DRM_IOCTL_MSM_GEM_NEW or DRM_IOCTL_QAIC_MMAP_BO or DRM_IOCTL_V3D_CREATE_BO or DRM_IOCTL_VC4_WAIT_BO, 0xffffe27f67c8) = 0 ioctl(18, DRM_IOCTL_AMDGPU_BO_LIST or DRM_IOCTL_MSM_GEM_INFO, 0xffffe27f6790) = 0 ioctl(18, DRM_IOCTL_AMDGPU_BO_LIST or DRM_IOCTL_MSM_GEM_INFO, 0xffffe27f6960) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, 18, 0x1062f2000) = 0xffff8e6b8000 ioctl(18, DRM_IOCTL_AMDGPU_CTX or DRM_IOCTL_ETNAVIV_GEM_NEW or DRM_IOCTL_LIMA_GEM_INFO or DRM_IOCTL_MSM_GEM_NEW or DRM_IOCTL_QAIC_MMAP_BO or DRM_IOCTL_V3D_CREATE_BO or DRM_IOCTL_VC4_WAIT_BO, 0xffffe27f6408) = 0 ioctl(18, DRM_IOCTL_AMDGPU_BO_LIST or DRM_IOCTL_MSM_GEM_INFO, 0xffffe27f63d0) = 0 ioctl(18, DRM_IOCTL_AMDGPU_BO_LIST or DRM_IOCTL_MSM_GEM_INFO, 0xffffe27f65a0) = 0 mmap(NULL, 32768, PROT_READ|PROT_WRITE, MAP_SHARED, 18, 0x104246000) = 0xffff8e548000 futex(0xaaaacd52b9e8, FUTEX_WAKE_PRIVATE, 1) = 1 futex(0xaaaacd52b990, FUTEX_WAKE_PRIVATE, 1) = 0 futex(0xffff6be1de20, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 0, NULL, FUTEX_BITSET_MATCH_ANY) = 0 futex(0xffff6be1ddc8, FUTEX_WAKE_PRIVATE, 1) = 0 ioctl(18, DRM_IOCTL_AMDGPU_CTX or DRM_IOCTL_ETNAVIV_GEM_NEW or DRM_IOCTL_LIMA_GEM_INFO or DRM_IOCTL_MSM_GEM_NEW or DRM_IOCTL_QAIC_MMAP_BO or DRM_IOCTL_V3D_CREATE_BO or DRM_IOCTL_VC4_WAIT_BO, 0xffffe27f77a8) = 0 ioctl(18, DRM_IOCTL_AMDGPU_BO_LIST or DRM_IOCTL_MSM_GEM_INFO, 0xffffe27f7770) = 0 ioctl(18, DRM_IOCTL_AMDGPU_BO_LIST or DRM_IOCTL_MSM_GEM_INFO, 0xffffe27f7940) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, 18, 0x1062f3000) = 0xffff8e6b7000 ioctl(18, DRM_IOCTL_AMDGPU_CTX or DRM_IOCTL_ETNAVIV_GEM_NEW or DRM_IOCTL_LIMA_GEM_INFO or DRM_IOCTL_MSM_GEM_NEW or DRM_IOCTL_QAIC_MMAP_BO or DRM_IOCTL_V3D_CREATE_BO or DRM_IOCTL_VC4_WAIT_BO, 0xffffe27f77a8) = 0 ioctl(18, DRM_IOCTL_AMDGPU_BO_LIST or DRM_IOCTL_MSM_GEM_INFO, 0xffffe27f7770) = 0 ioctl(18, DRM_IOCTL_AMDGPU_BO_LIST or DRM_IOCTL_MSM_GEM_INFO, 0xffffe27f7940) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, 18, 0x103929000) = 0xffff8e6b6000 futex(0xaaaacd52b9ec, FUTEX_WAKE_PRIVATE, 1) = 1 futex(0xaaaacd52b990, FUTEX_WAKE_PRIVATE, 1) = 1 ioctl(18, DRM_IOCTL_MSM_GEM_MADVISE or DRM_IOCTL_PANFROST_MADVISE, 0xffffe27f7598) = 0 ioctl(18, DRM_IOCTL_MSM_GEM_MADVISE or DRM_IOCTL_PANFROST_MADVISE, 0xffffe27f7598) = 0 ioctl(18, DRM_IOCTL_PRIME_HANDLE_TO_FD, 0xffffe27f79f8) = 0 fcntl(14, F_DUPFD_CLOEXEC, 0) = 47 close(14) = 0 sendmsg(8, {msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base=" \0\0\0\10\0\20\0\177\0\0\0/\0\0\0 \0\0\0\7\0\20\0\0\0\0\0\0\0\0\0"..., iov_len=332}], msg_iovlen=1, msg_control=[{cmsg_len=20, cmsg_level=SOL_SOCKET, cmsg_type=SCM_RIGHTS, cmsg_data=[47]}], msg_controllen=20, msg_flags=0}, MSG_DONTWAIT|MSG_NOSIGNAL) = 332 close(47) = 0 munmap(0xfffef3047000, 2854912) = 0 ppoll([{fd=3, events=POLLIN}, {fd=8, events=POLLIN}, {fd=12, events=POLLIN}], 3, {tv_sec=0, tv_nsec=0}, NULL, 0) = 1 ([{fd=3, revents=POLLIN}], left {tv_sec=0, tv_nsec=0}) read(3, "\1\0\0\0\0\0\0\0", 8) = 8 getpid() = 16844 getpid() = 16844 futex(0xffff8e03df38, FUTEX_WAKE_PRIVATE, 2147483647) = 0 futex(0xffff8e03df38, FUTEX_WAKE_PRIVATE, 2147483647) = 0 futex(0xffff8e03df38, FUTEX_WAKE_PRIVATE, 2147483647) = 0 futex(0xffff8e03df38, FUTEX_WAKE_PRIVATE, 2147483647) = 0 futex(0xffff8e03df38, FUTEX_WAKE_PRIVATE, 2147483647) = 0 timerfd_settime(21, TFD_TIMER_ABSTIME, {it_interval={tv_sec=5012, tv_nsec=471268689}, it_value={tv_sec=5012, tv_nsec=471268689}}, NULL) = 0 timerfd_settime(21, TFD_TIMER_ABSTIME, {it_interval={tv_sec=5012, tv_nsec=471268689}, it_value={tv_sec=5012, tv_nsec=471268689}}, NULL) = 0 futex(0xaaaacd7dffd0, FUTEX_WAKE_PRIVATE, 1) = 1 eventfd2(0, EFD_CLOEXEC|EFD_NONBLOCK) = 14 futex(0xffff8e03df38, FUTEX_WAKE_PRIVATE, 2147483647) = 0 futex(0xffff8e03df38, FUTEX_WAKE_PRIVATE, 2147483647) = 0 futex(0xffff8e03df38, FUTEX_WAKE_PRIVATE, 2147483647) = 0 faccessat(AT_FDCWD, "/.flatpak-info", F_OK) = -1 ENOENT (No such file or directory) futex(0xffff8e03df38, FUTEX_WAKE_PRIVATE, 2147483647) = 0 futex(0xffff8e03df38, FUTEX_WAKE_PRIVATE, 2147483647) = 0 futex(0xffff8e03df38, FUTEX_WAKE_PRIVATE, 2147483647) = 0 futex(0xffff8e03df38, FUTEX_WAKE_PRIVATE, 2147483647) = 0 futex(0xaaaacd302c30, FUTEX_WAKE_PRIVATE, 1) = 1 futex(0xaaaacd302c20, FUTEX_WAKE_PRIVATE, 1) = 1 futex(0xaaaacd3a1838, FUTEX_WAKE_PRIVATE, 1) = 1 ppoll([{fd=14, events=POLLIN}], 1, {tv_sec=0, tv_nsec=0}, NULL, 0) = 1 ([{fd=14, revents=POLLIN}], left {tv_sec=0, tv_nsec=0}) read(14, "\1\0\0\0\0\0\0\0", 8) = 8 write(7, "\1\0\0\0\0\0\0\0", 8) = 8 futex(0xaaaacd312120, FUTEX_WAKE_PRIVATE, 1) = 1 futex(0xaaaacd311d90, FUTEX_WAKE_PRIVATE, 1) = 1 futex(0xaaaacd30acb8, FUTEX_WAKE_PRIVATE, 1) = 1 write(7, "\1\0\0\0\0\0\0\0", 8) = 8 futex(0xaaaacd312120, FUTEX_WAKE_PRIVATE, 1) = 1 futex(0xaaaacd311d90, FUTEX_WAKE_PRIVATE, 1) = 1 futex(0xaaaacd30acb8, FUTEX_WAKE_PRIVATE, 1) = 1 write(7, "\1\0\0\0\0\0\0\0", 8) = 8 futex(0xaaaacd30acb8, FUTEX_WAKE_PRIVATE, 1) = 1 futex(0xffff8dae4970, FUTEX_WAKE_PRIVATE, 1) = 0 futex(0xaaaacd3147f0, FUTEX_WAKE_PRIVATE, 1) = 0 write(7, "\1\0\0\0\0\0\0\0", 8) = 8 futex(0xaaaacd312120, FUTEX_WAKE_PRIVATE, 1) = 1 futex(0xaaaacd311d90, FUTEX_WAKE_PRIVATE, 1) = 1 futex(0xaaaacd30acb8, FUTEX_WAKE_PRIVATE, 1) = 1 ppoll([{fd=14, events=POLLIN}], 1, {tv_sec=25, tv_nsec=0}, NULL, 0) = 1 ([{fd=14, revents=POLLIN}], left {tv_sec=24, tv_nsec=999904694}) read(14, "\1\0\0\0\0\0\0\0", 8) = 8 write(7, "\1\0\0\0\0\0\0\0", 8) = 8 futex(0xaaaacd312120, FUTEX_WAKE_PRIVATE, 1) = 1 futex(0xaaaacd311d90, FUTEX_WAKE_PRIVATE, 1) = 1 futex(0xaaaacd30acb8, FUTEX_WAKE_PRIVATE, 1) = 1 ppoll([{fd=14, events=POLLIN}], 1, {tv_sec=25, tv_nsec=0}, NULL, 0) = 1 ([{fd=14, revents=POLLIN}], left {tv_sec=24, tv_nsec=999999323}) read(14, "\1\0\0\0\0\0\0\0", 8) = 8 write(7, "\1\0\0\0\0\0\0\0", 8) = 8 futex(0xaaaacd312120, FUTEX_WAKE_PRIVATE, 1) = 1 futex(0xaaaacd311d90, FUTEX_WAKE_PRIVATE, 1) = 1 futex(0xaaaacd30acb8, FUTEX_WAKE_PRIVATE, 1) = 1 ppoll([{fd=14, events=POLLIN}], 1, {tv_sec=25, tv_nsec=0}, NULL, 0) = 1 ([{fd=14, revents=POLLIN}], left {tv_sec=24, tv_nsec=999431653}) read(14, "\1\0\0\0\0\0\0\0", 8) = 8 faccessat(AT_FDCWD, "/etc/gcrypt/fips_enabled", F_OK) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "/proc/sys/crypto/fips_enabled", O_RDONLY) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "/etc/gcrypt/hwf.deny", O_RDONLY) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "/proc/cpuinfo", O_RDONLY) = 47 newfstatat(47, "", {st_mode=S_IFREG|0444, st_size=0, ...}, AT_EMPTY_PATH) = 0 read(47, "processor\t: 0\nBogoMIPS\t: 38.40\nF"..., 1024) = 1024 close(47) = 0 getpid() = 16844 getpid() = 16844 getrandom("\xef\xcd\xc0\x0f\xa4\xd9\xd6\x93\x07\x86\x4f\x3c\x23\x16\x02\x7c\x57\xc0\x02\x47\xed\x3a\x88\x05\x3c\xc9\xdd\x04\xd3\xc5\x71\xd3"..., 120, 0) = 120 getrandom("\x3b\x9a\xb7\xe6\xfb\xba\xf0\x84\x7e\x1f\x66\x59\x04\x10\x01\xdd\xa4\x99\xfb\x1d\xf8\x3b\x40\x2c\xc4\x54\x69\x0a\x0c\x3c\x1c\x1a"..., 120, 0) = 120 getrandom("\x0c\x80\xf9\x07\x99\xb3\xdb\x1b\x29\x3a\x95\xf1\x07\xe1\x01\x1e\xf9\x84\x3e\x79\x53\x81\x3d\xc7\x7b\x70\xf2\x5a\xe7\xc0\xf0\x0a"..., 120, 0) = 120 getrandom("\xf2\xbb\x33\x60\xb0\x0e\x54\xba\x89\xd2\x65\x4b\x82\xcd\x81\x64\xcd\xe2\x0a\xa0\xb5\xb4\x8d\x91\xdb\x58\xdc\x23\xbf\xe1\x0d\x5a"..., 120, 0) = 120 getrandom("\xfc\x0d\x59\xda\x20\x54\xca\xe1\x21\x68\x04\xbc\x42\x6f\x1b\x21\x48\x73\x11\xd1\xc4\x75\xf1\xba\xfe\xce\x4a\x72\xe7\xc7\xe4\x99"..., 120, 0) = 120 getrandom("\xd2\xbe\xfd\x00\x98\x0d\x84\xeb\x67\x93\xdc\x74\x75\xf0\xa1\x2f\x22\x76\x92\x98\xc9\x9e\x26\x55\x51\xb8\xf6\x72\x86\x4f\x4e\x91"..., 120, 0) = 120 getrandom("\xd0\x0e\x6a\x05\x86\x26\x0c\xec\x45\x49\x63\xdb\xff\x46\x11\x6e\xb6\xdc\x77\x80\x60\x10\x30\xc2\x24\x4a\x02\xa8\xd1\x48\xe4\x07"..., 120, 0) = 120 getrandom("\x28\xb6\xde\x08\x9c\x09\x08\x91\xf8\x1f\x2b\x01\x77\xf9\xf3\xc9\xab\xcb\xc1\xd2\x0d\x35\xc0\xaa\x54\x81\xc4\xdd\x59\x32\xc4\x07"..., 120, 0) = 120 getrandom("\xd9\x27\x95\xd4\x34\x85\x37\xfc\x76\x92\xff\xb6\xc4\x24\x32\xc0\x0f\xf2\x59\x73\xa0\x2b\x4b\xb6\x81\xa1\x38\x46\x78\x2b\x1c\x12"..., 120, 0) = 120 getrandom("\x38\xe5\x78\xb7\x48\x1c\xba\xa3\x26\x79\x7c\x3b\xa2\x37\x66\x6c\xbd\xd2\x9a\x20\xb5\xa2\x4f\x8a\x54\x98\xb4\x81\xa0\x5f\x48\x42"..., 120, 0) = 120 getrandom("\x4d\xc4\x73\x4a\xf5\xf6\xa4\xdf\x54\x2b\x43\x34\x95\x76\xf0\xc6\xb1\x04\xb7\x7d\xd3\x59\x64\x08\xa9\x97\xc8\x90\xe1\x48\x10\xea"..., 120, 0) = 120 getrandom("\x3e\x13\xa3\x63\x6e\x85\xe7\x06\xc9\xcd\x62\xf7\x60\xe7\x9b\xe3\x0a\xfd\x63\xde\xd4\x77\xd6\x08\xcc\x32\x37\x83\x0d\x53\x82\x27"..., 120, 0) = 120 getrandom("\x85\xa3\x32\xf4\x2f\xcc\x1c\x7d\x84\xd5\x35\x03\x67\xbe\xd5\x73\xa8\x98\xdd\xfd\x9a\x30\x18\x5c\x66\xc2\x68\xe3\x69\x34\xd0\x48"..., 120, 0) = 120 getrandom("\x7e\x87\x68\xe0\xbd\x28\x39\x77\x71\x60\x46\x59\x26\xaa\x5f\x69\x45\xdc\x90\x51\x55\x6b\x0f\x7d\x98\x09\xb5\x5b\xc2\x51\x54\x71"..., 120, 0) = 120 getrandom("\x37\xd5\xf3\x5d\x37\x81\x04\x71\x01\x04\xbe\x27\x24\x68\x9c\x2f\xc4\x84\x11\x49\x9b\x9a\x21\x7f\xd8\x12\xc3\xa9\x68\x36\x5f\x92"..., 120, 0) = 120 getrandom("\x61\x02\x05\x13\x1b\x10\x4c\x87\x35\xe2\x00\x94\x79\xb4\x45\x90\xa3\x13\x66\x5a\x43\xca\x4d\x23\x80\xeb\xea\x29\x9a\xda\x95\x01"..., 120, 0) = 120 getrandom("\x56\x89\x19\x9e\xd6\x04\x77\x83\xd4\x87\x3d\x7e\x46\xc6\x7d\x60\x16\x4c\x1f\xe5\x8f\x27\x96\x04\x7c\xc3\x31\x9b\xb2\xf6\x1a\xc1"..., 120, 0) = 120 getrandom("\xe0\x4a\xe4\xf5\xbf\xc4\xee\xf4\x3b\x00\xc3\xca\x22\x3b\x40\xa6\x6d\x0a\xf4\x43\x2d\x2b\x2d\x59\x3d\x2b\xdf\x3a\x31\x68\x09\xfb"..., 120, 0) = 120 getrandom("\x47\x01\x7c\xff\xc0\xab\x9b\x2d\x02\xa9\x1b\x0f\xb7\xa9\x1c\x5d\x81\x62\x06\xc8\xe7\x07\xca\xc3\x2f\x20\x5d\x70\x1b\x3d\x91\x06"..., 120, 0) = 120 getrandom("\x91\x6e\x96\x1e\x4b\xd1\x04\x87\xfe\x25\x31\x57\x07\xdc\xdf\x2c\xe2\x12\xdd\x7f\x66\x14\xea\xb0\x82\xf6\x57\xbe\xfd\xb5\x56\x1b"..., 120, 0) = 120 getrandom("\xe8\xe4\x0c\x3f\xa9\x9d\x72\x85\xdc\x81\x51\xfe\xf3\x85\x49\x57\x06\xc5\x60\xbd\xa3\x3b\x81\x7b\x06\xac\xdf\xfa\xa1\x95\xb0\xff"..., 120, 0) = 120 getrandom("\x0f\xb5\x36\xfb\x1e\xea\xe5\xe9\xa5\xf0\x66\x84\xbb\x5d\x1a\xb2\x00\x20\x76\xb3\xc8\x16\x00\xbf\x89\x26\x77\x8e\x86\x81\x07\x43"..., 120, 0) = 120 getrandom("\x3a\x55\x55\x48\x03\x34\xdc\xda\xed\x4a\x81\x0c\x8e\xe8\xc9\xcf\x43\x85\x43\x16\x23\x9d\xa1\x1c\x51\x0a\x6a\x4d\x07\x05\x15\x72"..., 120, 0) = 120 getrandom("\xa3\x93\xe8\xeb\xc0\x22\xd6\xfb\x5f\x6a\x28\xcb\x53\x52\x8c\xe2\x1a\x53\xa6\x82\x8b\xb7\xca\xb8\xbf\x6a\x8f\x16\x1d\xd0\x6b\x63"..., 120, 0) = 120 getrandom("\x4a\x36\x20\xe3\x9e\x45\xd3\x14\xcd\x51\xb4\xf3\x44\xaf\x76\x00\x14\x9c\xee\x60\x20\xe5\x98\xcf\x70\xfa\x92\xd4\xf7\xa7\x9d\xe7"..., 120, 0) = 120 getrusage(RUSAGE_SELF, {ru_utime={tv_sec=0, tv_usec=173406}, ru_stime={tv_sec=0, tv_usec=131627}, ...}) = 0 clock_gettime(CLOCK_PROCESS_CPUTIME_ID, {tv_sec=0, tv_nsec=305052552}) = 0 getpid() = 16844 futex(0xffff8e03df38, FUTEX_WAKE_PRIVATE, 2147483647) = 0 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xffff8e6b4000 mmap(NULL, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xffff8e544000 mlock(0xffff8e544000, 16384) = 0 madvise(0xffff8e544000, 16384, MADV_DONTDUMP) = 0 getpid() = 16844 getrusage(RUSAGE_SELF, {ru_utime={tv_sec=0, tv_usec=173481}, ru_stime={tv_sec=0, tv_usec=131684}, ...}) = 0 clock_gettime(CLOCK_PROCESS_CPUTIME_ID, {tv_sec=0, tv_nsec=305174008}) = 0 getpid() = 16844 write(7, "\1\0\0\0\0\0\0\0", 8) = 8 futex(0xaaaacd312120, FUTEX_WAKE_PRIVATE, 1) = 0 futex(0xaaaacd311d90, FUTEX_WAKE_PRIVATE, 1) = 1 futex(0xaaaacd30acb8, FUTEX_WAKE_PRIVATE, 1) = 1 ppoll([{fd=14, events=POLLIN}], 1, {tv_sec=25, tv_nsec=0}, NULL, 0) = 1 ([{fd=14, revents=POLLIN}], left {tv_sec=24, tv_nsec=995644202}) read(14, "\1\0\0\0\0\0\0\0", 8) = 8 getrusage(RUSAGE_SELF, {ru_utime={tv_sec=0, tv_usec=177890}, ru_stime={tv_sec=0, tv_usec=131684}, ...}) = 0 clock_gettime(CLOCK_PROCESS_CPUTIME_ID, {tv_sec=0, tv_nsec=309591403}) = 0 getrusage(RUSAGE_SELF, {ru_utime={tv_sec=0, tv_usec=177916}, ru_stime={tv_sec=0, tv_usec=131684}, ...}) = 0 clock_gettime(CLOCK_PROCESS_CPUTIME_ID, {tv_sec=0, tv_nsec=309611663}) = 0 write(7, "\1\0\0\0\0\0\0\0", 8) = 8 futex(0xaaaacd312120, FUTEX_WAKE_PRIVATE, 1) = 1 futex(0xaaaacd311d90, FUTEX_WAKE_PRIVATE, 1) = 1 futex(0xaaaacd30acb8, FUTEX_WAKE_PRIVATE, 1) = 1 ppoll([{fd=14, events=POLLIN}], 1, {tv_sec=25, tv_nsec=0}, NULL, 0) = 1 ([{fd=14, revents=POLLIN}], left {tv_sec=24, tv_nsec=999592996}) read(14, "\1\0\0\0\0\0\0\0", 8) = 8 ppoll([{fd=14, events=POLLIN}], 1, {tv_sec=0, tv_nsec=0}, NULL, 0) = 0 (Timeout) write(7, "\1\0\0\0\0\0\0\0", 8) = 8 futex(0xaaaacd312120, FUTEX_WAKE_PRIVATE, 1) = 1 futex(0xaaaacd311d90, FUTEX_WAKE_PRIVATE, 1) = 1 futex(0xaaaacd30acb8, FUTEX_WAKE_PRIVATE, 1) = 1 ppoll([{fd=14, events=POLLIN}], 1, {tv_sec=25, tv_nsec=0}, NULL, 0) = 1 ([{fd=14, revents=POLLIN}], left {tv_sec=24, tv_nsec=999658721}) read(14, "\1\0\0\0\0\0\0\0", 8) = 8 getrusage(RUSAGE_SELF, {ru_utime={tv_sec=0, tv_usec=178453}, ru_stime={tv_sec=0, tv_usec=131684}, ...}) = 0 clock_gettime(CLOCK_PROCESS_CPUTIME_ID, {tv_sec=0, tv_nsec=310145361}) = 0 write(14, "\1\0\0\0\0\0\0\0", 8) = 8 futex(0xaaaacd39ff90, FUTEX_WAKE_PRIVATE, 2147483647) = 0 ppoll([{fd=14, events=POLLIN}], 1, {tv_sec=0, tv_nsec=0}, NULL, 0) = 1 ([{fd=14, revents=POLLIN}], left {tv_sec=0, tv_nsec=0}) read(14, "\1\0\0\0\0\0\0\0", 8) = 8 timerfd_settime(21, TFD_TIMER_ABSTIME, {it_interval={tv_sec=5012, tv_nsec=490444835}, it_value={tv_sec=5012, tv_nsec=490444835}}, NULL) = 0 ppoll([{fd=3, events=POLLIN}, {fd=8, events=POLLIN}, {fd=12, events=POLLIN}], 3, {tv_sec=0, tv_nsec=0}, NULL, 0) = 2 ([{fd=3, revents=POLLIN}, {fd=8, revents=POLLIN}], left {tv_sec=0, tv_nsec=0}) read(3, "\2\0\0\0\0\0\0\0", 8) = 8 recvmsg(8, {msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base="\1\0\0\0\1\0\f\0)\0\0\0\1\0\0\0\1\0\f\0$\0\0\0\1\0\0\0\1\0\f\0"..., iov_len=1164}, {iov_base="", iov_len=2932}], msg_iovlen=2, msg_controllen=0, msg_flags=MSG_CMSG_CLOEXEC}, MSG_DONTWAIT|MSG_CMSG_CLOEXEC) = 324 write(3, "\1\0\0\0\0\0\0\0", 8) = 8 write(3, "\1\0\0\0\0\0\0\0", 8) = 8 write(3, "\1\0\0\0\0\0\0\0", 8) = 8 futex(0xffff8e03df38, FUTEX_WAKE_PRIVATE, 2147483647) = 0 ppoll([{fd=3, events=POLLIN}, {fd=8, events=POLLIN}, {fd=12, events=POLLIN}], 3, {tv_sec=0, tv_nsec=0}, NULL, 0) = 1 ([{fd=3, revents=POLLIN}], left {tv_sec=0, tv_nsec=0}) read(3, "\4\0\0\0\0\0\0\0", 8) = 8 ppoll([{fd=3, events=POLLIN}, {fd=8, events=POLLIN}, {fd=12, events=POLLIN}], 3, {tv_sec=0, tv_nsec=0}, NULL, 0) = 0 (Timeout) ppoll([{fd=3, events=POLLIN}, {fd=8, events=POLLIN}, {fd=12, events=POLLIN}], 3, {tv_sec=0, tv_nsec=0}, NULL, 0) = 0 (Timeout) ppoll([{fd=3, events=POLLIN}, {fd=8, events=POLLIN}, {fd=12, events=POLLIN}], 3, {tv_sec=0, tv_nsec=0}, NULL, 0) = 0 (Timeout) futex(0xffff8e03df38, FUTEX_WAKE_PRIVATE, 2147483647) = 0 timerfd_settime(21, TFD_TIMER_ABSTIME, {it_interval={tv_sec=5012, tv_nsec=491245458}, it_value={tv_sec=5012, tv_nsec=491245458}}, NULL) = 0 futex(0xaaaacd7dffd0, FUTEX_WAKE_PRIVATE, 1) = 1 sendmsg(8, {msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base="\36\0\0\0\10\0\f\0\1\0\0\0\37\0\0\0\4\0\f\0\225K\0\0", iov_len=24}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, MSG_DONTWAIT|MSG_NOSIGNAL) = 24 ppoll([{fd=3, events=POLLIN}, {fd=8, events=POLLIN}, {fd=12, events=POLLIN}], 3, {tv_sec=0, tv_nsec=0}, NULL, 0) = 0 (Timeout) eventfd2(0, EFD_CLOEXEC|EFD_NONBLOCK) = 47 ppoll([{fd=47, events=POLLIN}], 1, {tv_sec=0, tv_nsec=0}, NULL, 0) = 0 (Timeout) write(7, "\1\0\0\0\0\0\0\0", 8) = 8 futex(0xaaaacd312120, FUTEX_WAKE_PRIVATE, 1) = 1 futex(0xaaaacd311d90, FUTEX_WAKE_PRIVATE, 1) = 1 futex(0xaaaacd30acb8, FUTEX_WAKE_PRIVATE, 1) = 1 ppoll([{fd=47, events=POLLIN}], 1, {tv_sec=25, tv_nsec=0}, NULL, 0) = 1 ([{fd=47, revents=POLLIN}], left {tv_sec=24, tv_nsec=999506908}) read(47, "\1\0\0\0\0\0\0\0", 8) = 8 ppoll([{fd=47, events=POLLIN}], 1, {tv_sec=0, tv_nsec=0}, NULL, 0) = 0 (Timeout) write(7, "\1\0\0\0\0\0\0\0", 8) = 8 futex(0xaaaacd312120, FUTEX_WAKE_PRIVATE, 1) = 1 futex(0xaaaacd311d90, FUTEX_WAKE_PRIVATE, 1) = 1 futex(0xaaaacd30acb8, FUTEX_WAKE_PRIVATE, 1) = 1 ppoll([{fd=47, events=POLLIN}], 1, {tv_sec=25, tv_nsec=0}, NULL, 0) = 1 ([{fd=47, revents=POLLIN}], left {tv_sec=24, tv_nsec=999574509}) read(47, "\1\0\0\0\0\0\0\0", 8) = 8 getrusage(RUSAGE_SELF, {ru_utime={tv_sec=0, tv_usec=180736}, ru_stime={tv_sec=0, tv_usec=131684}, ...}) = 0 clock_gettime(CLOCK_PROCESS_CPUTIME_ID, {tv_sec=0, tv_nsec=312432958}) = 0 write(47, "\1\0\0\0\0\0\0\0", 8) = 8 futex(0xaaaacd3c98f0, FUTEX_WAKE_PRIVATE, 2147483647) = 0 ppoll([{fd=47, events=POLLIN}], 1, {tv_sec=0, tv_nsec=0}, NULL, 0) = 1 ([{fd=47, revents=POLLIN}], left {tv_sec=0, tv_nsec=0}) read(47, "\1\0\0\0\0\0\0\0", 8) = 8 close(47) = 0 timerfd_settime(21, TFD_TIMER_ABSTIME, {it_interval={tv_sec=5012, tv_nsec=494457635}, it_value={tv_sec=5012, tv_nsec=494457635}}, NULL) = 0 ppoll([{fd=3, events=POLLIN}, {fd=8, events=POLLIN}, {fd=12, events=POLLIN}], 3, {tv_sec=0, tv_nsec=0}, NULL, 0) = 0 (Timeout) timerfd_settime(21, TFD_TIMER_ABSTIME, {it_interval={tv_sec=5012, tv_nsec=494995203}, it_value={tv_sec=5012, tv_nsec=494995203}}, NULL) = 0 futex(0xaaaacd7dffd0, FUTEX_WAKE_PRIVATE, 1) = 1 timerfd_settime(21, TFD_TIMER_ABSTIME, {it_interval={tv_sec=5012, tv_nsec=495140974}, it_value={tv_sec=5012, tv_nsec=495140974}}, NULL) = 0 futex(0xaaaacd7dffd0, FUTEX_WAKE_PRIVATE, 1) = 1 getpid() = 16844 ioctl(18, DRM_IOCTL_AMDGPU_CTX or DRM_IOCTL_ETNAVIV_GEM_NEW or DRM_IOCTL_LIMA_GEM_INFO or DRM_IOCTL_MSM_GEM_NEW or DRM_IOCTL_QAIC_MMAP_BO or DRM_IOCTL_V3D_CREATE_BO or DRM_IOCTL_VC4_WAIT_BO, 0xffffe27f75b8) = 0 ioctl(18, DRM_IOCTL_AMDGPU_BO_LIST or DRM_IOCTL_MSM_GEM_INFO, 0xffffe27f7580) = 0 getpid() = 16844 getpid() = 16844 mmap(NULL, 2916352, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xfffef285f000 +++ killed by SIGSEGV (core dumped) +++ ```

There is no error message shown, simply a segmentation fault.

Expected Behavior

The app should open and make a database connection via FFI. In case supported, PRAGMA KEY should be applied.

App Version

v1.16.0-159-g5698d4da5

Additional Platform Information

Linux, arm64 + amd64

Additional Context

I consider this issue - at least until known where it comes from - as release critical since it could break a majority of the Linux users. It's reproducible on all major Linux distros apart from Ubuntu - and that's the interesting part about it.

krille-chan commented 9 months ago

Hey, sorry to hear that. But if it is only this niche I would not count this a release blocker at all. This is not a majority but a tiny minority of Linux users as the most users are using the Snap or Flatpak version anyway which are the only ones I can officially support and afaik on alpine, arch and fedora it is also possible to use Snap and Flatpak and I cannot take over responsibility over any single packaging format out there and delay a whole release because of this for all other platforms. I have no capacity for this so if users on other distros than Ubuntu/Debian base (which is already a very tiny minority) want to use FluffyChat, they will have to wait before they get the next release. However, 1.16.0 is still in a good condition.

TheOneWithTheBraid commented 9 months ago

screenshot_2024-01-04T11:34:17

Looks like I found the solution to it : SQLCipher requires quite special compile time options in order to cope with Flutter. In our proprietary matrix client, I reached to workaround this by shipping a bundled version of it. I would appreciate if we could apply this patch to FluffyChat as well - I consider stability here as more important that a little bigger app size because of a bundled library as long as it affects desktops only. Do you agree on that ?

I will submit corresponding patches in the afternoon.

selfisekai commented 9 months ago

from alpine side: can't reproduce this, might be because we're also building flutter on our own (rc1.17.0-3)

github-actions[bot] commented 4 months ago

This issue is stale because it has been open for 120 days with no activity.

github-actions[bot] commented 4 months ago

This issue was closed because it has been inactive for 14 days since being marked as stale.