Browse Source

Implemented safe CString buffer creation with a guard byte at the end.

git-svn-id: https://svn.microneil.com/svn/CodeDweller/trunk@75 d34b734f-a00e-4b39-a726-e4eeb87269ab
wx
madscientist 9 years ago
parent
commit
688836730d
1 changed files with 11 additions and 3 deletions
  1. 11
    3
      configuration.cpp

+ 11
- 3
configuration.cpp View File

@@ -1149,11 +1149,19 @@ bool ConfigurationAttribute::interpret(ConfigurationData& Data) {

//// Configuratino Data ////////////////////////////////////////////////////////

char* newCStringBuffer(size_t requestedSize) {
const char NullTerminator = 0;
size_t safeSize = requestedSize + 1;
char* theBufferPointer = new char[safeSize];
theBufferPointer[requestedSize] = NullTerminator;
return theBufferPointer;
}

ConfigurationData::ConfigurationData(const char* Data, int Length) : // Raw constructor from buffer.
myBufferSize(Length), // and it's length.
myIndex(0), // Our Index is zero
myLine(1) { // We start on line 1
myDataBuffer = new char[myBufferSize]; // Allocate a buffer.
myDataBuffer = newCStringBuffer(myBufferSize); // Allocate a buffer.
memcpy(myDataBuffer, Data, myBufferSize); // Copy the data.
}

@@ -1166,7 +1174,7 @@ ConfigurationData::ConfigurationData(const char* FileName) :
ifstream CFGFile(FileName); // Open the file.
CFGFile.seekg(0,ios::end); // Seek to the end
myBufferSize = CFGFile.tellg(); // to find out what size it is.
myDataBuffer = new char[myBufferSize]; // Make a new buffer the right size.
myDataBuffer = newCStringBuffer(myBufferSize); // Make a new buffer the right size.
CFGFile.seekg(0,ios::beg); // Seek to the beginning and
CFGFile.read(myDataBuffer, myBufferSize); // read the file into the buffer.
if(CFGFile.bad()) { // If the read failed, we're unusable!
@@ -1193,7 +1201,7 @@ ConfigurationData::ConfigurationData(const string FileName) :
ifstream CFGFile(FileName.c_str()); // Open the file.
CFGFile.seekg(0,ios::end); // Seek to the end
myBufferSize = CFGFile.tellg(); // to find out what size it is.
myDataBuffer = new char[myBufferSize]; // Make a new buffer the right size.
myDataBuffer = newCStringBuffer(myBufferSize); // Make a new buffer the right size.
CFGFile.seekg(0,ios::beg); // Seek to the beginning and
CFGFile.read(myDataBuffer, myBufferSize); // read the file into the buffer.
if(CFGFile.bad()) { // If the read failed, we're unusable!

Loading…
Cancel
Save