Author: arty
Date: Sat Jan 31 02:43:10 2009
New Revision: 39218
URL:
http://svn.reactos.org/svn/reactos?rev=39218&view=rev
Log:
Fix misuse of std::string in assuming that it's always null terminated, and that
the c_str result is writable.
Modified:
trunk/reactos/tools/xml.cpp
trunk/reactos/tools/xml.h
Modified: trunk/reactos/tools/xml.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/xml.cpp?rev=39218&am…
==============================================================================
--- trunk/reactos/tools/xml.cpp [iso-8859-1] (original)
+++ trunk/reactos/tools/xml.cpp [iso-8859-1] Sat Jan 31 02:43:10 2009
@@ -58,6 +58,35 @@
string working_directory;
+std::vector<char> vectorize(const std::string &str)
+{
+ std::vector<char> result( str.size() + 1 );
+ strcpy( &result[0], str.c_str() );
+ return result;
+}
+
+void vectappend(std::vector<char> &strvec, const char *str)
+{
+ if (*str) { strvec[strlen(&strvec[0])] = *str; str++; }
+ while (*str)
+ {
+ strvec.push_back(*str);
+ str++;
+ }
+ strvec.push_back(0);
+}
+
+void vectappend(std::vector<char> &strvec, const std::string &str)
+{
+ vectappend(strvec, str.c_str());
+}
+
+void vectappend(std::vector<char> &strvec, char ch)
+{
+ strvec[strlen(&strvec[0])] = ch;
+ strvec.push_back(0);
+}
+
XMLException::XMLException (
const std::string& location,
const char* format, ... )
@@ -158,7 +187,7 @@
return file;
}
vector<string> pathtmp ( path );
- string tmp ( file );
+ vector<char> tmp = vectorize( file );
const char* prev = strtok ( &tmp[0], "/\\" );
const char* p = strtok ( NULL, "/\\" );
while ( p )
@@ -184,18 +213,18 @@
pathtmp.push_back ( prev );
// reuse tmp variable to return recombined path
- tmp.resize(0);
+ tmp = vectorize("");
for ( size_t i = 0; i < pathtmp.size(); i++ )
{
// this squirreliness is b/c win32 has drive letters and *nix doesn't...
#ifdef WIN32
- if ( i ) tmp += "/";
+ if ( i ) vectappend(tmp, "/");
#else
- tmp += "/";
+ vectappend(tmp, "/");
#endif
- tmp += pathtmp[i];
- }
- return tmp;
+ vectappend(tmp, pathtmp[i]);
+ }
+ return &tmp[0];
}
string
Modified: trunk/reactos/tools/xml.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/xml.h?rev=39218&…
==============================================================================
--- trunk/reactos/tools/xml.h [iso-8859-1] (original)
+++ trunk/reactos/tools/xml.h [iso-8859-1] Sat Jan 31 02:43:10 2009
@@ -236,4 +236,9 @@
XMLElement*
XMLLoadFile ( const std::string& filename );
+std::vector<char> vectorize(const std::string &str);
+void vectappend(std::vector<char> &strvec, char ch);
+void vectappend(std::vector<char> &strvec, const char *charstr);
+void vectappend(std::vector<char> &strvec, const std::string &str);
+
#endif // XML_H