]> source.dussan.org Git - tigervnc.git/commitdiff
Handle failure getting VNC directories
authorPierre Ossman <ossman@cendio.se>
Thu, 29 Aug 2024 15:19:40 +0000 (17:19 +0200)
committerLinn Mattsson <linma@cendio.se>
Tue, 22 Oct 2024 10:41:33 +0000 (12:41 +0200)
Although rare, there are cases where we might fail to determine our base
directories. Make sure the code can handle it.

(cherry picked from commit edee4db8d1fd85495f189293041311bfff56d23c)

vncviewer/vncviewer.cxx

index d9f85f5a3a99514f2c8aa4c3a3683bb5984b9289..8a60c42bd484ced035690b0e11f0f94b5754d407 100644 (file)
@@ -531,28 +531,47 @@ migrateDeprecatedOptions()
 static void
 create_base_dirs()
 {
-  char *confdir = strdup(os::getvncconfigdir());
+  const char *dir;
+
+  dir = os::getvncconfigdir();
+  if (dir == NULL) {
+    vlog.error(_("Could not determine VNC config directory path"));
+    return;
+  }
+
 #ifndef WIN32
-  char *dotdir = strrchr(confdir, '.');
+  const char *dotdir = strrchr(dir, '.');
   if (dotdir != NULL && strcmp(dotdir, ".vnc") == 0)
     vlog.info(_("~/.vnc is deprecated, please consult 'man vncviewer' for paths to migrate to."));
 #else
-  char *vncdir = strrchr(confdir, '\\');
+  const char *vncdir = strrchr(dir, '\\');
   if (vncdir != NULL && strcmp(vncdir, "vnc") == 0)
     vlog.info(_("%%APPDATA%%\\vnc is deprecated, please switch to the %%APPDATA%%\\TigerVNC location."));
 #endif
 
-  if (os::mkdir_p(os::getvncconfigdir(), 0755) == -1) {
+  if (os::mkdir_p(dir, 0755) == -1) {
     if (errno != EEXIST)
       vlog.error(_("Could not create VNC config directory: %s"), strerror(errno));
   }
 
-  if (os::mkdir_p(os::getvncdatadir(), 0755) == -1) {
+  dir = os::getvncdatadir();
+  if (dir == NULL) {
+    vlog.error(_("Could not determine VNC data directory path"));
+    return;
+  }
+
+  if (os::mkdir_p(dir, 0755) == -1) {
     if (errno != EEXIST)
       vlog.error(_("Could not create VNC data directory: %s"), strerror(errno));
   }
 
-  if (os::mkdir_p(os::getvncstatedir(), 0755) == -1) {
+  dir = os::getvncstatedir();
+  if (dir == NULL) {
+    vlog.error(_("Could not determine VNC state directory path"));
+    return;
+  }
+
+  if (os::mkdir_p(dir, 0755) == -1) {
     if (errno != EEXIST)
       vlog.error(_("Could not create VNC state directory: %s"), strerror(errno));
   }