mirror of
https://github.com/swaywm/sway.git
synced 2024-11-22 07:51:28 +00:00
Fix backup methods in get_socketpath for IPC client
Previously, the success of `getline` was tested by checking if the buffer it allocates is nonempty and has a nonzero first byte. As `getline` does not explicitly zero out its memory buffer, this may fail (e.g., with AddressSanitizer). Instead, we check that at least one character was returned on standard output. Also, trailing newlines (if present) are now removed.
This commit is contained in:
parent
afac6ced6e
commit
62260ab56e
|
@ -22,9 +22,13 @@ char *get_socketpath(void) {
|
|||
size_t line_size = 0;
|
||||
FILE *fp = popen("sway --get-socketpath 2>/dev/null", "r");
|
||||
if (fp) {
|
||||
getline(&line, &line_size, fp);
|
||||
ssize_t nret = getline(&line, &line_size, fp);
|
||||
pclose(fp);
|
||||
if (line && *line) {
|
||||
if (nret > 0) {
|
||||
// remove trailing newline, if there is one
|
||||
if (line[nret - 1] == '\n') {
|
||||
line[nret - 1] = '\0';
|
||||
}
|
||||
return line;
|
||||
}
|
||||
}
|
||||
|
@ -35,9 +39,13 @@ char *get_socketpath(void) {
|
|||
}
|
||||
fp = popen("i3 --get-socketpath 2>/dev/null", "r");
|
||||
if (fp) {
|
||||
getline(&line, &line_size, fp);
|
||||
ssize_t nret = getline(&line, &line_size, fp);
|
||||
pclose(fp);
|
||||
if (line && *line) {
|
||||
if (nret > 0) {
|
||||
// remove trailing newline, if there is one
|
||||
if (line[nret - 1] == '\n') {
|
||||
line[nret - 1] = '\0';
|
||||
}
|
||||
return line;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue