Commit 2e03209d authored by albert-github's avatar albert-github

Bug 707685 - Fortran: error message when missing last EOL

In case the original buffer in either fixed or free format code does not contain an EOL as last character, add it.
parent 48676b42
...@@ -1366,7 +1366,7 @@ static const char* prepassFixedForm(const char* contents) ...@@ -1366,7 +1366,7 @@ static const char* prepassFixedForm(const char* contents)
int prevLineLength=0; int prevLineLength=0;
int prevLineAmpOrExclIndex=-1; int prevLineAmpOrExclIndex=-1;
bool emptyLabel=TRUE; bool emptyLabel=TRUE;
int newContentsSize = strlen(contents)+2; // \000 and one spare character (to avoid reallocation) int newContentsSize = strlen(contents)+3; // \000, \n (when necessary) and one spare character (to avoid reallocation)
char* newContents = (char*)malloc(newContentsSize); char* newContents = (char*)malloc(newContentsSize);
for(int i=0, j=0;;i++,j++) { for(int i=0, j=0;;i++,j++) {
...@@ -1390,6 +1390,14 @@ static const char* prepassFixedForm(const char* contents) ...@@ -1390,6 +1390,14 @@ static const char* prepassFixedForm(const char* contents)
break; break;
case '\000': case '\000':
newContents[j]='\000'; newContents[j]='\000';
newContentsSize = strlen(newContents);
if (newContents[newContentsSize - 1] != '\n')
{
// to be on the safe side
newContents = (char*)realloc(newContents, newContentsSize+2);
newContents[newContentsSize] = '\n';
newContents[newContentsSize + 1] = '\000';
}
return newContents; return newContents;
case 'C': case 'C':
case 'c': case 'c':
...@@ -1425,6 +1433,15 @@ static const char* prepassFixedForm(const char* contents) ...@@ -1425,6 +1433,15 @@ static const char* prepassFixedForm(const char* contents)
break; break;
} }
} }
newContentsSize = strlen(newContents);
if (newContents[newContentsSize - 1] != '\n')
{
// to be on the safe side
newContents = (char*)realloc(newContents, newContentsSize+2);
newContents[newContentsSize] = '\n';
newContents[newContentsSize + 1] = '\000';
}
return newContents; return newContents;
} }
...@@ -2228,6 +2245,7 @@ level--; ...@@ -2228,6 +2245,7 @@ level--;
static void parseMain(const char *fileName,const char *fileBuf,Entry *rt) static void parseMain(const char *fileName,const char *fileBuf,Entry *rt)
{ {
char *tmpBuf = NULL;
initParser(); initParser();
defaultProtection = Public; defaultProtection = Public;
...@@ -2258,6 +2276,14 @@ static void parseMain(const char *fileName,const char *fileBuf,Entry *rt) ...@@ -2258,6 +2276,14 @@ static void parseMain(const char *fileName,const char *fileBuf,Entry *rt)
//clock_t end=clock(); //clock_t end=clock();
//printf("CPU time used=%f\n", ((double) (end-start))/CLOCKS_PER_SEC); //printf("CPU time used=%f\n", ((double) (end-start))/CLOCKS_PER_SEC);
} }
else if (inputString[strlen(fileBuf)-1] != '\n')
{
tmpBuf = (char *)malloc(strlen(fileBuf)+2);
strcpy(tmpBuf,fileBuf);
tmpBuf[strlen(fileBuf)]= '\n';
tmpBuf[strlen(fileBuf)+1]= '\000';
inputString = tmpBuf;
}
yyLineNr= 1 ; yyLineNr= 1 ;
yyFileName = fileName; yyFileName = fileName;
...@@ -2291,6 +2317,10 @@ static void parseMain(const char *fileName,const char *fileBuf,Entry *rt) ...@@ -2291,6 +2317,10 @@ static void parseMain(const char *fileName,const char *fileBuf,Entry *rt)
rt->program.resize(0); rt->program.resize(0);
delete current; current=0; delete current; current=0;
moduleProcedures.clear(); moduleProcedures.clear();
if (tmpBuf) {
free((char*)tmpBuf);
inputString=NULL;
}
if (isFixedForm) { if (isFixedForm) {
free((char*)inputString); free((char*)inputString);
inputString=NULL; inputString=NULL;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment