From 2d117f08d1c709d06950df2cef90860d68c1560b Mon Sep 17 00:00:00 2001
From: PeiYong Zhang <peiyongz@apache.org>
Date: Fri, 25 Apr 2003 17:21:31 +0000
Subject: [PATCH] throw exception if getcwd() fails

git-svn-id: https://svn.apache.org/repos/asf/xerces/c/trunk@174925 13f79535-47bb-0310-9956-ffa450edef68
---
 .../util/Platforms/AIX/AIXPlatformUtils.cpp   | 16 +++++++++++-----
 .../util/Platforms/BeOS/BeOSPlatformUtils.cpp | 19 ++++++++++++++-----
 .../FreeBSD/FreeBSDPlatformUtils.cpp          | 19 ++++++++++++++-----
 .../util/Platforms/HPUX/HPPlatformUtils.cpp   | 19 ++++++++++++++-----
 .../util/Platforms/IRIX/IRIXPlatformUtils.cpp | 19 ++++++++++++++-----
 .../Platforms/Linux/LinuxPlatformUtils.cpp    | 19 ++++++++++++++-----
 .../Platforms/OS400/OS400PlatformUtils.cpp    | 16 +++++++++++-----
 .../OpenServer/OpenServerPlatformUtils.cpp    | 17 +++++++++++++----
 .../util/Platforms/QNX/QNXPlatformUtils.cpp   | 16 +++++++++++-----
 .../Solaris/SolarisPlatformUtils.cpp          | 16 +++++++++++-----
 .../Platforms/Tru64/Tru64PlatformUtils.cpp    | 16 +++++++++++-----
 .../UnixWare/UnixWarePlatformUtils.cpp        | 19 ++++++++++++++-----
 12 files changed, 152 insertions(+), 59 deletions(-)

diff --git a/src/xercesc/util/Platforms/AIX/AIXPlatformUtils.cpp b/src/xercesc/util/Platforms/AIX/AIXPlatformUtils.cpp
index f53bfe8e9..e81604baa 100644
--- a/src/xercesc/util/Platforms/AIX/AIXPlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/AIX/AIXPlatformUtils.cpp
@@ -322,7 +322,7 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
     ArrayJanitor<char> janText(newSrc);
 
     // Use a local buffer that is big enough for the largest legal path
-    char absPath[PATH_MAX];
+    char absPath[PATH_MAX + 1];
     //get the absolute path
     char* retPath = realpath(newSrc, &absPath[0]);
 
@@ -354,10 +354,16 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
 
 XMLCh* XMLPlatformUtils::getCurrentDirectory()
 {
-    char  *tempDir = getcwd(NULL, PATH_MAX+1);
-    XMLCh *curDir = tempDir ? XMLString::transcode(tempDir) : 0;
-    free(tempDir);
-    return curDir;
+    char  dirBuf[PATH_MAX + 1];
+    char  *curDir = getcwd(&dirBuf[0], PATH_MAX + 1);
+
+    if (!curDir)
+    {
+        ThrowXML(XMLPlatformUtilsException,
+                 XMLExcepts::File_CouldNotGetBasePathName);
+    }
+
+    return XMLString::transcode(curDir);
 }
 
 inline bool XMLPlatformUtils::isAnySlash(XMLCh c) 
diff --git a/src/xercesc/util/Platforms/BeOS/BeOSPlatformUtils.cpp b/src/xercesc/util/Platforms/BeOS/BeOSPlatformUtils.cpp
index c04c143a9..bd56f6d6e 100644
--- a/src/xercesc/util/Platforms/BeOS/BeOSPlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/BeOS/BeOSPlatformUtils.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.6  2003/04/25 17:18:53  peiyongz
+ * throw exception if getcwd() fails
+ *
  * Revision 1.5  2003/04/24 02:52:34  peiyongz
  * Logical Path Resolution
  *
@@ -378,7 +381,7 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
     ArrayJanitor<char> janText(newSrc);
 
     // Use a local buffer that is big enough for the largest legal path
-    char absPath[PATH_MAX];
+    char absPath[PATH_MAX + 1];
     // get the absolute path
     char* retPath = realpath(newSrc, &absPath[0]);
 
@@ -409,10 +412,16 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
 
 XMLCh* XMLPlatformUtils::getCurrentDirectory()
 {
-    char  *tempDir = getcwd(NULL, PATH_MAX+1);
-    XMLCh *curDir = tempDir ? XMLString::transcode(tempDir) : 0;
-    free(tempDir);
-    return curDir;
+    char  dirBuf[PATH_MAX + 1];
+    char  *curDir = getcwd(&dirBuf[0], PATH_MAX + 1);
+
+    if (!curDir)
+    {
+        ThrowXML(XMLPlatformUtilsException,
+                 XMLExcepts::File_CouldNotGetBasePathName);
+    }
+
+    return XMLString::transcode(curDir);
 }
 
 inline bool XMLPlatformUtils::isAnySlash(XMLCh c) 
diff --git a/src/xercesc/util/Platforms/FreeBSD/FreeBSDPlatformUtils.cpp b/src/xercesc/util/Platforms/FreeBSD/FreeBSDPlatformUtils.cpp
index c1ac18c97..d4a454a86 100644
--- a/src/xercesc/util/Platforms/FreeBSD/FreeBSDPlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/FreeBSD/FreeBSDPlatformUtils.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.12  2003/04/25 17:19:10  peiyongz
+ * throw exception if getcwd() fails
+ *
  * Revision 1.11  2003/04/24 02:53:29  peiyongz
  * Logical Path Resolution
  *
@@ -414,7 +417,7 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
     ArrayJanitor<char> janText(newSrc);
 
     // Use a local buffer that is big enough for the largest legal path
-    char absPath[PATH_MAX];
+    char absPath[PATH_MAX + 1];
     // get the absolute path
     char* retPath = realpath(newSrc, &absPath[0]);
 
@@ -445,10 +448,16 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
 
 XMLCh* XMLPlatformUtils::getCurrentDirectory()
 {
-    char  *tempDir = getcwd(NULL, PATH_MAX+1);
-    XMLCh *curDir = tempDir ? XMLString::transcode(tempDir) : 0;
-    free(tempDir);
-    return curDir;
+    char  dirBuf[PATH_MAX + 1];
+    char  *curDir = getcwd(&dirBuf[0], PATH_MAX + 1);
+
+    if (!curDir)
+    {
+        ThrowXML(XMLPlatformUtilsException,
+                 XMLExcepts::File_CouldNotGetBasePathName);
+    }
+
+    return XMLString::transcode(curDir);
 }
 
 inline bool XMLPlatformUtils::isAnySlash(XMLCh c) 
diff --git a/src/xercesc/util/Platforms/HPUX/HPPlatformUtils.cpp b/src/xercesc/util/Platforms/HPUX/HPPlatformUtils.cpp
index b06d4b38b..7e5b703b7 100644
--- a/src/xercesc/util/Platforms/HPUX/HPPlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/HPUX/HPPlatformUtils.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.12  2003/04/25 17:19:26  peiyongz
+ * throw exception if getcwd() fails
+ *
  * Revision 1.11  2003/04/24 02:53:52  peiyongz
  * Logical Path Resolution
  *
@@ -459,7 +462,7 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
     ArrayJanitor<char> janText(newSrc);
 
     // Use a local buffer that is big enough for the largest legal path
-    char absPath[PATH_MAX];
+    char absPath[PATH_MAX + 1];
     //get the absolute path
     char* retPath = realpath(newSrc, &absPath[0]);
 
@@ -491,10 +494,16 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
 
 XMLCh* XMLPlatformUtils::getCurrentDirectory()
 {
-    char  *tempDir = getcwd(NULL, PATH_MAX+1);
-    XMLCh *curDir = tempDir ? XMLString::transcode(tempDir) : 0;
-    free(tempDir);
-    return curDir;
+    char  dirBuf[PATH_MAX + 1];
+    char  *curDir = getcwd(&dirBuf[0], PATH_MAX + 1);
+
+    if (!curDir)
+    {
+        ThrowXML(XMLPlatformUtilsException,
+                 XMLExcepts::File_CouldNotGetBasePathName);
+    }
+
+    return XMLString::transcode(curDir);
 }
 
 inline bool XMLPlatformUtils::isAnySlash(XMLCh c) 
diff --git a/src/xercesc/util/Platforms/IRIX/IRIXPlatformUtils.cpp b/src/xercesc/util/Platforms/IRIX/IRIXPlatformUtils.cpp
index 325ef34ec..24b92aebd 100644
--- a/src/xercesc/util/Platforms/IRIX/IRIXPlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/IRIX/IRIXPlatformUtils.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.11  2003/04/25 17:19:40  peiyongz
+ * throw exception if getcwd() fails
+ *
  * Revision 1.10  2003/04/24 02:54:24  peiyongz
  * Logical Path Resolution
  *
@@ -431,7 +434,7 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
     ArrayJanitor<char> janText(newSrc);
 
     // Use a local buffer that is big enough for the largest legal path
-    char absPath[PATH_MAX];
+    char absPath[PATH_MAX + 1];
     // get the absolute path
     char* retPath = realpath(newSrc, &absPath[0]);
 
@@ -462,10 +465,16 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
 
 XMLCh* XMLPlatformUtils::getCurrentDirectory()
 {
-    char  *tempDir = getcwd(NULL, PATH_MAX+1);
-    XMLCh *curDir = tempDir ? XMLString::transcode(tempDir) : 0;
-    free(tempDir);
-    return curDir;
+    char  dirBuf[PATH_MAX + 1];
+    char  *curDir = getcwd(&dirBuf[0], PATH_MAX + 1);
+
+    if (!curDir)
+    {
+        ThrowXML(XMLPlatformUtilsException,
+                 XMLExcepts::File_CouldNotGetBasePathName);
+    }
+
+    return XMLString::transcode(curDir);
 }
 
 inline bool XMLPlatformUtils::isAnySlash(XMLCh c) 
diff --git a/src/xercesc/util/Platforms/Linux/LinuxPlatformUtils.cpp b/src/xercesc/util/Platforms/Linux/LinuxPlatformUtils.cpp
index f3a4d48bb..119c12c6c 100644
--- a/src/xercesc/util/Platforms/Linux/LinuxPlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/Linux/LinuxPlatformUtils.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.15  2003/04/25 17:19:53  peiyongz
+ * throw exception if getcwd() fails
+ *
  * Revision 1.14  2003/04/24 02:54:46  peiyongz
  * Logical Path Resolution
  *
@@ -474,7 +477,7 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
     ArrayJanitor<char> janText(newSrc);
 
     // Use a local buffer that is big enough for the largest legal path
-    char absPath[PATH_MAX];
+    char absPath[PATH_MAX + 1];
     // get the absolute path
     char* retPath = realpath(newSrc, &absPath[0]);
 
@@ -505,10 +508,16 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
 
 XMLCh* XMLPlatformUtils::getCurrentDirectory()
 {
-    char  *tempDir = getcwd(NULL, PATH_MAX+1);
-    XMLCh *curDir = tempDir ? XMLString::transcode(tempDir) : 0;
-    free(tempDir);
-    return curDir;
+    char  dirBuf[PATH_MAX + 1];
+    char  *curDir = getcwd(&dirBuf[0], PATH_MAX + 1);
+
+    if (!curDir)
+    {
+        ThrowXML(XMLPlatformUtilsException,
+                 XMLExcepts::File_CouldNotGetBasePathName);
+    }
+
+    return XMLString::transcode(curDir);
 }
 
 inline bool XMLPlatformUtils::isAnySlash(XMLCh c) 
diff --git a/src/xercesc/util/Platforms/OS400/OS400PlatformUtils.cpp b/src/xercesc/util/Platforms/OS400/OS400PlatformUtils.cpp
index 043a10315..6dc79280c 100644
--- a/src/xercesc/util/Platforms/OS400/OS400PlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/OS400/OS400PlatformUtils.cpp
@@ -396,7 +396,7 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
     char* newSrc = XMLString::transcode(srcPath);
      ArrayJanitor<char> janText(newSrc);
     // Use a local buffer that is big enough for the largest legal path
-    char absPath[PATH_MAX];
+    char absPath[PATH_MAX + 1];
 	//get the absolute path
     char* retPath = realpath(newSrc, &absPath[0]);	
 	
@@ -428,10 +428,16 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
 
 XMLCh* XMLPlatformUtils::getCurrentDirectory()
 {
-    char  *tempDir = getcwd(NULL, PATH_MAX+1);
-    XMLCh *curDir = tempDir ? XMLString::transcode(tempDir) : 0;
-    free(tempDir);
-    return curDir;
+    char  dirBuf[PATH_MAX + 1];
+    char  *curDir = getcwd(&dirBuf[0], PATH_MAX + 1);
+
+    if (!curDir)
+    {
+        ThrowXML(XMLPlatformUtilsException,
+                 XMLExcepts::File_CouldNotGetBasePathName);
+    }
+
+    return XMLString::transcode(curDir);
 }
 
 inline bool XMLPlatformUtils::isAnySlash(XMLCh c) 
diff --git a/src/xercesc/util/Platforms/OpenServer/OpenServerPlatformUtils.cpp b/src/xercesc/util/Platforms/OpenServer/OpenServerPlatformUtils.cpp
index 3e06d65c5..db6a21482 100644
--- a/src/xercesc/util/Platforms/OpenServer/OpenServerPlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/OpenServer/OpenServerPlatformUtils.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.7  2003/04/25 17:20:11  peiyongz
+ * throw exception if getcwd() fails
+ *
  * Revision 1.6  2003/04/24 02:55:58  peiyongz
  * Logical Path Resolution
  *
@@ -386,10 +389,16 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
 
 XMLCh* XMLPlatformUtils::getCurrentDirectory()
 {
-    char  *tempDir = getcwd(NULL, PATH_MAX+1);
-    XMLCh *curDir = tempDir ? XMLString::transcode(tempDir) : 0;
-    free(tempDir);
-    return curDir;
+    char  dirBuf[PATH_MAX + 1];
+    char  *curDir = getcwd(&dirBuf[0], PATH_MAX + 1);
+
+    if (!curDir)
+    {
+        ThrowXML(XMLPlatformUtilsException,
+                 XMLExcepts::File_CouldNotGetBasePathName);
+    }
+
+    return XMLString::transcode(curDir);
 }
 
 inline bool XMLPlatformUtils::isAnySlash(XMLCh c) 
diff --git a/src/xercesc/util/Platforms/QNX/QNXPlatformUtils.cpp b/src/xercesc/util/Platforms/QNX/QNXPlatformUtils.cpp
index 64a30dd47..583307f2d 100644
--- a/src/xercesc/util/Platforms/QNX/QNXPlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/QNX/QNXPlatformUtils.cpp
@@ -227,7 +227,7 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
     //
     char* newSrc = XMLString::transcode(srcPath);
     ArrayJanitor<char> janText(newSrc);
-    char absPath[PATH_MAX];
+    char absPath[PATH_MAX + 1];
 
     char* retPath = realpath(newSrc, &absPath[0]);
 
@@ -248,10 +248,16 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
 
 XMLCh* XMLPlatformUtils::getCurrentDirectory()
 {
-    char  *tempDir = getcwd(NULL, PATH_MAX+1);
-    XMLCh *curDir = tempDir ? XMLString::transcode(tempDir) : 0;
-    free(tempDir);
-    return curDir;
+    char  dirBuf[PATH_MAX + 1];
+    char  *curDir = getcwd(&dirBuf[0], PATH_MAX + 1);
+
+    if (!curDir)
+    {
+        ThrowXML(XMLPlatformUtilsException,
+                 XMLExcepts::File_CouldNotGetBasePathName);
+    }
+
+    return XMLString::transcode(curDir);
 }
 
 inline bool XMLPlatformUtils::isAnySlash(XMLCh c) 
diff --git a/src/xercesc/util/Platforms/Solaris/SolarisPlatformUtils.cpp b/src/xercesc/util/Platforms/Solaris/SolarisPlatformUtils.cpp
index fd7770654..a56cb3a4a 100644
--- a/src/xercesc/util/Platforms/Solaris/SolarisPlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/Solaris/SolarisPlatformUtils.cpp
@@ -344,7 +344,7 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
     ArrayJanitor<char> janText(newSrc);
 
     // Use a local buffer that is big enough for the largest legal path
-    char absPath[PATH_MAX];
+    char absPath[PATH_MAX + 1];
     //get the absolute path
     char* retPath = realpath(newSrc, &absPath[0]);
 
@@ -375,10 +375,16 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
 
 XMLCh* XMLPlatformUtils::getCurrentDirectory()
 {
-    char  *tempDir = getcwd(NULL, PATH_MAX+1);
-    XMLCh *curDir = tempDir ? XMLString::transcode(tempDir) : 0;
-    free(tempDir);
-    return curDir;
+    char  dirBuf[PATH_MAX + 1];
+    char  *curDir = getcwd(&dirBuf[0], PATH_MAX + 1);
+
+    if (!curDir)
+    {
+        ThrowXML(XMLPlatformUtilsException,
+                 XMLExcepts::File_CouldNotGetBasePathName);
+    }
+
+    return XMLString::transcode(curDir);
 }
 
 inline bool XMLPlatformUtils::isAnySlash(XMLCh c) 
diff --git a/src/xercesc/util/Platforms/Tru64/Tru64PlatformUtils.cpp b/src/xercesc/util/Platforms/Tru64/Tru64PlatformUtils.cpp
index 99ea0fb52..065ce4719 100644
--- a/src/xercesc/util/Platforms/Tru64/Tru64PlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/Tru64/Tru64PlatformUtils.cpp
@@ -343,7 +343,7 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
   ArrayJanitor<char> janText(newSrc);
 
   // Use a local buffer that is big enough for the largest legal path
-  char absPath[PATH_MAX];
+  char absPath[PATH_MAX + 1];
   //get the absolute path
   char* retPath = realpath(newSrc, &absPath[0]);
 
@@ -375,10 +375,16 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
 
 XMLCh* XMLPlatformUtils::getCurrentDirectory()
 {
-    char  *tempDir = getcwd(NULL, PATH_MAX+1);
-    XMLCh *curDir = tempDir ? XMLString::transcode(tempDir) : 0;
-    free(tempDir);
-    return curDir;
+    char  dirBuf[PATH_MAX + 1];
+    char  *curDir = getcwd(&dirBuf[0], PATH_MAX + 1);
+
+    if (!curDir)
+    {
+        ThrowXML(XMLPlatformUtilsException,
+                 XMLExcepts::File_CouldNotGetBasePathName);
+    }
+
+    return XMLString::transcode(curDir);
 }
 
 inline bool XMLPlatformUtils::isAnySlash(XMLCh c) 
diff --git a/src/xercesc/util/Platforms/UnixWare/UnixWarePlatformUtils.cpp b/src/xercesc/util/Platforms/UnixWare/UnixWarePlatformUtils.cpp
index 609e13aa5..92c3fd453 100644
--- a/src/xercesc/util/Platforms/UnixWare/UnixWarePlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/UnixWare/UnixWarePlatformUtils.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.9  2003/04/25 17:21:31  peiyongz
+ * throw exception if getcwd() fails
+ *
  * Revision 1.8  2003/04/24 02:59:20  peiyongz
  * Logical Path Resolution
  *
@@ -405,7 +408,7 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
     ArrayJanitor<char> janText(newSrc);
 
     // Use a local buffer that is big enough for the largest legal path
-    char absPath[PATH_MAX];
+    char absPath[PATH_MAX + 1];
     //get the absolute path
     char* retPath = realpath(newSrc, &absPath[0]);
 
@@ -437,10 +440,16 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
 
 XMLCh* XMLPlatformUtils::getCurrentDirectory()
 {
-    char  *tempDir = getcwd(NULL, PATH_MAX+1);
-    XMLCh *curDir = tempDir ? XMLString::transcode(tempDir) : 0;
-    free(tempDir);
-    return curDir;
+    char  dirBuf[PATH_MAX + 1];
+    char  *curDir = getcwd(&dirBuf[0], PATH_MAX + 1);
+
+    if (!curDir)
+    {
+        ThrowXML(XMLPlatformUtilsException,
+                 XMLExcepts::File_CouldNotGetBasePathName);
+    }
+
+    return XMLString::transcode(curDir);
 }
 
 inline bool XMLPlatformUtils::isAnySlash(XMLCh c) 
-- 
GitLab