diff options
author | Zeev Suraski <zeev@php.net> | 1999-05-21 20:20:32 +0000 |
---|---|---|
committer | Zeev Suraski <zeev@php.net> | 1999-05-21 20:20:32 +0000 |
commit | 9dc0842e58b6b7b3a09d5e4fa601ae6edfdea3e0 (patch) | |
tree | 5cb19198af77a7631d765e9d5afbb6f1c0bd82c8 | |
parent | 00cb03bd49f6d5b4428d090bf76b33c144e32902 (diff) | |
download | php-git-9dc0842e58b6b7b3a09d5e4fa601ae6edfdea3e0.tar.gz |
* Properly handle failed file opens in C++
* Properly handle failed require()'s within libzend
-rw-r--r-- | Zend/zend-scanner.l | 16 |
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(); } |