From: =?utf-8?b?0L3QsNCx?= <nabijaczleweli@nabijaczleweli.xyz>
Date: Sun, 24 Aug 2025 00:55:45 +0200
Subject: Fall back to ~=passwd(5) then ~=/ for ~/.xtermsetrc if $HOME unset
 instead of segfaulting (Closes: #716631)

$ env -i xtermset -store -T ')A'
Segmentation fault

$ env -i xtermset -store
Segmentation fault

getenv("HOME")                                                                                            = nil
strlen(nil <no return ...>
---
 src/xtermset.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/xtermset.c b/src/xtermset.c
index 190ace9..f658359 100644
--- a/src/xtermset.c
+++ b/src/xtermset.c
@@ -28,6 +28,8 @@
 #include <stdlib.h>
 #include <string.h>
 #include <assert.h>
+#include <unistd.h>
+#include <pwd.h>
 
 #include "xtermset.h"
 
@@ -260,11 +262,15 @@ void set_geom(char *geometry)
 
 FILE *open_rc_file(char *fn,char *mode)
 {
-    char fname[MAXFNCHARS-1];
+    char fname[MAXFNCHARS-1], *home;
+    struct passwd *pw;
     if(strlen(fn)>0) {
         strcpy(fname,fn);
     } else {
-        strcpy(fname,strcat(strcat(getenv("HOME"),"/"),RCFILE));
+        if(!(home = getenv("HOME")) && (pw = getpwuid(getuid()))) {
+            home = pw->pw_dir;
+        }
+        strcat(strcat(strcpy(fname,home?:""),"/"),RCFILE);
     }
     return fopen(fname,mode);
 }
