From: Zeev Suraski Date: Fri, 21 May 1999 20:20:32 +0000 (+0000) Subject: * Properly handle failed file opens in C++ X-Git-Tag: BEFORE_PHP4_APACHE_MODULE_CHANGE~6 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9dc0842e58b6b7b3a09d5e4fa601ae6edfdea3e0;p=php * Properly handle failed file opens in C++ * Properly handle failed require()'s within libzend --- 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 #'.:;,()|^&+-/*=%!~<>?@]+ [^*]+ { + HANDLE_NEWLINES(yytext, yyleng); yymore(); }