Bug 50648

Summary: powermanga после проигрывания заставки (INTRO), вылетает по Segfault
Product: Sisyphus Reporter: dfpl <lubyagin>
Component: powermangaAssignee: Fr. Br. George <george>
Status: NEW --- QA Contact: qa-sisyphus
Severity: major    
Priority: P5 CC: amakeenk
Version: unstable   
Hardware: x86_64   
OS: Linux   
Attachments:
Description Flags
скриншот главного экрана-меню (powermanga) none

Description dfpl 2024-06-14 18:32:22 MSK
Created attachment 16267 [details]
скриншот главного экрана-меню (powermanga)

Есть пара замечаний по пакету powermanga.
Первое. Музыка в INTRO тут отличная, но в конце её проигрывания вылетает по Segfault:
$ powermanga 
(II) opendir(/home/lk/.config/tlk-games) successful [config_file.c:178, configfile_check_dir]
(II) configuration filename: /home/lk/.config/tlk-games/powermanga.conf [config_file.c:238, configfile_load]
(EE) can't open file  /home/lk/.config/tlk-games/powermanga.conf (No such file or directory) [tools.c:884, load_absolute_file]
(EE) lisp_read_file(/home/lk/.config/tlk-games/powermanga.conf) failed! [config_file.c:242, configfile_load]
Ошибка сегментирования


$ strace powermanga
...
poll(0x7ffc1d8e68d8, 1, -1)             = 1 ([0x7ffc1d8e68d8])
writev(8, 0x7ffc1d8e6a30, 3)            = 240664
select(0, NULL, NULL, NULL, 0x7ffc1d8e6ce0) = 0 (Timeout)
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_ACCERR, si_addr=0x7fc916c92208} ---
+++ killed by SIGSEGV +++
Ошибка сегментирования

И второй момент, бинарнику тут присвоен SGID-флаг:
$ file /usr/bin/powermanga 
/usr/bin/powermanga: setgid executable, regular file, no read permission
$ ls -l /usr/bin/powermanga 
-rwx--s--x 1 root games 277272 апр 22  2021 /usr/bin/powermanga

Убираем SGID-флаг, это позволяет запуститься под valgrind,
$ valgrind -v powermanga
но видны ошибки отрисовки графики. Очевидно, что где-то игра вылазит за пределы экранного буфера SDL или ошибочно работает с другой памятью. См. приложенный скриншот.
Comment 1 dfpl 2024-06-15 01:32:28 MSK
Посмотрел исходный код игры, он весьма нетривиальный (со вставками на ассемблере и анимацией движения объектов по кривым Безье). Понять, где там segfault происходит, у меня не получилось. Чтобы сохранить работоспособность игры, можно оставить её в режиме SDL (full-screen). То есть, применить следующий патч:
--- powermanga.orig/powermanga.spec     2024-06-14 21:48:45.207286576 +0300
+++ powermanga/powermanga.spec  2024-06-15 01:18:59.946644152 +0300
@@ -1,6 +1,6 @@
 Name: powermanga
 Version: 0.93.1
-Release: alt2
+Release: alt3
 Summary: Shoot them up with 3d graphics
 
 License: %gpl3plus
@@ -51,8 +51,7 @@
 
 %configure \
        --mandir=%_man6dir \
-       --enable-x11 \
-       --with-x
+       --without-x
 %make scoredir=%_localstatedir/games

Хотя, чисто субъективно, кривые движения кораблей противника при ресайзе 320:200 -> 16:9 будут выглядеть неестественными, чаще промазываешь при стрельбе по ним. Это беда многих SDL-игр, которые не сохраняют ratio при ресайзе до full-screen (можно бы было добавлять чёрный border с правой и левой части экрана).