summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZeev Suraski <zeev@php.net>1999-05-21 20:20:32 +0000
committerZeev Suraski <zeev@php.net>1999-05-21 20:20:32 +0000
commit9dc0842e58b6b7b3a09d5e4fa601ae6edfdea3e0 (patch)
tree5cb19198af77a7631d765e9d5afbb6f1c0bd82c8
parent00cb03bd49f6d5b4428d090bf76b33c144e32902 (diff)
downloadphp-git-9dc0842e58b6b7b3a09d5e4fa601ae6edfdea3e0.tar.gz
* Properly handle failed file opens in C++
* Properly handle failed require()'s within libzend
-rw-r--r--Zend/zend-scanner.l16
1 files changed, 13 insertions, 3 deletions
diff --git a/Zend/zend-scanner.l b/Zend/zend-scanner.l
index 37d10d05f9..703efe8a85 100644
--- a/Zend/zend-scanner.l
+++ b/Zend/zend-scanner.l
@@ -214,17 +214,21 @@ ZEND_API inline int open_file_for_scanning(zend_file_handle *file_handle CLS_DC)
file_handle->handle.is = new ifstream(file_handle->handle.fd);
break;
case ZEND_HANDLE_FILENAME:
- file_handle->handle.is = new ifstream(file_handle->filename);
+ file_handle->handle.is = new ifstream(file_handle->filename, ios::nocreate|ios::in|ios::binary);
break;
case ZEND_HANDLE_FP:
if (file_handle->handle.fp==stdin) {
file_handle->handle.is = (ifstream *) &cin;
} else {
fclose(file_handle->handle.fp);
- file_handle->handle.is = new ifstream(file_handle->filename);
+ file_handle->handle.is = new ifstream(file_handle->filename, ios::nocreate|ios::in|ios::binary);
}
break;
}
+ if (file_handle->handle.is->fail()) {
+ delete file_handle->handle.is;
+ return FAILURE;
+ }
file_handle->type = ZEND_HANDLE_ISTREAM;
CG(ZFL) = new ZendFlexLexer;
@@ -398,7 +402,11 @@ int require_filename(char *filename CLS_DC)
file_handle.type = ZEND_HANDLE_FILENAME;
file_handle.filename = filename;
- return require_file(&file_handle CLS_CC);
+ if (require_file(&file_handle CLS_CC)==FAILURE) {
+ zend_bailout();
+ return FAILURE; /* will never get here */
+ }
+ return SUCCESS;
}
@@ -1050,6 +1058,7 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+
zendlval->value.str.val = yytext; /* no copying - intentional */
zendlval->value.str.len = yyleng;
zendlval->type = IS_STRING;
+ printf("Matched whitespace: '%s'\n", yytext);
HANDLE_NEWLINES(yytext,yyleng);
return T_WHITESPACE;
}
@@ -1067,6 +1076,7 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+
<ST_COMMENT>[^*]+ {
+ HANDLE_NEWLINES(yytext, yyleng);
yymore();
}