Closed UltimateNyn closed 3 weeks ago
Seems a dup of #1289 and should have been fixed in 29ae56e
Can you test the newest dev build?
It also crashes in that commit specifically for me
Strange, I can't reproduce it myself.
Can you paste the output of echo -e '\eP+q6b697474792d71756572792d666f6e745f66616d696c79;6b697474792d71756572792d666f6e745f73697a65\e\\'
for debugging?
Does this patch help?
diff --git a/src/detection/terminalfont/terminalfont.c b/src/detection/terminalfont/terminalfont.c
index e992f789..fbd02636 100644
--- a/src/detection/terminalfont/terminalfont.c
+++ b/src/detection/terminalfont/terminalfont.c
@@ -77,12 +77,12 @@ FF_MAYBE_UNUSED static bool detectKitty(const FFstrbuf* exe, FFTerminalFontResul
FF_STRBUF_AUTO_DESTROY fontName = ffStrbufCreate();
FF_STRBUF_AUTO_DESTROY fontSize = ffStrbufCreate();
- char fontHex[512] = "", sizeHex[512] = "";
+ char fontHex[1024] = "", sizeHex[1024] = "";
// https://github.com/fastfetch-cli/fastfetch/discussions/1030#discussioncomment-9845233
if (ffGetTerminalResponse(
"\eP+q6b697474792d71756572792d666f6e745f66616d696c79;6b697474792d71756572792d666f6e745f73697a65\e\\", // kitty-query-font_family;kitty-query-font_size
2,
- "\eP1+r%*[^=]=%512[^\e]\e\\\eP1+r%*[^=]=%512[^\e]\e\\", fontHex, sizeHex) == NULL && *fontHex && *sizeHex)
+ "\eP1+r%*[^=]=%1023[^\e]\e\\\eP1+r%*[^=]=%1023[^\e]\e\\", fontHex, sizeHex) == NULL && *fontHex && *sizeHex)
{
// decode hex string
for (const char* p = fontHex; p[0] && p[1]; p += 2)
It seems like it does something strange due to shell stuff. ZSH:
Sometimes it also returns
^[P1+r6b697474792d71756572792d666f6e745f66616d696c79=4861636b4e464d2d526567756c6172^[\
Bash:
:1+r6b697474792d71756572792d666f6e745f66616d696c79=4861636b4e464d2d526567756c6172^[\
Wait I will test the patch now
It seems like it does something strange due to shell stuff. ZSH:
Sometimes it also returns
^[P1+r6b697474792d71756572792d666f6e745f66616d696c79=4861636b4e464d2d526567756c6172^[\
Bash:
:1+r6b697474792d71756572792d666f6e745f66616d696c79=4861636b4e464d2d526567756c6172^[\
Sorry. There should not be a whitespace after 792d7
Still crashes with the patch
Zsh output:
6cho65=3131 -e 'echo -e '\eP+q6b697474792d71756572792d666f6e745f66616d696c79;6b697474792d71756572792d666f6e745f73697a65\e\\'\eP+q6b697474792d71756572792d666f6e745f66616d696c79;6b697474792d71756572792d666f6e745f73697a65\e\\'
Bash output:
:1+r6b697474792d71756572792d666f6e745f66616d696c79=4861636b4e464d2d526567756c6172^[\^[P1+r6b697474792d71756572792d666f6e745f73697a65=3131^[\
It's HackNFM-Regular (11pt)
The code works completely fine for me. Really don't know how to debug it...
Let me add some debug output
Also added a fprintf(stderr, "Buffer for query %s is %s\n", request, buffer);
already just before the crashing vsscanf
. The output is
Buffer for query ^[P+q6b697474792d71756572792d76657273696f6e^[\ is ^[P1+r6b697474792d71756572792d76657273696f6e=302e33362e34^[\
Buffer for query ^[P+q6b697474792d71756572792d666f6e745f66616d696c79;6b697474792d71756572792d666f6e745f73697a65^[\ is ^[P1+r6b697474792d71756572792d666f6e745f66616d696c79=4861636b4e464d2d526567756c6172^[\
Buffer for query ^[P+q6b697474792d71756572792d666f6e745f66616d696c79;6b697474792d71756572792d666f6e745f73697a65^[\ is ^[P1+r6b697474792d71756572792d666f6e745f66616d696c79=4861636b4e464d2d526567756c6172^[\^[P1+r6b697474792d71756572792d666f6e745f73697a65=3131^[\
(Captured via a stderr redirect and outputted with cat -v
)
Doesn't seem problematic.
Please follow instructions bellow:
diff --git a/src/common/io/io_unix.c b/src/common/io/io_unix.c
index c29b43a9..537da1a1 100644
--- a/src/common/io/io_unix.c
+++ b/src/common/io/io_unix.c
@@ -11,6 +11,7 @@
#else
#include <sys/select.h>
#endif
+#include <signal.h>
#if FF_HAVE_WORDEXP
#include <wordexp.h>
@@ -216,6 +217,8 @@ const char* ffGetTerminalResponse(const char* request, int nParams, const char*
bytesRead += (size_t) nRead;
buffer[bytesRead] = '\0';
+ if (strstr(buffer, "\e\\\eP1")) raise(SIGTRAP);
+
int ret = vsscanf(buffer, format, args);
if (ret <= 0)
{
cmake . -DCMAKE_BUILD_TYPE=Debug
gdb ./fastfetch
run -s terminalfont -l none
bt full
It should be like
Output as text:
#0 __restore_sigs (set=set@entry=0x7fffffffd5e0) at ./arch/x86_64/syscall_arch.h:40
No locals.
#1 0x00007ffff7fb6e1b in raise (sig=<optimized out>) at src/signal/raise.c:11
set = {__bits = {0, 0, 0, 0, 0, 18446744073709551615, 0, 140737488344916, 0, 140737353870517, 140737354128228, 0, 18446744073709551615, 5, 140737488346048, 93824994182567}}
ret = 0
#2 0x00005555556f8828 in ffGetTerminalResponse (request=0x55555576cf20 "\033P+q6b697474792d71756572792d666f6e745f66616d696c79;6b697474792d71756572792d666f6e745f73697a65\033\\", nParams=2,
format=0x55555576cef0 "\033P1+r%*[^=]=%512[^\033]\033\\\033P1+r%*[^=]=%512[^\033]\033\\") at /tmp/a/fastfetch/src/common/io/io_unix.c:220
nRead = 54
ret = 1
buffer = "\033P1+r6b697474792d71756572792d666f6e745f66616d696c79=4861636b4e464d2d526567756c6172\033\\\033P1+r6b697474792d71756572792d666f6e745f73697a65=3131\033\\\000\367\377\177\000\000So\205%\000\000\000\000\260\331\377\377\377\177\000\000\000\000\000\000\000\000\000\000\260\331\377\377\377\177\000\0004\000\000\000\000\000\000\000\210\f\370\367\377\177\000\000\260\331\377\377\377\177\000\000"...
bytesRead = 138
args = {{gp_offset = 32, fp_offset = 48, overflow_arg_area = 0x7fffffffdbd0, reg_save_area = 0x7fffffffdb10}}
#3 0x000055555559105a in detectKitty (exe=0x555555818830 <result+16>, result=0x7fffffffe0f0) at /tmp/a/fastfetch/src/detection/terminalfont/terminalfont.c:82
fontName = {allocated = 0, length = 0, chars = 0x5555557c1814 ""}
fontSize = {allocated = 0, length = 0, chars = 0x5555557c1814 ""}
fontHex = "4861636b4e464d2d526567756c6172", '\000' <repeats 481 times>
sizeHex = '\000' <repeats 511 times>
#4 0x0000555555591800 in detectTerminalFontCommon (terminal=0x555555818820 <result>, terminalFont=0x7fffffffe0f0) at /tmp/a/fastfetch/src/detection/terminalfont/terminalfont.c:238
No locals.
#5 0x000055555559188c in ffDetectTerminalFont (result=0x7fffffffe0f0) at /tmp/a/fastfetch/src/detection/terminalfont/terminalfont.c:256
terminal = 0x555555818820 <result>
#6 0x000055555568f52c in ffPrintTerminalFont (options=0x555555816e00 <instance+9184>) at /tmp/a/fastfetch/src/modules/terminalfont/terminalfont.c:17
terminalFont = {error = {allocated = 0, length = 0, chars = 0x5555557c1814 ""}, font = {pretty = {allocated = 0, length = 0, chars = 0x5555557c1814 ""}, name = {allocated = 0, length = 0,
chars = 0x5555557c1814 ""}, size = {allocated = 0, length = 0, chars = 0x5555557c1814 ""}, styles = {data = 0x0, elementSize = 16, length = 0, capacity = 0}}, fallback = {pretty = {allocated = 0,
length = 0, chars = 0x5555557c1814 ""}, name = {allocated = 0, length = 0, chars = 0x5555557c1814 ""}, size = {allocated = 0, length = 0, chars = 0x5555557c1814 ""}, styles = {data = 0x0,
elementSize = 16, length = 0, capacity = 0}}}
#7 0x000055555557b49a in parseStructureCommand (line=0x555555818ce0 "terminalfont", fn=0x55555557a704 <genJsonResult>, jsonDoc=0x0) at /tmp/a/fastfetch/src/common/commandoption.c:97
baseInfo = 0x555555816e00 <instance+9184>
modules = 0x5555558142c8 <T+8>
#8 0x000055555557b5a9 in ffPrintCommandOption (data=0x7fffffffe440, jsonDoc=0x0) at /tmp/a/fastfetch/src/common/commandoption.c:120
colonIndex = 12
ms = 0
thres = -1
startIndex = 0
#9 0x000055555572fd92 in run (data=0x7fffffffe440) at /tmp/a/fastfetch/src/fastfetch.c:671
useJsonConfig = false
#10 0x000055555573066b in main (argc=5, argv=0x7fffffffe4a8) at /tmp/a/fastfetch/src/fastfetch.c:731
data = {structure = {allocated = 32, length = 12, chars = 0x555555818ce0 "terminalfont"}, configLoaded = false}
I think I know what the problem is. It's because I'm reusing va_arg. Completely missed that...
Please test the dev branch
It's now working without crash. Thank you
General description of bug:
What happened: When running fastfetch on Alpine Linux in the Kitty Terminal it segfaults
Fastfetch version used: Both
fastfetch-2.26.1-r0
from the Alpine Linux (Edge) repository and the lastest commit fromdev
(5f3ce500229a58468bb32e6541952fd1af309c45) show this behaviourDid it work in an older version: I randomly picked Tag
2.10.0
and it works there. I then bisected that and found out that the segfault was introduced with commit a052033dc6bf3c0f8986232601342e82e1050660. Please note that it doesn't crash always but most of the time (fells like it crashes 75% of the time)Often helpful information:
Screenshot:
The content of the configuration file you use (if any): I have no configuratoin file
Output of
fastfetch -c ci.jsonc --format json
:Output of
fastfetch --list-features
:If fastfatch crashed or froze
Paste the stacktrace here. You may get it with: I couldn't get the stacktrace with the provided
gdb
command but I can paste it from the normal gdbbt
output. It's from commit 5f3ce500229a58468bb32e6541952fd1af309c45 (latest commit ondev
) and was built with the same options as in the Alpine package except thatRelease
was replaced byDebug
If you are able to identify which module crashed, the strace can be helpful too. The
TerminalFont
module seems to be the one crashing (based on the Backtrace and stdout output).Command
strace ./build/fastfetch --multithreading false -s "TerminalFont" --pipe
returns: