Check-in a couple submitted char* string portability bug fixes: correct sizing of buffers and stop overwriting preprocessor token names with themselves.

git-svn-id: https://cvs.khronos.org/svn/repos/ogl/trunk/ecosystem/public/sdk/tools/glslang@25402 e7fa87d3-cd2b-0410-9028-fcbf551c1848
This commit is contained in:
John Kessenich
2014-02-19 00:08:59 +00:00
parent 51cdd90fa8
commit 6494baf371
4 changed files with 11 additions and 12 deletions

View File

@@ -224,7 +224,7 @@ void ProcessConfigFile()
} }
if (config == 0) { if (config == 0) {
config = new char[strlen(DefaultConfig)]; config = new char[strlen(DefaultConfig) + 1];
strcpy(config, DefaultConfig); strcpy(config, DefaultConfig);
} }
@@ -862,10 +862,10 @@ char** ReadFileData(const char* fileName)
{ {
FILE *in; FILE *in;
int errorCode = fopen_s(&in, fileName, "r"); int errorCode = fopen_s(&in, fileName, "r");
char* fdata; char *fdata;
int count = 0; int count = 0;
const int maxSourceStrings = 5; const int maxSourceStrings = 5;
char** return_data = (char**)malloc(maxSourceStrings+1); char** return_data = (char**)malloc(sizeof(char *) * (maxSourceStrings+1));
//return_data[MAX_SOURCE_STRINGS]=NULL; //return_data[MAX_SOURCE_STRINGS]=NULL;
if (errorCode) { if (errorCode) {

View File

@@ -9,5 +9,5 @@
// source have to figure out how to create revision.h just to get a build // source have to figure out how to create revision.h just to get a build
// going. However, if it is not updated, it can be a version behind. // going. However, if it is not updated, it can be a version behind.
#define GLSLANG_REVISION "25392" #define GLSLANG_REVISION "25400"
#define GLSLANG_DATE "2014/02/18 14:55:42" #define GLSLANG_DATE "2014/02/18 16:37:57"

View File

@@ -381,7 +381,7 @@ protected:
int InitScanner(TPpContext* cpp); int InitScanner(TPpContext* cpp);
int ScanFromString(char* s); int ScanFromString(char* s);
void missingEndifCheck(); void missingEndifCheck();
int lFloatConst(char* str, int len, int ch, TPpToken* ppToken); int lFloatConst(int len, int ch, TPpToken* ppToken);
bool inComment; bool inComment;

View File

@@ -113,7 +113,7 @@ int TPpContext::InitScanner(TPpContext *cpp)
* letter 'e', or a precision ending (e.g., F or LF). * letter 'e', or a precision ending (e.g., F or LF).
*/ */
int TPpContext::lFloatConst(char* str, int len, int ch, TPpToken* ppToken) int TPpContext::lFloatConst(int len, int ch, TPpToken* ppToken)
{ {
bool HasDecimalOrExponent = false; bool HasDecimalOrExponent = false;
int declen, exp, ExpSign; int declen, exp, ExpSign;
@@ -124,6 +124,7 @@ int TPpContext::lFloatConst(char* str, int len, int ch, TPpToken* ppToken)
exp = 0; exp = 0;
str_len=len; str_len=len;
char* str = ppToken->name;
if (ch == '.') { if (ch == '.') {
HasDecimalOrExponent = true; HasDecimalOrExponent = true;
str[len++]=ch; str[len++]=ch;
@@ -220,8 +221,6 @@ int TPpContext::lFloatConst(char* str, int len, int ch, TPpToken* ppToken)
ppToken->dval = strtod(str, 0); ppToken->dval = strtod(str, 0);
} }
// Suffix:
strcpy(ppToken->name, str);
if (isDouble) if (isDouble)
return CPP_DOUBLECONSTANT; return CPP_DOUBLECONSTANT;
@@ -385,7 +384,7 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken)
} while (ch >= '0' && ch <= '9'); } while (ch >= '0' && ch <= '9');
} }
if (ch == '.' || ch == 'e' || ch == 'f' || ch == 'E' || ch == 'F' || ch == 'l' || ch == 'L') if (ch == '.' || ch == 'e' || ch == 'f' || ch == 'E' || ch == 'F' || ch == 'l' || ch == 'L')
return pp->lFloatConst(ppToken->name, len, ch, ppToken); return pp->lFloatConst(len, ch, ppToken);
// wasn't a float, so must be octal... // wasn't a float, so must be octal...
if (nonOctal) if (nonOctal)
@@ -424,7 +423,7 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken)
ch = pp->getChar(); ch = pp->getChar();
} while (ch >= '0' && ch <= '9'); } while (ch >= '0' && ch <= '9');
if (ch == '.' || ch == 'e' || ch == 'f' || ch == 'E' || ch == 'F' || ch == 'l' || ch == 'L') { if (ch == '.' || ch == 'e' || ch == 'f' || ch == 'E' || ch == 'F' || ch == 'l' || ch == 'L') {
return pp->lFloatConst(ppToken->name, len, ch, ppToken); return pp->lFloatConst(len, ch, ppToken);
} else { } else {
// Finish handling signed and unsigned integers // Finish handling signed and unsigned integers
int numericLen = len; int numericLen = len;
@@ -600,7 +599,7 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken)
ch = pp->getChar(); ch = pp->getChar();
if (ch >= '0' && ch <= '9') { if (ch >= '0' && ch <= '9') {
pp->ungetChar(); pp->ungetChar();
return pp->lFloatConst(ppToken->name, 0, '.', ppToken); return pp->lFloatConst(0, '.', ppToken);
} else { } else {
pp->ungetChar(); pp->ungetChar();
return '.'; return '.';