diff --git a/src/uri.cpp b/src/uri.cpp
index af8347c1efa575d6d3f60bd64b1f8f0924ab663c..ff561f2ef8f3a7cb446e0d626e3d481666a76a16 100644
--- a/src/uri.cpp
+++ b/src/uri.cpp
@@ -63,9 +63,15 @@ void URI::_parse(uri_t puri) {
         suri = std::string("file://") + suri;
     } else if (suri[0] == '~') {
 #ifdef WIN32
-        suri = string("file://") + string(std::getenv("HOMEDRIVE")) + string(std::getenv("HOMEPATH")) + suri.substr(1);
+        const char *homeDrive = std::getenv("HOMEDRIVE");
+        const char *homePath = std::getenv("HOMEPATH");
+        suri = string("file://")
+            + string((homeDrive) ? homeDrive : "")
+            + string((homePath) ? homePath : "")
+            + suri.substr(1);
 #else
-        suri = string("file://") + string(std::getenv("HOME")) + suri.substr(1);
+        const char *homeDir = std::getenv("HOME");
+        suri = string("file://") + string((homeDir) ? homeDir : "") + suri.substr(1);
 #endif
     }