From 89a657f80a9dea16bf54c87abdf62ee1d22590dc Mon Sep 17 00:00:00 2001 From: Jefersson Nathan Date: Tue, 23 Apr 2013 08:24:15 -0300 Subject: [PATCH 01/77] Fixed identation on file --- netware/start.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/netware/start.c b/netware/start.c index 2765ffba12f..8651a6ccca5 100644 --- a/netware/start.c +++ b/netware/start.c @@ -24,7 +24,7 @@ void *gLibHandle = (void *) NULL; rtag_t gAllocTag = (rtag_t) NULL; NXMutex_t *gLibLock = (NXMutex_t *) NULL; -int gLibId = 0; +int gLibId = 0; int DisposeLibraryData( void *data) @@ -35,17 +35,17 @@ int DisposeLibraryData( void *data) int _NonAppStart ( - void *NLMHandle, - void *errorScreen, + void *NLMHandle, + void *errorScreen, const char *cmdLine, const char *loadDirPath, size_t uninitializedDataLength, - void *NLMFileHandle, - int (*readRoutineP)( int conn, void *fileHandle, size_t offset, - size_t nbytes, size_t *bytesRead, void *buffer ), + void *NLMFileHandle, + int (*readRoutineP)( int conn, void *fileHandle, size_t offset, + size_t nbytes, size_t *bytesRead, void *buffer ), size_t customDataOffset, size_t customDataSize, - int messageCount, + int messageCount, const char **messages ) { From bce1151df9a4db97650485ad864529c7c2ff8b88 Mon Sep 17 00:00:00 2001 From: Boro Sitnikovski Date: Fri, 20 Sep 2013 02:58:11 +0200 Subject: [PATCH 02/77] Bug 64744 Show the type of the non-object for more descriptive errors --- Zend/tests/dereference_002.phpt | 2 +- Zend/zend_vm_def.h | 2 +- Zend/zend_vm_execute.h | 32 +++++++++---------- ext/mysqli/tests/bug33491.phpt | 2 +- .../pdo_mysql_prepare_native_clear_error.phpt | 2 +- .../pdo_mysql_prepare_native_mixed_style.phpt | 2 +- .../tests/pdo_mysql_stmt_errorcode.phpt | 2 +- .../tests/pdo_mysql_stmt_multiquery.phpt | 2 +- 8 files changed, 23 insertions(+), 23 deletions(-) diff --git a/Zend/tests/dereference_002.phpt b/Zend/tests/dereference_002.phpt index 022ff370d22..da13decc396 100644 --- a/Zend/tests/dereference_002.phpt +++ b/Zend/tests/dereference_002.phpt @@ -76,4 +76,4 @@ NULL Notice: Undefined offset: 3 in %s on line %d -Fatal error: Call to a member function bar() on a non-object in %s on line %d +Fatal error: Call to a member function bar() on null in %s on line %d diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 4621b47e0e6..fb4639a4f0d 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -2476,7 +2476,7 @@ ZEND_VM_HANDLER(112, ZEND_INIT_METHOD_CALL, TMP|VAR|UNUSED|CV, CONST|TMP|VAR|CV) FREE_OP2(); HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 677cabe2a94..ded6a987f8a 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -9010,7 +9010,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMP_CONST_HANDLER(ZEND_OPCO HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -9863,7 +9863,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE zval_dtor(free_op2.var); HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -10717,7 +10717,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE zval_ptr_dtor(&free_op2.var); HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -12147,7 +12147,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_ HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -15377,7 +15377,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCO HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -17717,7 +17717,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE zval_dtor(free_op2.var); HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -20016,7 +20016,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE zval_ptr_dtor(&free_op2.var); HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -23457,7 +23457,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_ HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -25083,7 +25083,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_O HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -26494,7 +26494,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMP_HANDLER(ZEND_OPC zval_dtor(free_op2.var); HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -27809,7 +27809,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_VAR_HANDLER(ZEND_OPC zval_ptr_dtor(&free_op2.var); HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -29547,7 +29547,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCO HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -32791,7 +32791,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER(ZEND_OPCOD HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -34897,7 +34897,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_ zval_dtor(free_op2.var); HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -37058,7 +37058,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_ zval_ptr_dtor(&free_op2.var); HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -40214,7 +40214,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_H HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { diff --git a/ext/mysqli/tests/bug33491.phpt b/ext/mysqli/tests/bug33491.phpt index 168ecb03810..7e994bc4d0b 100644 --- a/ext/mysqli/tests/bug33491.phpt +++ b/ext/mysqli/tests/bug33491.phpt @@ -26,4 +26,4 @@ $DB->query_single('SELECT DATE()'); ?> --EXPECTF-- -Fatal error: Call to a member function fetch_row() on a non-object in %sbug33491.php on line %d +Fatal error: Call to a member function fetch_row() on boolean in %sbug33491.php on line %d diff --git a/ext/pdo_mysql/tests/pdo_mysql_prepare_native_clear_error.phpt b/ext/pdo_mysql/tests/pdo_mysql_prepare_native_clear_error.phpt index 42c3d074ad3..224684b8782 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_prepare_native_clear_error.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_prepare_native_clear_error.phpt @@ -93,4 +93,4 @@ array(1) { Warning: PDO::prepare(): SQLSTATE[42S22]: Column not found: 1054 Unknown column 'unknown_column' in 'field list' in %s on line %d -Fatal error: Call to a member function execute() on a non-object in %s on line %d \ No newline at end of file +Fatal error: Call to a member function execute() on boolean in %s on line %d diff --git a/ext/pdo_mysql/tests/pdo_mysql_prepare_native_mixed_style.phpt b/ext/pdo_mysql/tests/pdo_mysql_prepare_native_mixed_style.phpt index 90cedef5617..b7b0ab6294c 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_prepare_native_mixed_style.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_prepare_native_mixed_style.phpt @@ -36,4 +36,4 @@ Warning: PDO::prepare(): SQLSTATE[HY093]: Invalid parameter number: mixed named Warning: PDO::prepare(): SQLSTATE[HY093]: Invalid parameter number in %s on line %d -Fatal error: Call to a member function execute() on a non-object in %s on line %d \ No newline at end of file +Fatal error: Call to a member function execute() on boolean in %s on line %d diff --git a/ext/pdo_mysql/tests/pdo_mysql_stmt_errorcode.phpt b/ext/pdo_mysql/tests/pdo_mysql_stmt_errorcode.phpt index 4d59e8c3b10..c16ce5dd1cb 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_stmt_errorcode.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_stmt_errorcode.phpt @@ -56,4 +56,4 @@ Testing native PS... Warning: PDO::prepare(): SQLSTATE[42S02]: Base table or view not found: 1146 Table '%s.ihopeitdoesnotexist' doesn't exist in %s on line %d -Fatal error: Call to a member function execute() on a non-object in %s on line %d \ No newline at end of file +Fatal error: Call to a member function execute() on boolean in %s on line %d diff --git a/ext/pdo_mysql/tests/pdo_mysql_stmt_multiquery.phpt b/ext/pdo_mysql/tests/pdo_mysql_stmt_multiquery.phpt index 91b5237ea8d..56c37c5f1a9 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_stmt_multiquery.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_stmt_multiquery.phpt @@ -99,4 +99,4 @@ Native Prepared Statements... Warning: PDO::query(): SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%SSELECT label FROM test ORDER BY id ASC LIMIT 1' at line %d in %s on line %d -Fatal error: Call to a member function errorInfo() on a non-object in %s on line %d +Fatal error: Call to a member function errorInfo() on boolean in %s on line %d From 21642861b24f6cc331cd7f57051e925cb539e8a3 Mon Sep 17 00:00:00 2001 From: Sobak Date: Sat, 10 May 2014 13:16:48 +0200 Subject: [PATCH 03/77] Removed cvsclean and svnclean tools --- build/build.mk | 14 +---- svnclean.bat | 2 - vcsclean | 6 +- win32/build/cvsclean.js | 120 ---------------------------------------- win32/build/svnclean.js | 120 ---------------------------------------- 5 files changed, 2 insertions(+), 260 deletions(-) delete mode 100755 svnclean.bat delete mode 100644 win32/build/cvsclean.js delete mode 100644 win32/build/svnclean.js diff --git a/build/build.mk b/build/build.mk index ac5dadb313b..2c189159a26 100644 --- a/build/build.mk +++ b/build/build.mk @@ -1,7 +1,7 @@ # +----------------------------------------------------------------------+ # | PHP Version 5 | # +----------------------------------------------------------------------+ -# | Copyright (c) 1997-2006 The PHP Group | +# | Copyright (c) 1997-2014 The PHP Group | # +----------------------------------------------------------------------+ # | This source file is subject to version 3.01 of the PHP license, | # | that is bundled with this package in the file LICENSE, and is | @@ -14,8 +14,6 @@ # | Author: Sascha Schumann | # +----------------------------------------------------------------------+ # -# $Id$ -# # # Makefile to generate build tools # @@ -61,16 +59,6 @@ snapshot: md5sum $$distname.tar.bz2; \ bzip2 -t $$distname.tar.bz2 -cvsclean-work: - @for i in `find . -name .cvsignore`; do \ - (cd `dirname $$i` 2>/dev/null && rm -rf `cat .cvsignore | grep -v config.nice | sed 's/[[:space:]]/ /g'` *.o *.a *.lo *.la *.gcno *.gcda .libs || true); \ - done - -svnclean-work: - @for i in `find . -type d ! -path '*/.svn/*' | grep -v '.svn'`; do \ - (cd $$i 2>/dev/null && rm -rf `svn propget svn:ignore . | grep -v config.nice` *.o *.a *.lo *.la *.gcno *.gcda .libs || true); \ - done - gitclean-work: @if (test ! -f '.git/info/exclude' || grep -s "git-ls-files" .git/info/exclude); then \ (echo "Rebuild .git/info/exclude" && echo '*.o' > .git/info/exclude && git svn propget svn:ignore | grep -v config.nice >> .git/info/exclude); \ diff --git a/svnclean.bat b/svnclean.bat deleted file mode 100755 index 4c0118d6719..00000000000 --- a/svnclean.bat +++ /dev/null @@ -1,2 +0,0 @@ -@echo off -cscript /nologo win32\build\cvsclean.js diff --git a/vcsclean b/vcsclean index e1004e4349e..b5d201b69f4 100755 --- a/vcsclean +++ b/vcsclean @@ -1,10 +1,6 @@ #! /bin/sh -if test -d 'CVS'; then - ${MAKE:-make} -f build/build.mk cvsclean-work -elif test -d '.svn'; then - ${MAKE:-make} -f build/build.mk svnclean-work -elif test -d '.git'; then +if test -d '.git'; then ${MAKE:-make} -f build/build.mk gitclean-work else echo "Can't figure out your VCS, not cleaning." diff --git a/win32/build/cvsclean.js b/win32/build/cvsclean.js deleted file mode 100644 index c5f92a38833..00000000000 --- a/win32/build/cvsclean.js +++ /dev/null @@ -1,120 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2009 The PHP Group | - +----------------------------------------------------------------------+ - | This source file is subject to version 3.01 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Wez Furlong | - | Pierre A. Joye | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ -// Cleans up files that do not belong in the repository - -var FSO = WScript.CreateObject("Scripting.FileSystemObject"); -var WshShell = WScript.CreateObject("WScript.Shell"); -var STDOUT = WScript.StdOut; - -/* svn propget svn:ignore dirname */ -function find_ignore(dirname) -{ - dirname = "" + dirname; - dirname_len = dirname.length; - - if (!FSO.FolderExists(dirname) || (dirname_len >= 4 && - dirname.substring(dirname_len - 4) == ".svn")) { - return; - } - - var f = FSO.GetFolder(dirname); - var fc = new Enumerator(f.SubFolders); - - for (; !fc.atEnd(); fc.moveNext()) { - find_ignore(fc.item()); - } - - kill_from_ignore(dirname); -} - -/* recursive remove using ignore props style wildcard matching; - * note that FSO.DeleteFolder and FSO.DeleteFile methods both - * accept wildcards, but that they are dangerous to use eg: - * "*.php" will match "*.phpt" */ -function rm_r(filename) -{ - if (FSO.FolderExists(filename)) { - var fc = new Enumerator(FSO.GetFolder(filename).SubFolders); - - for (; !fc.atEnd(); fc.moveNext()) { - rm_r(fc.item()); - } - - fc = new Enumerator(FSO.GetFolder(filename).Files); - - for (; !fc.atEnd(); fc.moveNext()) { - FSO.DeleteFile(fc.item(), true); - } - - FSO.DeleteFolder(filename, true); - } else if (FSO.FileExists(filename)) { - FSO.DeleteFile(filename, true); - } else { - /* we need to handle wildcards here */ - var foldername = FSO.GetParentFolderName(filename); - - if (foldername == "") - foldername = "."; - - var filename = FSO.GetFileName(filename); - - var retext = filename.replace(/\./g, '\\.'); - retext = '^' + retext.replace(/\*/g, '.*') + "$"; - var re = new RegExp(retext); - - var folder = FSO.GetFolder(foldername); - var fc = new Enumerator(folder.SubFolders); - for (; !fc.atEnd(); fc.moveNext()) { - - var item = FSO.GetFileName(fc.item()); - - if (item.match(re)) { - rm_r(fc.item()); - } - } - var fc = new Enumerator(folder.Files); - for (; !fc.atEnd(); fc.moveNext()) { - item = FSO.GetFileName(fc.item()); - - if (item.match(re)) { - FSO.DeleteFile(fc.item(), true); - } - } - } -} - -function kill_from_ignore(dirname) -{ - var l; - var e = WshShell.Exec("svn propget svn:ignore " + dirname); - var re = /^(config\.nice.*)|(\*)$/i; - - while (!e.StdOut.atEndOfStream) { - l = e.StdOut.ReadLine(); - if (l.length == 0 || re.test(l)) { - continue; - } - rm_r(dirname + l); - } - -} - -find_ignore("."); diff --git a/win32/build/svnclean.js b/win32/build/svnclean.js deleted file mode 100644 index c5f92a38833..00000000000 --- a/win32/build/svnclean.js +++ /dev/null @@ -1,120 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2009 The PHP Group | - +----------------------------------------------------------------------+ - | This source file is subject to version 3.01 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Wez Furlong | - | Pierre A. Joye | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ -// Cleans up files that do not belong in the repository - -var FSO = WScript.CreateObject("Scripting.FileSystemObject"); -var WshShell = WScript.CreateObject("WScript.Shell"); -var STDOUT = WScript.StdOut; - -/* svn propget svn:ignore dirname */ -function find_ignore(dirname) -{ - dirname = "" + dirname; - dirname_len = dirname.length; - - if (!FSO.FolderExists(dirname) || (dirname_len >= 4 && - dirname.substring(dirname_len - 4) == ".svn")) { - return; - } - - var f = FSO.GetFolder(dirname); - var fc = new Enumerator(f.SubFolders); - - for (; !fc.atEnd(); fc.moveNext()) { - find_ignore(fc.item()); - } - - kill_from_ignore(dirname); -} - -/* recursive remove using ignore props style wildcard matching; - * note that FSO.DeleteFolder and FSO.DeleteFile methods both - * accept wildcards, but that they are dangerous to use eg: - * "*.php" will match "*.phpt" */ -function rm_r(filename) -{ - if (FSO.FolderExists(filename)) { - var fc = new Enumerator(FSO.GetFolder(filename).SubFolders); - - for (; !fc.atEnd(); fc.moveNext()) { - rm_r(fc.item()); - } - - fc = new Enumerator(FSO.GetFolder(filename).Files); - - for (; !fc.atEnd(); fc.moveNext()) { - FSO.DeleteFile(fc.item(), true); - } - - FSO.DeleteFolder(filename, true); - } else if (FSO.FileExists(filename)) { - FSO.DeleteFile(filename, true); - } else { - /* we need to handle wildcards here */ - var foldername = FSO.GetParentFolderName(filename); - - if (foldername == "") - foldername = "."; - - var filename = FSO.GetFileName(filename); - - var retext = filename.replace(/\./g, '\\.'); - retext = '^' + retext.replace(/\*/g, '.*') + "$"; - var re = new RegExp(retext); - - var folder = FSO.GetFolder(foldername); - var fc = new Enumerator(folder.SubFolders); - for (; !fc.atEnd(); fc.moveNext()) { - - var item = FSO.GetFileName(fc.item()); - - if (item.match(re)) { - rm_r(fc.item()); - } - } - var fc = new Enumerator(folder.Files); - for (; !fc.atEnd(); fc.moveNext()) { - item = FSO.GetFileName(fc.item()); - - if (item.match(re)) { - FSO.DeleteFile(fc.item(), true); - } - } - } -} - -function kill_from_ignore(dirname) -{ - var l; - var e = WshShell.Exec("svn propget svn:ignore " + dirname); - var re = /^(config\.nice.*)|(\*)$/i; - - while (!e.StdOut.atEndOfStream) { - l = e.StdOut.ReadLine(); - if (l.length == 0 || re.test(l)) { - continue; - } - rm_r(dirname + l); - } - -} - -find_ignore("."); From 9db82df0764669c2a93fcf594e93bedcf7fbf3e9 Mon Sep 17 00:00:00 2001 From: Sobak Date: Sat, 10 May 2014 13:30:54 +0200 Subject: [PATCH 04/77] Removed another cvsclean file --- ext/mbstring/libmbfl/cvsclean | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100755 ext/mbstring/libmbfl/cvsclean diff --git a/ext/mbstring/libmbfl/cvsclean b/ext/mbstring/libmbfl/cvsclean deleted file mode 100755 index 60ae246a50e..00000000000 --- a/ext/mbstring/libmbfl/cvsclean +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh -function cvsclean_sub() { - prev_pwd=`pwd` - cd $1 - cat .cvsignore | while read fname; do - rm -r -f $fname - done - cd "$prev_pwd" -} - -cvsclean_sub . -cvsclean_sub mbfl -cvsclean_sub filters -cvsclean_sub nls From dd2005535c9cb3a26c0607a46496226597ba06a5 Mon Sep 17 00:00:00 2001 From: Jefersson Nathan Date: Mon, 12 May 2014 13:37:47 -0300 Subject: [PATCH 05/77] Fix align indentation --- Zend/zend_builtin_functions.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c index d61aba14bdd..09cb8ee03a2 100644 --- a/Zend/zend_builtin_functions.c +++ b/Zend/zend_builtin_functions.c @@ -245,16 +245,16 @@ static const zend_function_entry builtin_functions[] = { /* {{{ */ ZEND_FE(func_num_args, arginfo_zend__void) ZEND_FE(func_get_arg, arginfo_func_get_arg) ZEND_FE(func_get_args, arginfo_zend__void) - ZEND_FE(strlen, arginfo_strlen) - ZEND_FE(strcmp, arginfo_strcmp) - ZEND_FE(strncmp, arginfo_strncmp) - ZEND_FE(strcasecmp, arginfo_strcmp) + ZEND_FE(strlen, arginfo_strlen) + ZEND_FE(strcmp, arginfo_strcmp) + ZEND_FE(strncmp, arginfo_strncmp) + ZEND_FE(strcasecmp, arginfo_strcmp) ZEND_FE(strncasecmp, arginfo_strncmp) - ZEND_FE(each, arginfo_each) + ZEND_FE(each, arginfo_each) ZEND_FE(error_reporting, arginfo_error_reporting) - ZEND_FE(define, arginfo_define) - ZEND_FE(defined, arginfo_defined) - ZEND_FE(get_class, arginfo_get_class) + ZEND_FE(define, arginfo_define) + ZEND_FE(defined, arginfo_defined) + ZEND_FE(get_class, arginfo_get_class) ZEND_FE(get_called_class, arginfo_zend__void) ZEND_FE(get_parent_class, arginfo_get_class) ZEND_FE(method_exists, arginfo_method_exists) @@ -274,13 +274,13 @@ static const zend_function_entry builtin_functions[] = { /* {{{ */ ZEND_FE(get_included_files, arginfo_zend__void) ZEND_FALIAS(get_required_files, get_included_files, arginfo_zend__void) ZEND_FE(is_subclass_of, arginfo_is_subclass_of) - ZEND_FE(is_a, arginfo_is_subclass_of) + ZEND_FE(is_a, arginfo_is_subclass_of) ZEND_FE(get_class_vars, arginfo_get_class_vars) ZEND_FE(get_object_vars, arginfo_get_object_vars) ZEND_FE(get_class_methods, arginfo_get_class_methods) ZEND_FE(trigger_error, arginfo_trigger_error) ZEND_FALIAS(user_error, trigger_error, arginfo_trigger_error) - ZEND_FE(set_error_handler, arginfo_set_error_handler) + ZEND_FE(set_error_handler, arginfo_set_error_handler) ZEND_FE(restore_error_handler, arginfo_zend__void) ZEND_FE(set_exception_handler, arginfo_set_exception_handler) ZEND_FE(restore_exception_handler, arginfo_zend__void) @@ -288,14 +288,14 @@ static const zend_function_entry builtin_functions[] = { /* {{{ */ ZEND_FE(get_declared_traits, arginfo_zend__void) ZEND_FE(get_declared_interfaces, arginfo_zend__void) ZEND_FE(get_defined_functions, arginfo_zend__void) - ZEND_FE(get_defined_vars, arginfo_zend__void) - ZEND_FE(create_function, arginfo_create_function) - ZEND_FE(get_resource_type, arginfo_get_resource_type) + ZEND_FE(get_defined_vars, arginfo_zend__void) + ZEND_FE(create_function, arginfo_create_function) + ZEND_FE(get_resource_type, arginfo_get_resource_type) ZEND_FE(get_loaded_extensions, arginfo_get_loaded_extensions) - ZEND_FE(extension_loaded, arginfo_extension_loaded) + ZEND_FE(extension_loaded, arginfo_extension_loaded) ZEND_FE(get_extension_funcs, arginfo_extension_loaded) ZEND_FE(get_defined_constants, arginfo_get_defined_constants) - ZEND_FE(debug_backtrace, arginfo_debug_backtrace) + ZEND_FE(debug_backtrace, arginfo_debug_backtrace) ZEND_FE(debug_print_backtrace, arginfo_debug_print_backtrace) #if ZEND_DEBUG ZEND_FE(zend_test_func, NULL) @@ -305,7 +305,7 @@ static const zend_function_entry builtin_functions[] = { /* {{{ */ #endif ZEND_FE(gc_collect_cycles, arginfo_zend__void) ZEND_FE(gc_enabled, arginfo_zend__void) - ZEND_FE(gc_enable, arginfo_zend__void) + ZEND_FE(gc_enable, arginfo_zend__void) ZEND_FE(gc_disable, arginfo_zend__void) ZEND_FE_END }; From f1480260178376d3128e7dd49db70ecf843be27d Mon Sep 17 00:00:00 2001 From: Paul Oehler Date: Tue, 13 May 2014 13:38:25 -0400 Subject: [PATCH 06/77] Added support for parsing ssl certificates using GeneralizedTime format. fix bug #65698 fix bug #66636 --- ext/openssl/openssl.c | 19 +++++++++++++------ ext/openssl/tests/bug65698.crt | 28 ++++++++++++++++++++++++++++ ext/openssl/tests/bug65698.phpt | 19 +++++++++++++++++++ ext/openssl/tests/cve-2013-6420.phpt | 2 +- 4 files changed, 61 insertions(+), 7 deletions(-) create mode 100644 ext/openssl/tests/bug65698.crt create mode 100644 ext/openssl/tests/bug65698.phpt diff --git a/ext/openssl/openssl.c b/ext/openssl/openssl.c index 4f8f4b73340..94d64744df6 100755 --- a/ext/openssl/openssl.c +++ b/ext/openssl/openssl.c @@ -708,7 +708,7 @@ static time_t asn1_time_to_time_t(ASN1_UTCTIME * timestr TSRMLS_DC) /* {{{ */ char * thestr; long gmadjust = 0; - if (ASN1_STRING_type(timestr) != V_ASN1_UTCTIME) { + if (ASN1_STRING_type(timestr) != V_ASN1_UTCTIME && ASN1_STRING_type(timestr) != V_ASN1_GENERALIZEDTIME) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "illegal ASN1 data type for timestamp"); return (time_t)-1; } @@ -744,14 +744,21 @@ static time_t asn1_time_to_time_t(ASN1_UTCTIME * timestr TSRMLS_DC) /* {{{ */ *thestr = '\0'; thestr -= 2; thetime.tm_mon = atoi(thestr)-1; - *thestr = '\0'; - thestr -= 2; - thetime.tm_year = atoi(thestr); - if (thetime.tm_year < 68) { - thetime.tm_year += 100; + *thestr = '\0'; + if( ASN1_STRING_type(timestr) == V_ASN1_UTCTIME ) { + thestr -= 2; + thetime.tm_year = atoi(thestr); + + if (thetime.tm_year < 68) { + thetime.tm_year += 100; + } + } else if( ASN1_STRING_type(timestr) == V_ASN1_GENERALIZEDTIME ) { + thestr -= 4; + thetime.tm_year = atoi(thestr) - 1900; } + thetime.tm_isdst = -1; ret = mktime(&thetime); diff --git a/ext/openssl/tests/bug65698.crt b/ext/openssl/tests/bug65698.crt new file mode 100644 index 00000000000..c4a02611387 --- /dev/null +++ b/ext/openssl/tests/bug65698.crt @@ -0,0 +1,28 @@ +-----BEGIN CERTIFICATE----- +MIIEsTCCA5mgAwIBAgIQdwrGwrpRpBwdXS+ZsmsMGjANBgkqhkiG9w0BAQUFADA+ +MQswCQYDVQQGEwJQTDEbMBkGA1UEChMSVW5pemV0byBTcC4geiBvLm8uMRIwEAYD +VQQDEwlDZXJ0dW0gQ0EwIhgPMjAwOTAzMDMxMjUzMThaGA8yMDI0MDMwMzEyNTMx +OFowdzELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVz +IFMuQS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEb +MBkGA1UEAxMSQ2VydHVtIExldmVsIElJIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEA4LE0Ixw8h5Lper9tHVtZkWIujxYsPVgUZABeZZgQsKTdJjaG +VP64B/oiEV5Hd3AxRqaZ7dRRsf4Pg/PSS/2mHRQQ/SH3XACbrDHmucDvYgtU/WoZ +yp9d6PXVPY4j7J5t/52s+EbZD5swSuQLGjZ9iwg9sXX3JdJ9Ty+B3z80oiajpK0B +wqAxrcX3DekEOknj7LkAOK6iuQKI85REj4IVb9kD7KKIWdISGbfL4Ezh/TP51e0L +/WhTJ7lHbHbRzFfPU/oi3Qyt5tEexrPKe+6N+Jrejdb5Ya7Ne3tKujDU7KlbO+dn +pzFH7VHkBPJcQJ7QUrprPaqVsVg3JJ1PXTqVnwIDAQABo4IBbDCCAWgwDwYDVR0T +AQH/BAUwAwEB/zAdBgNVHQ4EFgQUgGIR3sBrpxDhCPBVtDCDv/qPCGAwUgYDVR0j +BEswSaFCpEAwPjELMAkGA1UEBhMCUEwxGzAZBgNVBAoTElVuaXpldG8gU3AuIHog +by5vLjESMBAGA1UEAxMJQ2VydHVtIENBggMBACAwDgYDVR0PAQH/BAQDAgEGMCwG +A1UdHwQlMCMwIaAfoB2GG2h0dHA6Ly9jcmwuY2VydHVtLnBsL2NhLmNybDBoBggr +BgEFBQcBAQRcMFowKAYIKwYBBQUHMAGGHGh0dHA6Ly9zdWJjYS5vY3NwLWNlcnR1 +bS5jb20wLgYIKwYBBQUHMAKGImh0dHA6Ly9yZXBvc2l0b3J5LmNlcnR1bS5wbC9j +YS5jZXIwOgYDVR0gBDMwMTAvBgRVHSAAMCcwJQYIKwYBBQUHAgEWGWh0dHBzOi8v +d3d3LmNlcnR1bS5wbC9DUFMwDQYJKoZIhvcNAQEFBQADggEBAI/jSDAW/w9qLzF6 +4oQiIRB7dGKp2Nlj27xZFYDBRINn4DKyZExkpanASF2of9eEzvrS+qoDY29mhXCi +MkiGr0vCsVhn0ReUpjg4Z5SsiQhZ2BGSjXiOJgaDI7Dw1MH7Ru6jdfSbLyd97EFj +ER0ERGdrcA2kLw7KfQm78IkClXEEKjKnAUTn1d/5Y4UuBWDCEL0FLgO9AqNXEzIy +rlXVGIs73kdefAK+Z1T6dm83vUrDMyzemWNRBI2tVBujkN6zkaF6uPjE4hfoIkEQ +Z4317byFkG4mxjATU+tQLG1Bs88HUAOrxtJOo/WoeCNsFJaxbYPt4oQGxIVYdz29 +OUX9CQA= +-----END CERTIFICATE----- diff --git a/ext/openssl/tests/bug65698.phpt b/ext/openssl/tests/bug65698.phpt new file mode 100644 index 00000000000..35d31764d5d --- /dev/null +++ b/ext/openssl/tests/bug65698.phpt @@ -0,0 +1,19 @@ +--TEST-- +Bug #65689 (GeneralizedTime format parsing) +--SKIPIF-- + +--FILE-- + +Done +--EXPECTF-- +string(15) "20090303125318Z" +int(1236084798) +string(15) "20240303125318Z" +int(1709470398) +Done diff --git a/ext/openssl/tests/cve-2013-6420.phpt b/ext/openssl/tests/cve-2013-6420.phpt index 87c0210b2ef..ccead0aab67 100644 --- a/ext/openssl/tests/cve-2013-6420.phpt +++ b/ext/openssl/tests/cve-2013-6420.phpt @@ -12,7 +12,7 @@ var_dump($info['issuer']['emailAddress'], $info["validFrom_time_t"]); ?> Done --EXPECTF-- -%s openssl_x509_parse(): illegal ASN1 data type for timestamp in %s%ecve-2013-6420.php on line 3 +%s openssl_x509_parse(): illegal length in timestamp in %s%ecve-2013-6420.php on line 3 string(27) "stefan.esser@sektioneins.de" int(-1) Done From ec7eccaaaedc13bf9bbc635fc4dd1968e62e5637 Mon Sep 17 00:00:00 2001 From: zborboa-google Date: Wed, 14 May 2014 13:11:51 -0700 Subject: [PATCH 07/77] Test --- ext/standard/tests/network/setcookie.phpt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ext/standard/tests/network/setcookie.phpt b/ext/standard/tests/network/setcookie.phpt index bf04ec78de1..a2a72e71778 100644 --- a/ext/standard/tests/network/setcookie.phpt +++ b/ext/standard/tests/network/setcookie.phpt @@ -35,7 +35,7 @@ $expected = array( $headers = headers_list(); if (($i = count($expected)) > count($headers)) { - echo "Less headers are being sent than expected - aborting"; + echo "Fewer headers are being sent than expected - aborting"; return; } @@ -67,4 +67,4 @@ echo ($i === 0) --EXPECTHEADERS-- --EXPECT-- -OK \ No newline at end of file +OK From 91bcadd85e20e50d3f8c2e9721327681640e6f16 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Fri, 6 Jun 2014 14:16:04 +0200 Subject: [PATCH 08/77] Fix bug #67390 insecure temporary file use in the configure script --- acinclude.m4 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/acinclude.m4 b/acinclude.m4 index 448659f9201..25f3655112c 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -1711,7 +1711,7 @@ int main(int argc, char *argv[]) { FILE *fp; long position; - char *filename = "/tmp/phpglibccheck"; + char *filename = tmpnam(NULL); fp = fopen(filename, "w"); if (fp == NULL) { From 811f35d0ed6c843be7cd895640592588be354254 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Fri, 6 Jun 2014 14:17:54 +0200 Subject: [PATCH 09/77] NEWS --- NEWS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NEWS b/NEWS index 66cb748d2ae..bb2cb1fd02d 100644 --- a/NEWS +++ b/NEWS @@ -4,6 +4,8 @@ PHP NEWS - Core: . Fixed BC break introduced by patch for bug #67072. (Anatol) + . Fixed bug #67390 (insecure temporary file use in the configure script). + (Remi) (CVE-2014-3981) - Date: . Fixed bug #67308 (Serialize of DateTime truncates fractions of second). From a53b884c47dfdcd47b87caff6abf6ed6ba155ce3 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Fri, 6 Jun 2014 14:18:29 +0200 Subject: [PATCH 10/77] NEWS --- NEWS | 3 +++ 1 file changed, 3 insertions(+) diff --git a/NEWS b/NEWS index 44280cce645..8a1a34930a6 100644 --- a/NEWS +++ b/NEWS @@ -4,6 +4,9 @@ PHP NEWS - Core: . Fixed BC break introduced by patch for bug #67072. (Anatol) + . Fixed bug #67390 (insecure temporary file use in the configure script). + (Remi) (CVE-2014-3981) + - Date: . Fixed bug #67308 (Serialize of DateTime truncates fractions of second). From 50b980f547f192dece017c4f267f9e15c9454854 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Fri, 6 Jun 2014 14:19:21 +0200 Subject: [PATCH 11/77] NEWS --- NEWS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NEWS b/NEWS index ad4ac8350f3..8c5fc369d76 100644 --- a/NEWS +++ b/NEWS @@ -6,6 +6,8 @@ PHP NEWS - Core: . Fixed bug #67249 (printf out-of-bounds read). (Stas) + . Fixed bug #67390 (insecure temporary file use in the configure script). + (Remi) (CVE-2014-3981) - Date: . Fixed bug #67308 (Serialize of DateTime truncates fractions of second). From 6d1885342c1504a8697b41e075844b082f7b335f Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Fri, 6 Jun 2014 17:09:49 +0200 Subject: [PATCH 12/77] Fix bug #67392: dtrace breaks argument unpack --- NEWS | 3 +++ Zend/zend_execute.c | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 8c5fc369d76..7adf249ba58 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,9 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? 2014, PHP 5.6.0 Release Candidate 1 +- Core: + . Fixed bug #67392 (dtrace breaks argument unpack). (Nikita) + 05 Jun 2014, PHP 5.6.0 Beta 4 - Core: diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index bdf8b6e70f0..ad92c5fb6f7 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -1490,7 +1490,8 @@ ZEND_API void execute_internal(zend_execute_data *execute_data_ptr, zend_fcall_i } else { zval **return_value_ptr = &EX_TMP_VAR(execute_data_ptr, execute_data_ptr->opline->result.var)->var.ptr; execute_data_ptr->function_state.function->internal_function.handler( - execute_data_ptr->opline->extended_value, *return_value_ptr, return_value_ptr, + execute_data_ptr->opline->extended_value + execute_data_ptr->call->num_additional_args, + *return_value_ptr, return_value_ptr, execute_data_ptr->object, return_value_used TSRMLS_CC ); } From bcef1beb8f24c8ffc11846d1a123953ca12ed2de Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Fri, 6 Jun 2014 17:19:35 +0200 Subject: [PATCH 13/77] move NEWS entry in the right place --- NEWS | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index 7adf249ba58..3a1290f6dae 100644 --- a/NEWS +++ b/NEWS @@ -3,14 +3,14 @@ PHP NEWS ?? ??? 2014, PHP 5.6.0 Release Candidate 1 - Core: + . Fixed bug #67390 (insecure temporary file use in the configure script). + (Remi) (CVE-2014-3981) . Fixed bug #67392 (dtrace breaks argument unpack). (Nikita) 05 Jun 2014, PHP 5.6.0 Beta 4 - Core: . Fixed bug #67249 (printf out-of-bounds read). (Stas) - . Fixed bug #67390 (insecure temporary file use in the configure script). - (Remi) (CVE-2014-3981) - Date: . Fixed bug #67308 (Serialize of DateTime truncates fractions of second). From 016b1f089e90af2e6a72c78107edce8eb2dcb31f Mon Sep 17 00:00:00 2001 From: Ferenc Kovacs Date: Sat, 7 Jun 2014 15:27:54 +0200 Subject: [PATCH 14/77] Fix bug #67392: token_name() does not return name for T_POW and T_POW_EQUAL token --- NEWS | 4 ++++ ext/tokenizer/tests/bug67395.phpt | 15 +++++++++++++++ ext/tokenizer/tokenizer_data.c | 4 ++++ 3 files changed, 23 insertions(+) create mode 100644 ext/tokenizer/tests/bug67395.phpt diff --git a/NEWS b/NEWS index 3a1290f6dae..a930dd6936f 100644 --- a/NEWS +++ b/NEWS @@ -7,6 +7,10 @@ PHP NEWS (Remi) (CVE-2014-3981) . Fixed bug #67392 (dtrace breaks argument unpack). (Nikita) +- Tokenizer: + . Fixed bug #67395 (token_name() does not return name for T_POW and T_POW_EQUAL + token). (Ferenc) + 05 Jun 2014, PHP 5.6.0 Beta 4 - Core: diff --git a/ext/tokenizer/tests/bug67395.phpt b/ext/tokenizer/tests/bug67395.phpt new file mode 100644 index 00000000000..c9b7f3012f5 --- /dev/null +++ b/ext/tokenizer/tests/bug67395.phpt @@ -0,0 +1,15 @@ +--TEST-- +Bug 67395: token_name() does not return name for T_POW and T_POW_EQUAL token +--FILE-- + +--EXPECT-- +string(5) "T_POW" +string(11) "T_POW_EQUAL" diff --git a/ext/tokenizer/tokenizer_data.c b/ext/tokenizer/tokenizer_data.c index dc48f040f1c..5a01bde573b 100644 --- a/ext/tokenizer/tokenizer_data.c +++ b/ext/tokenizer/tokenizer_data.c @@ -160,6 +160,8 @@ void tokenizer_register_constants(INIT_FUNC_ARGS) { REGISTER_LONG_CONSTANT("T_NS_SEPARATOR", T_NS_SEPARATOR, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_ELLIPSIS", T_ELLIPSIS, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_DOUBLE_COLON", T_PAAMAYIM_NEKUDOTAYIM, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_POW", T_POW, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_POW_EQUAL", T_POW_EQUAL, CONST_CS | CONST_PERSISTENT); } char *get_token_type_name(int token_type) @@ -296,6 +298,8 @@ char *get_token_type_name(int token_type) case T_DIR: return "T_DIR"; case T_NS_SEPARATOR: return "T_NS_SEPARATOR"; case T_ELLIPSIS: return "T_ELLIPSIS"; + case T_POW: return "T_POW"; + case T_POW_EQUAL: return "T_POW_EQUAL"; } return "UNKNOWN"; From 1e2a4a67dd4608e00a5cd548840fc92940cf9f45 Mon Sep 17 00:00:00 2001 From: Ferenc Kovacs Date: Sun, 8 Jun 2014 00:01:01 +0200 Subject: [PATCH 15/77] use ./tokenizer_data_gen.sh to for adding T_POW & T_POW_EQUAL --- ext/tokenizer/tokenizer_data.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ext/tokenizer/tokenizer_data.c b/ext/tokenizer/tokenizer_data.c index 5a01bde573b..beb9ea8e5b6 100644 --- a/ext/tokenizer/tokenizer_data.c +++ b/ext/tokenizer/tokenizer_data.c @@ -39,6 +39,7 @@ void tokenizer_register_constants(INIT_FUNC_ARGS) { REGISTER_LONG_CONSTANT("T_LOGICAL_AND", T_LOGICAL_AND, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_PRINT", T_PRINT, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_YIELD", T_YIELD, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_POW_EQUAL", T_POW_EQUAL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_SR_EQUAL", T_SR_EQUAL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_SL_EQUAL", T_SL_EQUAL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_XOR_EQUAL", T_XOR_EQUAL, CONST_CS | CONST_PERSISTENT); @@ -70,6 +71,7 @@ void tokenizer_register_constants(INIT_FUNC_ARGS) { REGISTER_LONG_CONSTANT("T_INT_CAST", T_INT_CAST, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_DEC", T_DEC, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_INC", T_INC, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_POW", T_POW, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_CLONE", T_CLONE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_NEW", T_NEW, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_EXIT", T_EXIT, CONST_CS | CONST_PERSISTENT); @@ -160,8 +162,6 @@ void tokenizer_register_constants(INIT_FUNC_ARGS) { REGISTER_LONG_CONSTANT("T_NS_SEPARATOR", T_NS_SEPARATOR, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_ELLIPSIS", T_ELLIPSIS, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_DOUBLE_COLON", T_PAAMAYIM_NEKUDOTAYIM, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("T_POW", T_POW, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("T_POW_EQUAL", T_POW_EQUAL, CONST_CS | CONST_PERSISTENT); } char *get_token_type_name(int token_type) @@ -178,6 +178,7 @@ char *get_token_type_name(int token_type) case T_LOGICAL_AND: return "T_LOGICAL_AND"; case T_PRINT: return "T_PRINT"; case T_YIELD: return "T_YIELD"; + case T_POW_EQUAL: return "T_POW_EQUAL"; case T_SR_EQUAL: return "T_SR_EQUAL"; case T_SL_EQUAL: return "T_SL_EQUAL"; case T_XOR_EQUAL: return "T_XOR_EQUAL"; @@ -209,6 +210,7 @@ char *get_token_type_name(int token_type) case T_INT_CAST: return "T_INT_CAST"; case T_DEC: return "T_DEC"; case T_INC: return "T_INC"; + case T_POW: return "T_POW"; case T_CLONE: return "T_CLONE"; case T_NEW: return "T_NEW"; case T_EXIT: return "T_EXIT"; @@ -298,8 +300,6 @@ char *get_token_type_name(int token_type) case T_DIR: return "T_DIR"; case T_NS_SEPARATOR: return "T_NS_SEPARATOR"; case T_ELLIPSIS: return "T_ELLIPSIS"; - case T_POW: return "T_POW"; - case T_POW_EQUAL: return "T_POW_EQUAL"; } return "UNKNOWN"; From ea543893d0cb3e66b76dc0f39fb9b9c11df960f7 Mon Sep 17 00:00:00 2001 From: Jeff Welch Date: Sun, 8 Jun 2014 04:09:14 -0400 Subject: [PATCH 16/77] Remove superfluous echos. --- ext/exif/tests/exif004.phpt | 2 +- ext/reflection/tests/ReflectionFunction_isClosure_basic.phpt | 2 +- ext/reflection/tests/ReflectionFunction_isDeprecated_basic.phpt | 2 +- ext/reflection/tests/ReflectionFunction_isDisabled_basic.phpt | 2 +- ext/zlib/tests/gzseek_basic2.phpt | 2 +- ext/zlib/tests/gzseek_variation1.phpt | 2 +- ext/zlib/tests/gzseek_variation4.phpt | 2 +- ext/zlib/tests/gzseek_variation5.phpt | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/ext/exif/tests/exif004.phpt b/ext/exif/tests/exif004.phpt index 229f49e1459..8797955f8c8 100644 --- a/ext/exif/tests/exif004.phpt +++ b/ext/exif/tests/exif004.phpt @@ -18,7 +18,7 @@ exif.encode_unicode=ISO-8859-1 test4.jpg is a 1*1 image that contains Exif tags written by WindowsXP */ $image = exif_read_data(dirname(__FILE__).'/test4.jpg','',true,false); -echo var_dump($image['WINXP']); +var_dump($image['WINXP']); ?> --EXPECT-- array(5) { diff --git a/ext/reflection/tests/ReflectionFunction_isClosure_basic.phpt b/ext/reflection/tests/ReflectionFunction_isClosure_basic.phpt index eeaf8d382c8..368464e1303 100644 --- a/ext/reflection/tests/ReflectionFunction_isClosure_basic.phpt +++ b/ext/reflection/tests/ReflectionFunction_isClosure_basic.phpt @@ -13,6 +13,6 @@ if (!extension_loaded('reflection') || !defined('PHP_VERSION_ID') || PHP_VERSION isClosure()); +var_dump($rc->isClosure()); --EXPECTF-- bool(true) diff --git a/ext/reflection/tests/ReflectionFunction_isDeprecated_basic.phpt b/ext/reflection/tests/ReflectionFunction_isDeprecated_basic.phpt index 31d37a85f17..4148fada0cd 100644 --- a/ext/reflection/tests/ReflectionFunction_isDeprecated_basic.phpt +++ b/ext/reflection/tests/ReflectionFunction_isDeprecated_basic.phpt @@ -10,6 +10,6 @@ if (!extension_loaded('reflection') || !defined('PHP_VERSION_ID') || PHP_VERSION --FILE-- isDeprecated()); +var_dump($rc->isDeprecated()); --EXPECTF-- bool(true) diff --git a/ext/reflection/tests/ReflectionFunction_isDisabled_basic.phpt b/ext/reflection/tests/ReflectionFunction_isDisabled_basic.phpt index c71b96b8ef0..30189cf4de5 100644 --- a/ext/reflection/tests/ReflectionFunction_isDisabled_basic.phpt +++ b/ext/reflection/tests/ReflectionFunction_isDisabled_basic.phpt @@ -12,6 +12,6 @@ disable_functions=is_file --FILE-- isDisabled()); +var_dump($rc->isDisabled()); --EXPECTF-- bool(true) diff --git a/ext/zlib/tests/gzseek_basic2.phpt b/ext/zlib/tests/gzseek_basic2.phpt index 82d305d0fb4..8e037af139b 100644 --- a/ext/zlib/tests/gzseek_basic2.phpt +++ b/ext/zlib/tests/gzseek_basic2.phpt @@ -24,7 +24,7 @@ gzclose($h); echo "\nreading the output file\n"; $h = gzopen($f, 'r'); echo gzread($h, strlen($str1))."\n"; -echo var_dump(bin2hex(gzread($h, 20))); +var_dump(bin2hex(gzread($h, 20))); echo gzread($h, strlen($str2))."\n"; gzclose($h); unlink($f); diff --git a/ext/zlib/tests/gzseek_variation1.phpt b/ext/zlib/tests/gzseek_variation1.phpt index b260783f118..8512b743bd3 100644 --- a/ext/zlib/tests/gzseek_variation1.phpt +++ b/ext/zlib/tests/gzseek_variation1.phpt @@ -20,7 +20,7 @@ gzwrite($h, $str2); gzclose($h); $h = gzopen($f, 'r'); echo gzread($h, strlen($str1))."\n"; -echo var_dump(bin2hex(gzread($h, 20))); +var_dump(bin2hex(gzread($h, 20))); echo gzread($h, strlen($str2))."\n"; gzclose($h); unlink($f); diff --git a/ext/zlib/tests/gzseek_variation4.phpt b/ext/zlib/tests/gzseek_variation4.phpt index 3d0cf67ceb0..529a0121413 100644 --- a/ext/zlib/tests/gzseek_variation4.phpt +++ b/ext/zlib/tests/gzseek_variation4.phpt @@ -24,7 +24,7 @@ gzclose($h); echo "\nreading the output file\n"; $h = gzopen($f, 'r'); echo gzread($h, strlen($str1))."\n"; -echo var_dump(bin2hex(gzread($h, 20))); +var_dump(bin2hex(gzread($h, 20))); echo gzread($h, strlen($str2))."\n"; gzclose($h); unlink($f); diff --git a/ext/zlib/tests/gzseek_variation5.phpt b/ext/zlib/tests/gzseek_variation5.phpt index 93fb19fdbbd..11e4912787a 100644 --- a/ext/zlib/tests/gzseek_variation5.phpt +++ b/ext/zlib/tests/gzseek_variation5.phpt @@ -24,7 +24,7 @@ gzclose($h); echo "\nreading the output file\n"; $h = gzopen($f, 'r'); echo gzread($h, strlen($str1))."\n"; -echo var_dump(bin2hex(gzread($h, 20))); +var_dump(bin2hex(gzread($h, 20))); echo gzread($h, strlen($str2))."\n"; gzclose($h); unlink($f); From 4c79fe6afa25c87f89b46d48968fdaf36b085f8c Mon Sep 17 00:00:00 2001 From: Bob Weinand Date: Sun, 8 Jun 2014 20:34:30 +0000 Subject: [PATCH 17/77] Updated parser & leer to be usable with re2c Fixes some weird temporary compilation errors too --- .gitignore | 1 + Makefile.frag | 15 +- config.m4 | 2 +- phpdbg.h | 7 +- phpdbg_lexer.c | 3142 ++++++++++++++--------------------------------- phpdbg_lexer.h | 373 +----- phpdbg_lexer.l | 246 ++-- phpdbg_parser.c | 675 +++++----- phpdbg_parser.h | 39 +- phpdbg_parser.y | 146 ++- phpdbg_prompt.c | 35 +- 11 files changed, 1558 insertions(+), 3123 deletions(-) diff --git a/.gitignore b/.gitignore index 5506a2652d0..51165dab2f3 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ phpdbg *.lo *.o +*.output build diff --git a/Makefile.frag b/Makefile.frag index 45768de2eff..d787b0fb180 100644 --- a/Makefile.frag +++ b/Makefile.frag @@ -8,14 +8,17 @@ $(BUILD_SHARED): $(PHP_GLOBAL_OBJS) $(PHP_BINARY_OBJS) $(PHP_PHPDBG_OBJS) $(BUILD_BINARY): $(PHP_GLOBAL_OBJS) $(PHP_BINARY_OBJS) $(PHP_PHPDBG_OBJS) $(BUILD_PHPDBG) -$(builddir)/sapi/phpdbg/phpdbg_lexer.lo: $(srcdir)/sapi/phpdbg/phpdbg_parser.h +%.c: %.y +%.c: %.l -$(srcdir)/sapi/phpdbg/phpdbg_lexer.c: $(srcdir)/sapi/phpdbg/phpdbg_lexer.l - @(cd $(top_srcdir); $(RE2C) $(RE2C_FLAGS) --no-generation-date -cbdFo sapi/phpdbg/phpdbg_lexer.c sapi/phpdbg/phpdbg_lexer.l) +$(builddir)/phpdbg_lexer.lo: $(srcdir)/phpdbg_parser.h -$(srcdir)/sapi/phpdbg/phpdbg_parser.h: $(srcdir)/sapi/phpdbg/phpdbg_parser.c -$(srcdir)/sapi/phpdbg/phpdbg_parser.c: $(srcdir)/sapi/phpdbg/phpdbg_parser.y - @$(YACC) -p phpdbg_ -v -d $(srcdir)/sapi/phpdbg/phpdbg_parser.y -o $@ +$(srcdir)/phpdbg_lexer.c: $(srcdir)/phpdbg_lexer.l + @(cd $(top_srcdir); $(RE2C) $(RE2C_FLAGS) --no-generation-date -cbdFo $(srcdir)/phpdbg_lexer.c $(srcdir)/phpdbg_lexer.l) + +$(srcdir)/phpdbg_parser.h: $(srcdir)/phpdbg_parser.c +$(srcdir)/phpdbg_parser.c: $(srcdir)/phpdbg_parser.y + @$(YACC) -p phpdbg_ -v -d $(srcdir)/phpdbg_parser.y -o $@ install-phpdbg: $(BUILD_BINARY) @echo "Installing phpdbg binary: $(INSTALL_ROOT)$(bindir)/" diff --git a/config.m4 b/config.m4 index a1b2f9faa10..ecac1715067 100644 --- a/config.m4 +++ b/config.m4 @@ -28,7 +28,7 @@ if test "$PHP_PHPDBG" != "no"; then PHP_SUBST(PHP_PHPDBG_FILES) PHP_SUBST(PHPDBG_EXTRA_LIBS) - PHP_ADD_MAKEFILE_FRAGMENT([$abs_srcdir/sapi/phpdbg/Makefile.frag]) + PHP_ADD_MAKEFILE_FRAGMENT([$abs_srcdir/sapi/phpdbg/Makefile.frag], [$abs_srcdir/sapi/phpdbg], [$abs_builddir/sapi/phpdbg]) PHP_SELECT_SAPI(phpdbg, program, $PHP_PHPDBG_FILES, $PHP_PHPDBG_CFLAGS, [$(SAPI_PHPDBG_PATH)]) BUILD_BINARY="sapi/phpdbg/phpdbg" diff --git a/phpdbg.h b/phpdbg.h index be009e40d04..12350d5425d 100644 --- a/phpdbg.h +++ b/phpdbg.h @@ -69,11 +69,14 @@ # include #endif +#include "phpdbg_lexer.h" #include "phpdbg_cmd.h" #include "phpdbg_utils.h" #include "phpdbg_btree.h" #include "phpdbg_watch.h" +int phpdbg_do_parse(phpdbg_param_t *stack, char *input TSRMLS_DC); + #ifdef ZTS # define PHPDBG_G(v) TSRMG(phpdbg_globals_id, zend_phpdbg_globals *, v) #else @@ -176,10 +179,12 @@ ZEND_BEGIN_MODULE_GLOBALS(phpdbg) phpdbg_frame_t frame; /* frame */ zend_uint last_line; /* last executed line */ + phpdbg_lexer_data lexer; /* lexer data */ + phpdbg_param_t *parser_stack; /* param stack during lexer / parser phase */ + #ifndef _WIN32 struct sigaction old_sigsegv_signal; /* segv signal handler */ #endif - phpdbg_btree watchpoint_tree; /* tree with watchpoints */ phpdbg_btree watch_HashTables; /* tree with original dtors of watchpoints */ HashTable watchpoints; /* watchpoints */ diff --git a/phpdbg_lexer.c b/phpdbg_lexer.c index 94a4ba9766a..6bacd9939c8 100644 --- a/phpdbg_lexer.c +++ b/phpdbg_lexer.c @@ -1,2271 +1,963 @@ -#line 2 "sapi/phpdbg/phpdbg_lexer.c" - -#line 4 "sapi/phpdbg/phpdbg_lexer.c" - -#define YY_INT_ALIGNED short int - -/* A lexical scanner generated by flex */ - -#define FLEX_SCANNER -#define YY_FLEX_MAJOR_VERSION 2 -#define YY_FLEX_MINOR_VERSION 5 -#define YY_FLEX_SUBMINOR_VERSION 37 -#if YY_FLEX_SUBMINOR_VERSION > 0 -#define FLEX_BETA -#endif - -/* First, we deal with platform-specific or compiler-specific issues. */ - -/* begin standard C headers. */ -#include -#include -#include -#include - -/* end standard C headers. */ - -/* flex integer type definitions */ - -#ifndef FLEXINT_H -#define FLEXINT_H - -/* C99 systems have . Non-C99 systems may or may not. */ - -#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - -/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, - * if you want the limit (max/min) macros for int types. - */ -#ifndef __STDC_LIMIT_MACROS -#define __STDC_LIMIT_MACROS 1 -#endif - -#include -typedef int8_t flex_int8_t; -typedef uint8_t flex_uint8_t; -typedef int16_t flex_int16_t; -typedef uint16_t flex_uint16_t; -typedef int32_t flex_int32_t; -typedef uint32_t flex_uint32_t; -#else -typedef signed char flex_int8_t; -typedef short int flex_int16_t; -typedef int flex_int32_t; -typedef unsigned char flex_uint8_t; -typedef unsigned short int flex_uint16_t; -typedef unsigned int flex_uint32_t; - -/* Limits of integral types. */ -#ifndef INT8_MIN -#define INT8_MIN (-128) -#endif -#ifndef INT16_MIN -#define INT16_MIN (-32767-1) -#endif -#ifndef INT32_MIN -#define INT32_MIN (-2147483647-1) -#endif -#ifndef INT8_MAX -#define INT8_MAX (127) -#endif -#ifndef INT16_MAX -#define INT16_MAX (32767) -#endif -#ifndef INT32_MAX -#define INT32_MAX (2147483647) -#endif -#ifndef UINT8_MAX -#define UINT8_MAX (255U) -#endif -#ifndef UINT16_MAX -#define UINT16_MAX (65535U) -#endif -#ifndef UINT32_MAX -#define UINT32_MAX (4294967295U) -#endif - -#endif /* ! C99 */ - -#endif /* ! FLEXINT_H */ - -#ifdef __cplusplus - -/* The "const" storage-class-modifier is valid. */ -#define YY_USE_CONST - -#else /* ! __cplusplus */ - -/* C99 requires __STDC__ to be defined as 1. */ -#if defined (__STDC__) - -#define YY_USE_CONST - -#endif /* defined (__STDC__) */ -#endif /* ! __cplusplus */ - -#ifdef YY_USE_CONST -#define yyconst const -#else -#define yyconst -#endif - -/* Returned upon end-of-file. */ -#define YY_NULL 0 - -/* Promotes a possibly negative, possibly signed char to an unsigned - * integer for use as an array index. If the signed char is negative, - * we want to instead treat it as an 8-bit unsigned char, hence the - * double cast. - */ -#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) - -/* An opaque pointer. */ -#ifndef YY_TYPEDEF_YY_SCANNER_T -#define YY_TYPEDEF_YY_SCANNER_T -typedef void* yyscan_t; -#endif - -/* For convenience, these vars (plus the bison vars far below) - are macros in the reentrant scanner. */ -#define yyin yyg->yyin_r -#define yyout yyg->yyout_r -#define yyextra yyg->yyextra_r -#define yyleng yyg->yyleng_r -#define yytext yyg->yytext_r -#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) -#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) -#define yy_flex_debug yyg->yy_flex_debug_r - -/* Enter a start condition. This macro really ought to take a parameter, - * but we do it the disgusting crufty way forced on us by the ()-less - * definition of BEGIN. - */ -#define BEGIN yyg->yy_start = 1 + 2 * - -/* Translate the current start state into a value that can be later handed - * to BEGIN to return to the state. The YYSTATE alias is for lex - * compatibility. - */ -#define YY_START ((yyg->yy_start - 1) / 2) -#define YYSTATE YY_START - -/* Action number for EOF rule of a given start state. */ -#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) - -/* Special action meaning "start processing a new file". */ -#define YY_NEW_FILE yyrestart(yyin ,yyscanner ) - -#define YY_END_OF_BUFFER_CHAR 0 - -/* Size of default input buffer. */ -#ifndef YY_BUF_SIZE -#define YY_BUF_SIZE 16384 -#endif - -/* The state buf must be large enough to hold one state per character in the main buffer. - */ -#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) - -#ifndef YY_TYPEDEF_YY_BUFFER_STATE -#define YY_TYPEDEF_YY_BUFFER_STATE -typedef struct yy_buffer_state *YY_BUFFER_STATE; -#endif - -#ifndef YY_TYPEDEF_YY_SIZE_T -#define YY_TYPEDEF_YY_SIZE_T -typedef size_t yy_size_t; -#endif - -#define EOB_ACT_CONTINUE_SCAN 0 -#define EOB_ACT_END_OF_FILE 1 -#define EOB_ACT_LAST_MATCH 2 - - #define YY_LESS_LINENO(n) - -/* Return all but the first "n" matched characters back to the input stream. */ -#define yyless(n) \ - do \ - { \ - /* Undo effects of setting up yytext. */ \ - int yyless_macro_arg = (n); \ - YY_LESS_LINENO(yyless_macro_arg);\ - *yy_cp = yyg->yy_hold_char; \ - YY_RESTORE_YY_MORE_OFFSET \ - yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ - YY_DO_BEFORE_ACTION; /* set up yytext again */ \ - } \ - while ( 0 ) - -#define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner ) - -#ifndef YY_STRUCT_YY_BUFFER_STATE -#define YY_STRUCT_YY_BUFFER_STATE -struct yy_buffer_state - { - FILE *yy_input_file; - - char *yy_ch_buf; /* input buffer */ - char *yy_buf_pos; /* current position in input buffer */ - - /* Size of input buffer in bytes, not including room for EOB - * characters. - */ - yy_size_t yy_buf_size; - - /* Number of characters read into yy_ch_buf, not including EOB - * characters. - */ - yy_size_t yy_n_chars; - - /* Whether we "own" the buffer - i.e., we know we created it, - * and can realloc() it to grow it, and should free() it to - * delete it. - */ - int yy_is_our_buffer; - - /* Whether this is an "interactive" input source; if so, and - * if we're using stdio for input, then we want to use getc() - * instead of fread(), to make sure we stop fetching input after - * each newline. - */ - int yy_is_interactive; - - /* Whether we're considered to be at the beginning of a line. - * If so, '^' rules will be active on the next match, otherwise - * not. - */ - int yy_at_bol; - - int yy_bs_lineno; /**< The line count. */ - int yy_bs_column; /**< The column count. */ - - /* Whether to try to fill the input buffer when we reach the - * end of it. - */ - int yy_fill_buffer; - - int yy_buffer_status; - -#define YY_BUFFER_NEW 0 -#define YY_BUFFER_NORMAL 1 - /* When an EOF's been seen but there's still some text to process - * then we mark the buffer as YY_EOF_PENDING, to indicate that we - * shouldn't try reading from the input source any more. We might - * still have a bunch of tokens to match, though, because of - * possible backing-up. - * - * When we actually see the EOF, we change the status to "new" - * (via yyrestart()), so that the user can continue scanning by - * just pointing yyin at a new input file. - */ -#define YY_BUFFER_EOF_PENDING 2 - - }; -#endif /* !YY_STRUCT_YY_BUFFER_STATE */ - -/* We provide macros for accessing buffer states in case in the - * future we want to put the buffer states in a more general - * "scanner state". - * - * Returns the top of the stack, or NULL. - */ -#define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \ - ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \ - : NULL) - -/* Same as previous macro, but useful when we know that the buffer stack is not - * NULL or when we need an lvalue. For internal use only. - */ -#define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] - -void yyrestart (FILE *input_file ,yyscan_t yyscanner ); -void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); -YY_BUFFER_STATE yy_create_buffer (FILE *file,int size ,yyscan_t yyscanner ); -void yy_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); -void yy_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); -void yypush_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); -void yypop_buffer_state (yyscan_t yyscanner ); - -static void yyensure_buffer_stack (yyscan_t yyscanner ); -static void yy_load_buffer_state (yyscan_t yyscanner ); -static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file ,yyscan_t yyscanner ); - -#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER ,yyscanner) - -YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner ); -YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner ); -YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len ,yyscan_t yyscanner ); - -void *yyalloc (yy_size_t ,yyscan_t yyscanner ); -void *yyrealloc (void *,yy_size_t ,yyscan_t yyscanner ); -void yyfree (void * ,yyscan_t yyscanner ); - -#define yy_new_buffer yy_create_buffer - -#define yy_set_interactive(is_interactive) \ - { \ - if ( ! YY_CURRENT_BUFFER ){ \ - yyensure_buffer_stack (yyscanner); \ - YY_CURRENT_BUFFER_LVALUE = \ - yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \ - } \ - YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ - } - -#define yy_set_bol(at_bol) \ - { \ - if ( ! YY_CURRENT_BUFFER ){\ - yyensure_buffer_stack (yyscanner); \ - YY_CURRENT_BUFFER_LVALUE = \ - yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \ - } \ - YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ - } - -#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) - -/* Begin user sect3 */ - -#define yywrap(yyscanner) 1 -#define YY_SKIP_YYWRAP - -typedef unsigned char YY_CHAR; - -typedef int yy_state_type; - -#define yytext_ptr yytext_r - -static yy_state_type yy_get_previous_state (yyscan_t yyscanner ); -static yy_state_type yy_try_NUL_trans (yy_state_type current_state ,yyscan_t yyscanner); -static int yy_get_next_buffer (yyscan_t yyscanner ); -static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner ); - -/* Done after the current pattern has been matched and before the - * corresponding action - sets up yytext. - */ -#define YY_DO_BEFORE_ACTION \ - yyg->yytext_ptr = yy_bp; \ - yyleng = (size_t) (yy_cp - yy_bp); \ - yyg->yy_hold_char = *yy_cp; \ - *yy_cp = '\0'; \ - yyg->yy_c_buf_p = yy_cp; - -#define YY_NUM_RULES 18 -#define YY_END_OF_BUFFER 19 -/* This struct is not used in this scanner, - but its presence is necessary. */ -struct yy_trans_info - { - flex_int32_t yy_verify; - flex_int32_t yy_nxt; - }; -static yyconst flex_int16_t yy_acclist[229] = - { 0, - 19, 4, 15, 18, 4, 17, 18, 17, 18, 4, - 7, 18, 4, 12, 15, 18, 4, 12, 15, 18, - 4, 9, 18, 4, 15, 18, 4, 15, 18, 4, - 15, 18, 4, 15, 18, 4, 15, 18, 4, 15, - 18, 3, 4, 15, 18, 4, 15, 18, 4, 15, - 18, 4, 15, 18, 4, 15, 18, 16, 18, 16, - 17, 18, 15, 18, 7, 18, 12, 15, 18, 12, - 15, 18, 9, 18, 15, 18, 15, 18, 15, 18, - 15, 18, 15, 18, 15, 18, 15, 18, 15, 18, - 15, 18, 15, 18, 4, 15, 4, 4, 4, 17, - - 17, 4, 12, 15, 4, 15, 4, 8, 4, 15, - 4, 15, 4, 15, 1, 4, 15, 4, 15, 4, - 11, 15, 4, 15, 4, 10, 15, 4, 15, 2, - 4, 15, 4, 15, 4, 15, 4, 15, 16, 16, - 17, 15, 12, 15, 15, 8, 15, 15, 15, 15, - 5, 15, 11, 15, 15, 10, 15, 15, 15, 15, - 4, 4, 13, 15, 4, 15, 4, 15, 4, 15, - 4, 15, 3, 4, 15, 4, 15, 4, 15, 13, - 15, 15, 15, 15, 15, 15, 15, 4, 6, 4, - 15, 4, 15, 4, 15, 4, 15, 4, 15, 6, - - 15, 15, 15, 15, 15, 4, 15, 4, 15, 4, - 15, 15, 15, 15, 4, 14, 15, 4, 15, 4, - 15, 14, 15, 15, 15, 4, 15, 15 - } ; - -static yyconst flex_int16_t yy_accept[127] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 2, 5, 8, - 10, 13, 17, 21, 24, 27, 30, 33, 36, 39, - 42, 46, 49, 52, 55, 58, 60, 63, 65, 67, - 70, 73, 75, 77, 79, 81, 83, 85, 87, 89, - 91, 93, 95, 97, 98, 99, 101, 102, 105, 107, - 109, 111, 113, 115, 118, 120, 123, 125, 128, 130, - 133, 135, 137, 139, 140, 142, 143, 143, 145, 146, - 147, 148, 149, 150, 151, 153, 155, 156, 158, 159, - 160, 161, 162, 165, 167, 169, 171, 173, 176, 178, - 180, 180, 182, 183, 184, 185, 186, 187, 188, 190, - - 192, 194, 196, 198, 200, 201, 202, 203, 204, 205, - 206, 208, 210, 212, 213, 214, 215, 218, 220, 222, - 224, 225, 226, 228, 229, 229 - } ; - -static yyconst flex_int32_t yy_ec[256] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, - 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 1, 1, 4, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 5, 6, 7, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 9, 1, 1, - 1, 1, 1, 1, 10, 10, 10, 11, 12, 10, - 13, 13, 13, 13, 13, 13, 13, 14, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 15, - 1, 1, 1, 1, 16, 1, 17, 18, 10, 19, - - 20, 21, 13, 22, 23, 13, 13, 24, 13, 25, - 26, 13, 13, 27, 28, 29, 30, 31, 13, 32, - 33, 34, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1 - } ; - -static yyconst flex_int32_t yy_meta[35] = - { 0, - 1, 2, 3, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1 - } ; - -static yyconst flex_int16_t yy_base[133] = - { 0, - 0, 0, 33, 35, 38, 0, 357, 71, 74, 76, - 352, 79, 87, 90, 96, 100, 108, 109, 112, 120, - 123, 126, 138, 142, 148, 0, 104, 316, 455, 151, - 162, 313, 73, 92, 65, 146, 122, 94, 152, 127, - 155, 163, 172, 318, 131, 176, 182, 288, 190, 314, - 178, 184, 187, 211, 212, 215, 221, 224, 225, 235, - 236, 239, 245, 0, 203, 260, 259, 248, 264, 455, - 237, 190, 243, 253, 255, 222, 259, 194, 249, 250, - 277, 229, 0, 285, 286, 289, 295, 304, 307, 310, - 184, 0, 252, 283, 292, 296, 306, 309, 163, 328, - - 329, 332, 341, 344, 455, 326, 331, 330, 342, 343, - 362, 370, 371, 394, 368, 356, 410, 384, 404, 426, - 376, 378, 420, 411, 455, 442, 445, 447, 450, 148, - 452, 96 - } ; - -static yyconst flex_int16_t yy_def[133] = - { 0, - 125, 1, 126, 126, 125, 5, 125, 127, 128, 125, - 128, 127, 127, 128, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 129, 129, 130, 125, 130, - 130, 125, 130, 130, 130, 130, 130, 130, 130, 130, - 130, 130, 127, 128, 128, 128, 125, 13, 13, 128, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 129, 129, 130, 125, 130, 130, 125, - 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, - 130, 128, 49, 127, 127, 127, 127, 127, 127, 127, - 125, 69, 130, 130, 130, 130, 130, 130, 128, 127, - - 127, 127, 127, 127, 125, 130, 130, 130, 130, 130, - 131, 127, 127, 132, 130, 130, 131, 127, 127, 132, - 130, 130, 127, 130, 0, 125, 125, 125, 125, 125, - 125, 125 - } ; - -static yyconst flex_int16_t yy_nxt[490] = - { 0, - 8, 9, 10, 11, 12, 8, 13, 12, 14, 8, - 8, 8, 8, 8, 15, 8, 8, 8, 16, 17, - 18, 8, 8, 8, 19, 20, 21, 22, 23, 8, - 8, 8, 24, 25, 27, 10, 27, 10, 28, 10, - 10, 29, 30, 28, 31, 30, 32, 28, 28, 28, - 28, 28, 33, 28, 28, 28, 34, 35, 36, 28, - 37, 28, 38, 39, 28, 28, 40, 28, 28, 28, - 41, 42, 44, 67, 44, 46, 47, 47, 47, 45, - 44, 67, 44, 48, 71, 48, 48, 45, 44, 73, - 44, 48, 125, 48, 48, 45, 120, 44, 50, 44, - - 67, 44, 67, 44, 45, 65, 47, 51, 45, 44, - 44, 44, 44, 44, 72, 44, 45, 45, 49, 76, - 45, 44, 52, 44, 44, 55, 44, 44, 45, 44, - 67, 45, 53, 125, 45, 67, 82, 56, 54, 44, - 57, 44, 75, 44, 58, 44, 45, 60, 66, 44, - 45, 44, 59, 79, 67, 68, 45, 68, 68, 67, - 67, 62, 74, 67, 61, 125, 68, 63, 68, 68, - 67, 67, 77, 44, 80, 44, 78, 46, 47, 44, - 45, 44, 81, 47, 47, 44, 45, 44, 44, 105, - 44, 84, 45, 69, 43, 45, 83, 83, 67, 83, - - 83, 83, 67, 86, 65, 47, 83, 83, 83, 83, - 83, 85, 44, 44, 44, 44, 44, 94, 44, 45, - 45, 43, 44, 45, 44, 44, 44, 44, 44, 45, - 67, 125, 45, 45, 99, 87, 44, 44, 44, 44, - 44, 56, 44, 45, 45, 67, 44, 45, 44, 88, - 93, 67, 68, 45, 68, 68, 67, 67, 67, 95, - 67, 67, 106, 67, 91, 89, 58, 67, 67, 90, - 92, 92, 67, 92, 92, 92, 96, 78, 97, 76, - 92, 92, 92, 92, 92, 67, 44, 44, 44, 44, - 44, 67, 44, 45, 45, 100, 44, 45, 44, 107, - - 67, 98, 101, 45, 67, 44, 102, 44, 44, 108, - 44, 44, 45, 44, 67, 45, 125, 67, 45, 43, - 125, 70, 103, 109, 67, 78, 58, 110, 104, 44, - 44, 44, 44, 44, 67, 44, 45, 45, 67, 67, - 45, 114, 44, 111, 44, 44, 112, 44, 115, 45, - 67, 67, 45, 116, 125, 113, 125, 125, 114, 111, - 56, 76, 43, 44, 67, 44, 43, 43, 43, 43, - 45, 44, 44, 44, 44, 122, 67, 43, 45, 45, - 125, 125, 125, 125, 67, 44, 67, 44, 125, 125, - 119, 121, 45, 118, 66, 124, 78, 125, 66, 66, - - 66, 66, 67, 123, 125, 44, 125, 44, 125, 66, - 43, 44, 45, 44, 43, 43, 43, 43, 45, 67, - 125, 44, 58, 44, 125, 43, 66, 125, 45, 76, - 66, 66, 66, 66, 67, 125, 125, 125, 56, 125, - 125, 66, 26, 26, 26, 43, 43, 44, 44, 44, - 64, 64, 117, 117, 7, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125 - } ; - -static yyconst flex_int16_t yy_chk[490] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 3, 3, 4, 4, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 8, 35, 8, 9, 9, 10, 10, 8, - 12, 33, 12, 12, 33, 12, 12, 12, 13, 35, - 13, 13, 14, 13, 13, 13, 132, 15, 14, 15, - - 34, 16, 38, 16, 15, 27, 27, 15, 16, 17, - 18, 17, 18, 19, 34, 19, 17, 18, 13, 38, - 19, 20, 16, 20, 21, 18, 21, 22, 20, 22, - 37, 21, 17, 45, 22, 40, 45, 19, 17, 23, - 20, 23, 37, 24, 20, 24, 23, 22, 130, 25, - 24, 25, 21, 40, 36, 30, 25, 30, 30, 30, - 39, 24, 36, 41, 23, 99, 31, 25, 31, 31, - 31, 42, 39, 43, 41, 43, 39, 46, 46, 51, - 43, 51, 42, 47, 47, 52, 51, 52, 53, 91, - 53, 51, 52, 31, 49, 53, 49, 49, 72, 49, - - 49, 49, 78, 53, 65, 65, 49, 49, 49, 49, - 49, 52, 54, 55, 54, 55, 56, 72, 56, 54, - 55, 49, 57, 56, 57, 58, 59, 58, 59, 57, - 76, 82, 58, 59, 82, 55, 60, 61, 60, 61, - 62, 57, 62, 60, 61, 71, 63, 62, 63, 59, - 71, 73, 68, 63, 68, 68, 68, 79, 80, 73, - 93, 74, 93, 75, 67, 61, 62, 77, 66, 63, - 69, 69, 69, 69, 69, 69, 74, 80, 79, 77, - 69, 69, 69, 69, 69, 81, 84, 85, 84, 85, - 86, 94, 86, 84, 85, 84, 87, 86, 87, 94, - - 95, 81, 85, 87, 96, 88, 86, 88, 89, 95, - 89, 90, 88, 90, 97, 89, 50, 98, 90, 48, - 44, 32, 87, 96, 28, 97, 89, 98, 90, 100, - 101, 100, 101, 102, 106, 102, 100, 101, 108, 107, - 102, 106, 103, 100, 103, 104, 101, 104, 107, 103, - 109, 110, 104, 108, 11, 102, 7, 0, 110, 104, - 103, 109, 111, 111, 116, 111, 111, 111, 111, 111, - 111, 112, 113, 112, 113, 116, 115, 111, 112, 113, - 0, 0, 0, 0, 121, 118, 122, 118, 0, 0, - 113, 115, 118, 112, 114, 121, 122, 0, 114, 114, - - 114, 114, 114, 118, 0, 119, 0, 119, 0, 114, - 117, 117, 119, 117, 117, 117, 117, 117, 117, 124, - 0, 123, 119, 123, 0, 117, 120, 0, 123, 124, - 120, 120, 120, 120, 120, 0, 0, 0, 123, 0, - 0, 120, 126, 126, 126, 127, 127, 128, 128, 128, - 129, 129, 131, 131, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125 - } ; - -#define REJECT \ -{ \ -*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ \ -yy_cp = yyg->yy_full_match; /* restore poss. backed-over text */ \ -++yyg->yy_lp; \ -goto find_rule; \ -} - -#define yymore() yymore_used_but_not_detected -#define YY_MORE_ADJ 0 -#define YY_RESTORE_YY_MORE_OFFSET -#line 1 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" -#line 2 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" - +/* Generated by re2c 0.13.5 */ +#line 1 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" /* * phpdbg_lexer.l */ #include "phpdbg.h" #include "phpdbg_cmd.h" -#define YYSTYPE phpdbg_param_t #include "phpdbg_parser.h" - +#define LEX(v) (PHPDBG_G(lexer).v) -#define YY_NO_UNISTD_H 1 -#line 629 "sapi/phpdbg/phpdbg_lexer.c" +#define YYCTYPE unsigned char +#define YYSETCONDITION(x) LEX(state) = x; +#define YYGETCONDITION() LEX(state) +#define YYCURSOR LEX(cursor) +#define YYMARKER LEX(marker) +#define yyleng LEX(len) +#define yytext ((char*) LEX(text)) +#undef YYDEBUG +#define YYDEBUG(a, b) +#define YYFILL(n) -#define INITIAL 0 +#define NORMAL 0 #define RAW 1 -#define NORMAL 2 +#define INITIAL 2 -#ifndef YY_NO_UNISTD_H -/* Special case for "unistd.h", since it is non-ANSI. We include it way - * down here because we want the user's section 1 to have been scanned first. - * The user has a chance to override it with an option. - */ -#include -#endif +ZEND_DECLARE_MODULE_GLOBALS(phpdbg); -#ifndef YY_EXTRA_TYPE -#define YY_EXTRA_TYPE void * -#endif +void phpdbg_init_lexer (phpdbg_param_t *stack, char *input TSRMLS_DC) { + PHPDBG_G(parser_stack) = stack; -/* Holds the entire state of the reentrant scanner. */ -struct yyguts_t - { + YYSETCONDITION(INITIAL); - /* User-defined. Not touched by flex. */ - YY_EXTRA_TYPE yyextra_r; + LEX(text) = YYCURSOR = (unsigned char *) input; + LEX(len) = strlen(input); +} - /* The rest are the same as the globals declared in the non-reentrant scanner. */ - FILE *yyin_r, *yyout_r; - size_t yy_buffer_stack_top; /**< index of top of stack. */ - size_t yy_buffer_stack_max; /**< capacity of stack. */ - YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */ - char yy_hold_char; - yy_size_t yy_n_chars; - yy_size_t yyleng_r; - char *yy_c_buf_p; - int yy_init; - int yy_start; - int yy_did_buffer_switch_on_eof; - int yy_start_stack_ptr; - int yy_start_stack_depth; - int *yy_start_stack; - yy_state_type yy_last_accepting_state; - char* yy_last_accepting_cpos; +int phpdbg_lex (phpdbg_param_t* yylval) { + TSRMLS_FETCH(); /* Slow, but this is not a major problem here. TODO: Use TSRMLS_DC */ - int yylineno_r; - int yy_flex_debug_r; +restart: + LEX(text) = YYCURSOR; - yy_state_type *yy_state_buf; - yy_state_type *yy_state_ptr; - char *yy_full_match; - int yy_lp; - /* These are only needed for trailing context rules, - * but there's no conditional variable for that yet. */ - int yy_looking_for_trail_begin; - int yy_full_lp; - int *yy_full_state; - - char *yytext_r; - int yy_more_flag; - int yy_more_len; - - YYSTYPE * yylval_r; - - }; /* end struct yyguts_t */ - -static int yy_init_globals (yyscan_t yyscanner ); - - /* This must go here because YYSTYPE and YYLTYPE are included - * from bison output in section 1.*/ - # define yylval yyg->yylval_r - -int yylex_init (yyscan_t* scanner); - -int yylex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner); - -/* Accessor methods to globals. - These are made visible to non-reentrant scanners for convenience. */ - -int yylex_destroy (yyscan_t yyscanner ); - -int yyget_debug (yyscan_t yyscanner ); - -void yyset_debug (int debug_flag ,yyscan_t yyscanner ); - -YY_EXTRA_TYPE yyget_extra (yyscan_t yyscanner ); - -void yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner ); - -FILE *yyget_in (yyscan_t yyscanner ); - -void yyset_in (FILE * in_str ,yyscan_t yyscanner ); - -FILE *yyget_out (yyscan_t yyscanner ); - -void yyset_out (FILE * out_str ,yyscan_t yyscanner ); - -yy_size_t yyget_leng (yyscan_t yyscanner ); - -char *yyget_text (yyscan_t yyscanner ); - -int yyget_lineno (yyscan_t yyscanner ); - -void yyset_lineno (int line_number ,yyscan_t yyscanner ); - -int yyget_column (yyscan_t yyscanner ); - -void yyset_column (int column_no ,yyscan_t yyscanner ); - -YYSTYPE * yyget_lval (yyscan_t yyscanner ); - -void yyset_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner ); - -/* Macros after this point can all be overridden by user definitions in - * section 1. - */ - -#ifndef YY_SKIP_YYWRAP -#ifdef __cplusplus -extern "C" int yywrap (yyscan_t yyscanner ); -#else -extern int yywrap (yyscan_t yyscanner ); -#endif -#endif - - static void yyunput (int c,char *buf_ptr ,yyscan_t yyscanner); - -#ifndef yytext_ptr -static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner); -#endif - -#ifdef YY_NEED_STRLEN -static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner); -#endif - -#ifndef YY_NO_INPUT - -#ifdef __cplusplus -static int yyinput (yyscan_t yyscanner ); -#else -static int input (yyscan_t yyscanner ); -#endif - -#endif - -/* Amount of stuff to slurp up with each read. */ -#ifndef YY_READ_BUF_SIZE -#define YY_READ_BUF_SIZE 8192 -#endif - -/* Copy whatever the last rule matched to the standard output. */ -#ifndef ECHO -/* This used to be an fputs(), but since the string might contain NUL's, - * we now use fwrite(). - */ -#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0) -#endif - -/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, - * is returned in "result". - */ -#ifndef YY_INPUT -#define YY_INPUT(buf,result,max_size) \ - if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ - { \ - int c = '*'; \ - size_t n; \ - for ( n = 0; n < max_size && \ - (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ - buf[n] = (char) c; \ - if ( c == '\n' ) \ - buf[n++] = (char) c; \ - if ( c == EOF && ferror( yyin ) ) \ - YY_FATAL_ERROR( "input in flex scanner failed" ); \ - result = n; \ - } \ - else \ - { \ - errno=0; \ - while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \ - { \ - if( errno != EINTR) \ - { \ - YY_FATAL_ERROR( "input in flex scanner failed" ); \ - break; \ - } \ - errno=0; \ - clearerr(yyin); \ - } \ - }\ -\ - -#endif - -/* No semi-colon after return; correct usage is to write "yyterminate();" - - * we don't want an extra ';' after the "return" because that will cause - * some compilers to complain about unreachable statements. - */ -#ifndef yyterminate -#define yyterminate() return YY_NULL -#endif - -/* Number of entries by which start-condition stack grows. */ -#ifndef YY_START_STACK_INCR -#define YY_START_STACK_INCR 25 -#endif - -/* Report a fatal error. */ -#ifndef YY_FATAL_ERROR -#define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner) -#endif - -/* end tables serialization structures and prototypes */ - -/* Default declaration of generated scanner - a define so the user can - * easily add parameters. - */ -#ifndef YY_DECL -#define YY_DECL_IS_OURS 1 - -extern int yylex \ - (YYSTYPE * yylval_param ,yyscan_t yyscanner); - -#define YY_DECL int yylex \ - (YYSTYPE * yylval_param , yyscan_t yyscanner) -#endif /* !YY_DECL */ - -/* Code executed at the beginning of each rule, after yytext and yyleng - * have been set up. - */ -#ifndef YY_USER_ACTION -#define YY_USER_ACTION -#endif - -/* Code executed at the end of each rule. */ -#ifndef YY_BREAK -#define YY_BREAK break; -#endif - -#define YY_RULE_SETUP \ - YY_USER_ACTION - -/** The main scanner function which does all the work. - */ -YY_DECL +#line 48 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" { - register yy_state_type yy_current_state; - register char *yy_cp, *yy_bp; - register int yy_act; - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - -#line 44 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" - - -#line 882 "sapi/phpdbg/phpdbg_lexer.c" - - yylval = yylval_param; - - if ( !yyg->yy_init ) - { - yyg->yy_init = 1; - -#ifdef YY_USER_INIT - YY_USER_INIT; -#endif - - /* Create the reject buffer large enough to save one state per allowed character. */ - if ( ! yyg->yy_state_buf ) - yyg->yy_state_buf = (yy_state_type *)yyalloc(YY_STATE_BUF_SIZE ,yyscanner); - if ( ! yyg->yy_state_buf ) - YY_FATAL_ERROR( "out of dynamic memory in yylex()" ); - - if ( ! yyg->yy_start ) - yyg->yy_start = 1; /* first start state */ - - if ( ! yyin ) - yyin = stdin; - - if ( ! yyout ) - yyout = stdout; - - if ( ! YY_CURRENT_BUFFER ) { - yyensure_buffer_stack (yyscanner); - YY_CURRENT_BUFFER_LVALUE = - yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); + YYCTYPE yych; + unsigned int yyaccept = 0; + if (YYGETCONDITION() < 1) { + goto yyc_NORMAL; + } else { + if (YYGETCONDITION() < 2) { + goto yyc_RAW; + } else { + goto yyc_INITIAL; } + } +/* *********************************** */ +yyc_INITIAL: + { + static const unsigned char yybm[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 128, 128, 0, 0, 128, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 128, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }; - yy_load_buffer_state(yyscanner ); + YYDEBUG(0, *YYCURSOR); + YYFILL(3); + yych = *YYCURSOR; + if (yych <= 0x1F) { + if (yych <= '\n') { + if (yych <= 0x08) goto yy10; + if (yych >= '\n') goto yy4; + } else { + if (yych != '\r') goto yy10; + } + } else { + if (yych <= 'e') { + if (yych <= ' ') goto yy2; + if (yych <= 'd') goto yy10; + goto yy6; + } else { + if (yych <= 'q') goto yy10; + if (yych <= 'r') goto yy8; + if (yych <= 's') goto yy7; + goto yy10; + } } - - while ( 1 ) /* loops until end-of-file is reached */ +yy2: + YYDEBUG(2, *YYCURSOR); + ++YYCURSOR; + if (yybm[0+(yych = *YYCURSOR)] & 128) { + goto yy18; + } +yy3: + YYDEBUG(3, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 161 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" { - yy_cp = yyg->yy_c_buf_p; + YYSETCONDITION(NORMAL); - /* Support of yytext. */ - *yy_cp = yyg->yy_hold_char; + YYCURSOR = LEX(text); + goto restart; +} +#line 137 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy4: + YYDEBUG(4, *YYCURSOR); + ++YYCURSOR; + if (yybm[0+(yych = *YYCURSOR)] & 128) { + goto yy18; + } + YYDEBUG(5, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 68 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" + { + return 0; +} +#line 150 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy6: + YYDEBUG(6, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'v') goto yy16; + goto yy3; +yy7: + YYDEBUG(7, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'h') goto yy14; + goto yy3; +yy8: + YYDEBUG(8, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'u') goto yy11; +yy9: + YYDEBUG(9, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 155 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" + { + YYSETCONDITION(RAW); + phpdbg_init_param(yylval, EMPTY_PARAM); + return T_RUN; +} +#line 175 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy10: + YYDEBUG(10, *YYCURSOR); + yych = *++YYCURSOR; + goto yy3; +yy11: + YYDEBUG(11, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'n') goto yy13; + YYDEBUG(12, *YYCURSOR); + YYCURSOR = YYMARKER; + goto yy9; +yy13: + YYDEBUG(13, *YYCURSOR); + yych = *++YYCURSOR; + goto yy9; +yy14: + YYDEBUG(14, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(15, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 150 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" + { + YYSETCONDITION(RAW); + phpdbg_init_param(yylval, EMPTY_PARAM); + return T_SHELL; +} +#line 202 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy16: + YYDEBUG(16, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(17, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 145 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" + { + YYSETCONDITION(RAW); + phpdbg_init_param(yylval, EMPTY_PARAM); + return T_EVAL; +} +#line 214 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy18: + YYDEBUG(18, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(19, *YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy18; + } + YYDEBUG(20, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 139 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" + { + /* ignore whitespace */ - /* yy_bp points to the position in yy_ch_buf of the start of - * the current run. - */ - yy_bp = yy_cp; - - yy_current_state = yyg->yy_start; - - yyg->yy_state_ptr = yyg->yy_state_buf; - *yyg->yy_state_ptr++ = yy_current_state; - -yy_match: - do - { - register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 126 ) - yy_c = yy_meta[(unsigned int) yy_c]; + goto restart; +} +#line 232 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" + } +/* *********************************** */ +yyc_NORMAL: + { + static const unsigned char yybm[] = { + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 8, 8, 16, 16, 8, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 8, 16, 16, 0, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 48, 16, + 176, 176, 176, 176, 176, 176, 176, 176, + 176, 176, 0, 16, 16, 16, 16, 16, + 16, 208, 208, 208, 208, 208, 208, 80, + 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 16, 16, 16, 16, 16, + 16, 208, 208, 208, 208, 208, 208, 80, + 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + }; + YYDEBUG(21, *YYCURSOR); + YYFILL(11); + yych = *YYCURSOR; + if (yych <= 'Y') { + if (yych <= '"') { + if (yych <= '\f') { + if (yych <= 0x08) goto yy30; + if (yych <= '\t') goto yy23; + if (yych <= '\n') goto yy26; + goto yy30; + } else { + if (yych <= '\r') goto yy23; + if (yych != ' ') goto yy30; } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - *yyg->yy_state_ptr++ = yy_current_state; - ++yy_cp; - } - while ( yy_current_state != 125 ); - -yy_find_action: - yy_current_state = *--yyg->yy_state_ptr; - yyg->yy_lp = yy_accept[yy_current_state]; -find_rule: /* we branch to this label when backing up */ - for ( ; ; ) /* until we find what rule we matched */ - { - if ( yyg->yy_lp && yyg->yy_lp < yy_accept[yy_current_state + 1] ) - { - yy_act = yy_acclist[yyg->yy_lp]; - { - yyg->yy_full_match = yy_cp; - break; - } + } else { + if (yych <= '/') { + if (yych <= '#') goto yy45; + if (yych == '.') goto yy32; + goto yy30; + } else { + if (yych <= '0') goto yy35; + if (yych <= '9') goto yy32; + if (yych <= ':') goto yy47; + goto yy30; } - --yy_cp; - yy_current_state = *--yyg->yy_state_ptr; - yyg->yy_lp = yy_accept[yy_current_state]; } + } else { + if (yych <= 'm') { + if (yych <= 'e') { + if (yych <= 'Z') goto yy36; + if (yych <= 'c') goto yy30; + if (yych <= 'd') goto yy37; + goto yy38; + } else { + if (yych <= 'f') goto yy39; + if (yych == 'i') goto yy28; + goto yy30; + } + } else { + if (yych <= 't') { + if (yych <= 'n') goto yy40; + if (yych <= 'o') goto yy41; + if (yych <= 's') goto yy30; + goto yy42; + } else { + if (yych <= 'x') goto yy30; + if (yych <= 'y') goto yy43; + if (yych <= 'z') goto yy44; + goto yy30; + } + } + } +yy23: + YYDEBUG(23, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(24, *YYCURSOR); + if (yybm[0+yych] & 8) { + goto yy23; + } + YYDEBUG(25, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 139 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" + { + /* ignore whitespace */ - YY_DO_BEFORE_ACTION; - -do_action: /* This label is used only to access EOF actions. */ - - switch ( yy_act ) - { /* beginning of action switch */ - -case 1: -YY_RULE_SETUP -#line 47 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" -{ - BEGIN(RAW); - phpdbg_init_param(yylval, EMPTY_PARAM); - return T_EVAL; - } - YY_BREAK -case 2: -YY_RULE_SETUP -#line 52 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" -{ - BEGIN(RAW); - phpdbg_init_param(yylval, EMPTY_PARAM); - return T_SHELL; - } - YY_BREAK -case 3: -YY_RULE_SETUP -#line 57 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" -{ - BEGIN(RAW); - phpdbg_init_param(yylval, EMPTY_PARAM); - return T_RUN; - } - YY_BREAK -case 4: -YY_RULE_SETUP -#line 63 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" -{ - BEGIN(NORMAL); - REJECT; - } - YY_BREAK - - -case 5: -YY_RULE_SETUP -#line 70 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" -{ - BEGIN(RAW); - phpdbg_init_param(yylval, EMPTY_PARAM); - return T_IF; - } - YY_BREAK - - -case 6: -YY_RULE_SETUP -#line 78 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" -{ - phpdbg_init_param(yylval, STR_PARAM); - yylval->str = zend_strndup(yytext, yyleng); - yylval->len = yyleng; - return T_PROTO; - } - YY_BREAK -case 7: -YY_RULE_SETUP -#line 84 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" -{ return T_POUND; } - YY_BREAK -case 8: -YY_RULE_SETUP -#line 85 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" -{ return T_DCOLON; } - YY_BREAK -case 9: -YY_RULE_SETUP -#line 86 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" -{ return T_COLON; } - YY_BREAK -case 10: -YY_RULE_SETUP -#line 88 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" -{ - phpdbg_init_param(yylval, NUMERIC_PARAM); - yylval->num = 1; - return T_TRUTHY; - } - YY_BREAK -case 11: -YY_RULE_SETUP -#line 93 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" -{ - phpdbg_init_param(yylval, NUMERIC_PARAM); - yylval->num = 0; - return T_FALSY; - } - YY_BREAK -case 12: -YY_RULE_SETUP -#line 98 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" -{ - phpdbg_init_param(yylval, NUMERIC_PARAM); - yylval->num = atoi(yytext); - return T_DIGITS; - } - YY_BREAK -case 13: -YY_RULE_SETUP -#line 103 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" -{ - phpdbg_init_param(yylval, ADDR_PARAM); - yylval->addr = strtoul(yytext, 0, 16); - return T_ADDR; - } - YY_BREAK -case 14: -YY_RULE_SETUP -#line 108 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" -{ - phpdbg_init_param(yylval, OP_PARAM); - yylval->str = zend_strndup(yytext, yyleng); - yylval->len = yyleng; - return T_OPCODE; - } - YY_BREAK -case 15: -YY_RULE_SETUP -#line 114 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" -{ - phpdbg_init_param(yylval, STR_PARAM); - yylval->str = zend_strndup(yytext, yyleng); - yylval->len = yyleng; - return T_ID; - } - YY_BREAK - -case 16: -YY_RULE_SETUP -#line 122 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" -{ + goto restart; +} +#line 340 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy26: + YYDEBUG(26, *YYCURSOR); + ++YYCURSOR; + if (yybm[0+(yych = *YYCURSOR)] & 8) { + goto yy23; + } + YYDEBUG(27, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 68 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" + { + return 0; +} +#line 353 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy28: + YYDEBUG(28, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'f') goto yy92; + goto yy31; +yy29: + YYDEBUG(29, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 125 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" + { + phpdbg_init_param(yylval, STR_PARAM); + yylval->str = zend_strndup(yytext, yyleng); + yylval->len = yyleng; + return T_ID; +} +#line 370 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy30: + YYDEBUG(30, *YYCURSOR); + yyaccept = 0; + YYMARKER = ++YYCURSOR; + YYFILL(3); + yych = *YYCURSOR; +yy31: + YYDEBUG(31, *YYCURSOR); + if (yybm[0+yych] & 16) { + goto yy30; + } + if (yych <= '9') goto yy29; + goto yy52; +yy32: + YYDEBUG(32, *YYCURSOR); + yyaccept = 1; + YYMARKER = ++YYCURSOR; + YYFILL(3); + yych = *YYCURSOR; + YYDEBUG(33, *YYCURSOR); + if (yybm[0+yych] & 32) { + goto yy32; + } + if (yych <= 0x1F) { + if (yych <= '\n') { + if (yych <= 0x08) goto yy30; + } else { + if (yych != '\r') goto yy30; + } + } else { + if (yych <= '#') { + if (yych <= ' ') goto yy34; + if (yych <= '"') goto yy30; + } else { + if (yych == ':') goto yy52; + goto yy30; + } + } +yy34: + YYDEBUG(34, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 106 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" + { + phpdbg_init_param(yylval, NUMERIC_PARAM); + yylval->num = atoi(yytext); + return T_DIGITS; +} +#line 418 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy35: + YYDEBUG(35, *YYCURSOR); + yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + if (yybm[0+yych] & 32) { + goto yy32; + } + if (yych <= 0x1F) { + if (yych <= '\n') { + if (yych <= 0x08) goto yy31; + goto yy34; + } else { + if (yych == '\r') goto yy34; + goto yy31; + } + } else { + if (yych <= '#') { + if (yych <= ' ') goto yy34; + if (yych <= '"') goto yy31; + goto yy34; + } else { + if (yych == 'x') goto yy88; + goto yy31; + } + } +yy36: + YYDEBUG(36, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'E') goto yy85; + goto yy31; +yy37: + YYDEBUG(37, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'i') goto yy79; + goto yy31; +yy38: + YYDEBUG(38, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'n') goto yy74; + goto yy31; +yy39: + YYDEBUG(39, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'a') goto yy71; + goto yy31; +yy40: + YYDEBUG(40, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'o') goto yy69; + goto yy31; +yy41: + YYDEBUG(41, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'f') goto yy68; + if (yych == 'n') goto yy64; + goto yy31; +yy42: + YYDEBUG(42, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'r') goto yy66; + goto yy31; +yy43: + YYDEBUG(43, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'e') goto yy63; + goto yy31; +yy44: + YYDEBUG(44, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'e') goto yy51; + goto yy31; +yy45: + YYDEBUG(45, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(46, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 84 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" + { + return T_POUND; +} +#line 508 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy47: + YYDEBUG(47, *YYCURSOR); + ++YYCURSOR; + if ((yych = *YYCURSOR) == ':') goto yy49; + YYDEBUG(48, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 90 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" + { + return T_COLON; +} +#line 519 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy49: + YYDEBUG(49, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(50, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 87 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" + { + return T_DCOLON; +} +#line 529 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy51: + YYDEBUG(51, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'n') goto yy57; + goto yy31; +yy52: + YYDEBUG(52, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '/') goto yy54; +yy53: + YYDEBUG(53, *YYCURSOR); + YYCURSOR = YYMARKER; + if (yyaccept <= 3) { + if (yyaccept <= 1) { + if (yyaccept <= 0) { + goto yy29; + } else { + goto yy34; + } + } else { + if (yyaccept <= 2) { + goto yy62; + } else { + goto yy65; + } + } + } else { + if (yyaccept <= 5) { + if (yyaccept <= 4) { + goto yy70; + } else { + goto yy91; + } + } else { + goto yy93; + } + } +yy54: + YYDEBUG(54, *YYCURSOR); + yych = *++YYCURSOR; + if (yych != '/') goto yy53; + YYDEBUG(55, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(56, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 78 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" + { + phpdbg_init_param(yylval, STR_PARAM); + yylval->str = zend_strndup(yytext, yyleng); + yylval->len = yyleng; + return T_PROTO; +} +#line 583 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy57: + YYDEBUG(57, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != 'd') goto yy31; + YYDEBUG(58, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != '_') goto yy31; +yy59: + YYDEBUG(59, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yybm[0+yych] & 64) { + goto yy60; + } + goto yy31; +yy60: + YYDEBUG(60, *YYCURSOR); + yyaccept = 2; + YYMARKER = ++YYCURSOR; + YYFILL(3); + yych = *YYCURSOR; + YYDEBUG(61, *YYCURSOR); + if (yybm[0+yych] & 64) { + goto yy60; + } + if (yych <= 0x1F) { + if (yych <= '\n') { + if (yych <= 0x08) goto yy30; + } else { + if (yych != '\r') goto yy30; + } + } else { + if (yych <= '#') { + if (yych <= ' ') goto yy62; + if (yych <= '"') goto yy30; + } else { + if (yych == ':') goto yy52; + goto yy30; + } + } +yy62: + YYDEBUG(62, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 118 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" + { + phpdbg_init_param(yylval, OP_PARAM); + yylval->str = zend_strndup(yytext, yyleng); + yylval->len = yyleng; + return T_OPCODE; +} +#line 636 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy63: + YYDEBUG(63, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != 's') goto yy31; +yy64: + YYDEBUG(64, *YYCURSOR); + yyaccept = 3; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '\r') { + if (yych <= 0x08) goto yy31; + if (yych <= '\n') goto yy65; + if (yych <= '\f') goto yy31; + } else { + if (yych <= ' ') { + if (yych <= 0x1F) goto yy31; + } else { + if (yych != '#') goto yy31; + } + } +yy65: + YYDEBUG(65, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 94 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" + { + phpdbg_init_param(yylval, NUMERIC_PARAM); + yylval->num = 1; + return T_TRUTHY; +} +#line 666 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy66: + YYDEBUG(66, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != 'u') goto yy31; + YYDEBUG(67, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'e') goto yy64; + goto yy31; +yy68: + YYDEBUG(68, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != 'f') goto yy31; +yy69: + YYDEBUG(69, *YYCURSOR); + yyaccept = 4; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '\r') { + if (yych <= 0x08) goto yy31; + if (yych <= '\n') goto yy70; + if (yych <= '\f') goto yy31; + } else { + if (yych <= ' ') { + if (yych <= 0x1F) goto yy31; + } else { + if (yych != '#') goto yy31; + } + } +yy70: + YYDEBUG(70, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 100 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" + { + phpdbg_init_param(yylval, NUMERIC_PARAM); + yylval->num = 0; + return T_FALSY; +} +#line 706 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy71: + YYDEBUG(71, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != 'l') goto yy31; + YYDEBUG(72, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != 's') goto yy31; + YYDEBUG(73, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'e') goto yy69; + goto yy31; +yy74: + YYDEBUG(74, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != 'a') goto yy31; + YYDEBUG(75, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != 'b') goto yy31; + YYDEBUG(76, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != 'l') goto yy31; + YYDEBUG(77, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != 'e') goto yy31; + YYDEBUG(78, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'd') goto yy64; + goto yy31; +yy79: + YYDEBUG(79, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != 's') goto yy31; + YYDEBUG(80, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != 'a') goto yy31; + YYDEBUG(81, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != 'b') goto yy31; + YYDEBUG(82, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != 'l') goto yy31; + YYDEBUG(83, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != 'e') goto yy31; + YYDEBUG(84, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'd') goto yy69; + goto yy31; +yy85: + YYDEBUG(85, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != 'N') goto yy31; + YYDEBUG(86, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != 'D') goto yy31; + YYDEBUG(87, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == '_') goto yy59; + goto yy31; +yy88: + YYDEBUG(88, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy89; + } + goto yy31; +yy89: + YYDEBUG(89, *YYCURSOR); + yyaccept = 5; + YYMARKER = ++YYCURSOR; + YYFILL(3); + yych = *YYCURSOR; + YYDEBUG(90, *YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy89; + } + if (yych <= 0x1F) { + if (yych <= '\n') { + if (yych <= 0x08) goto yy30; + } else { + if (yych != '\r') goto yy30; + } + } else { + if (yych <= '#') { + if (yych <= ' ') goto yy91; + if (yych <= '"') goto yy30; + } else { + if (yych == ':') goto yy52; + goto yy30; + } + } +yy91: + YYDEBUG(91, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 112 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" + { + phpdbg_init_param(yylval, ADDR_PARAM); + yylval->addr = strtoul(yytext, 0, 16); + return T_ADDR; +} +#line 825 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy92: + YYDEBUG(92, *YYCURSOR); + yyaccept = 6; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '\r') { + if (yych <= 0x08) goto yy31; + if (yych <= '\n') goto yy93; + if (yych <= '\f') goto yy31; + } else { + if (yych <= ' ') { + if (yych <= 0x1F) goto yy31; + } else { + if (yych != '#') goto yy31; + } + } +yy93: + YYDEBUG(93, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 72 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" + { + YYSETCONDITION(RAW); + phpdbg_init_param(yylval, EMPTY_PARAM); + return T_IF; +} +#line 850 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" + } +/* *********************************** */ +yyc_RAW: + { + static const unsigned char yybm[] = { + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 224, 128, 64, 64, 224, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 224, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + }; + YYDEBUG(94, *YYCURSOR); + YYFILL(2); + yych = *YYCURSOR; + if (yybm[0+yych] & 32) { + goto yy96; + } + if (yych == '\n') goto yy99; + goto yy101; +yy96: + YYDEBUG(96, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(97, *YYCURSOR); + if (yybm[0+yych] & 32) { + goto yy96; + } + if (yych == '\n') goto yy103; + goto yy101; +yy98: + YYDEBUG(98, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 132 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" + { phpdbg_init_param(yylval, STR_PARAM); yylval->str = zend_strndup(yytext, yyleng); yylval->len = yyleng; - BEGIN(INITIAL); return T_INPUT; } - YY_BREAK -case 17: -/* rule 17 can match eol */ -YY_RULE_SETUP -#line 130 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" -{ /* ignore whitespace */ } - YY_BREAK -case 18: -YY_RULE_SETUP -#line 131 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" -YY_FATAL_ERROR( "flex scanner jammed" ); - YY_BREAK -#line 1129 "sapi/phpdbg/phpdbg_lexer.c" - case YY_STATE_EOF(INITIAL): - case YY_STATE_EOF(RAW): - case YY_STATE_EOF(NORMAL): - yyterminate(); - - case YY_END_OF_BUFFER: +#line 918 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy99: + YYDEBUG(99, *YYCURSOR); + ++YYCURSOR; + if (yybm[0+(yych = *YYCURSOR)] & 128) { + goto yy103; + } + YYDEBUG(100, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 68 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" { - /* Amount of text matched not including the EOB char. */ - int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1; - - /* Undo the effects of YY_DO_BEFORE_ACTION. */ - *yy_cp = yyg->yy_hold_char; - YY_RESTORE_YY_MORE_OFFSET - - if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) - { - /* We're scanning a new file or input source. It's - * possible that this happened because the user - * just pointed yyin at a new source and called - * yylex(). If so, then we have to assure - * consistency between YY_CURRENT_BUFFER and our - * globals. Here is the right place to do so, because - * this is the first action (other than possibly a - * back-up) that will match for the new input source. - */ - yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; - YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; - YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; - } - - /* Note that here we test for yy_c_buf_p "<=" to the position - * of the first EOB in the buffer, since yy_c_buf_p will - * already have been incremented past the NUL character - * (since all states make transitions on EOB to the - * end-of-buffer state). Contrast this with the test - * in input(). - */ - if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) - { /* This was really a NUL. */ - yy_state_type yy_next_state; - - yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; - - yy_current_state = yy_get_previous_state( yyscanner ); - - /* Okay, we're now positioned to make the NUL - * transition. We couldn't have - * yy_get_previous_state() go ahead and do it - * for us because it doesn't know how to deal - * with the possibility of jamming (and we don't - * want to build jamming into it because then it - * will run more slowly). - */ - - yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner); - - yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; - - if ( yy_next_state ) - { - /* Consume the NUL. */ - yy_cp = ++yyg->yy_c_buf_p; - yy_current_state = yy_next_state; - goto yy_match; - } - - else - { - yy_cp = yyg->yy_c_buf_p; - goto yy_find_action; - } - } - - else switch ( yy_get_next_buffer( yyscanner ) ) - { - case EOB_ACT_END_OF_FILE: - { - yyg->yy_did_buffer_switch_on_eof = 0; - - if ( yywrap(yyscanner ) ) - { - /* Note: because we've taken care in - * yy_get_next_buffer() to have set up - * yytext, we can now set up - * yy_c_buf_p so that if some total - * hoser (like flex itself) wants to - * call the scanner after we return the - * YY_NULL, it'll still work - another - * YY_NULL will get returned. - */ - yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ; - - yy_act = YY_STATE_EOF(YY_START); - goto do_action; - } - - else - { - if ( ! yyg->yy_did_buffer_switch_on_eof ) - YY_NEW_FILE; - } - break; - } - - case EOB_ACT_CONTINUE_SCAN: - yyg->yy_c_buf_p = - yyg->yytext_ptr + yy_amount_of_matched_text; - - yy_current_state = yy_get_previous_state( yyscanner ); - - yy_cp = yyg->yy_c_buf_p; - yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; - goto yy_match; - - case EOB_ACT_LAST_MATCH: - yyg->yy_c_buf_p = - &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars]; - - yy_current_state = yy_get_previous_state( yyscanner ); - - yy_cp = yyg->yy_c_buf_p; - yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; - goto yy_find_action; - } - break; + return 0; +} +#line 931 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy101: + YYDEBUG(101, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(102, *YYCURSOR); + if (yybm[0+yych] & 64) { + goto yy101; } - - default: - YY_FATAL_ERROR( - "fatal flex scanner internal error--no action found" ); - } /* end of action switch */ - } /* end of scanning one token */ -} /* end of yylex */ - -/* yy_get_next_buffer - try to read in a new buffer - * - * Returns a code representing an action: - * EOB_ACT_LAST_MATCH - - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position - * EOB_ACT_END_OF_FILE - end of file - */ -static int yy_get_next_buffer (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; - register char *source = yyg->yytext_ptr; - register int number_to_move, i; - int ret_val; - - if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] ) - YY_FATAL_ERROR( - "fatal flex scanner internal error--end of buffer missed" ); - - if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) - { /* Don't try to fill the buffer, so this is an EOF. */ - if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 ) - { - /* We matched a single character, the EOB, so - * treat this as a final EOF. - */ - return EOB_ACT_END_OF_FILE; - } - - else - { - /* We matched some text prior to the EOB, first - * process it. - */ - return EOB_ACT_LAST_MATCH; - } + goto yy98; +yy103: + YYDEBUG(103, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(104, *YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy103; } - - /* Try to read more data. */ - - /* First move last chars to start of buffer. */ - number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1; - - for ( i = 0; i < number_to_move; ++i ) - *(dest++) = *(source++); - - if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) - /* don't do the read, it's not guaranteed to return an EOF, - * just force an EOF - */ - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0; - - else + YYDEBUG(105, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 139 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" { - yy_size_t num_to_read = - YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + /* ignore whitespace */ - while ( num_to_read <= 0 ) - { /* Not enough room in the buffer - grow it. */ - - YY_FATAL_ERROR( -"input buffer overflow, can't enlarge buffer because scanner uses REJECT" ); - - } - - if ( num_to_read > YY_READ_BUF_SIZE ) - num_to_read = YY_READ_BUF_SIZE; - - /* Read in more data. */ - YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), - yyg->yy_n_chars, num_to_read ); - - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; - } - - if ( yyg->yy_n_chars == 0 ) - { - if ( number_to_move == YY_MORE_ADJ ) - { - ret_val = EOB_ACT_END_OF_FILE; - yyrestart(yyin ,yyscanner); - } - - else - { - ret_val = EOB_ACT_LAST_MATCH; - YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = - YY_BUFFER_EOF_PENDING; - } - } - - else - ret_val = EOB_ACT_CONTINUE_SCAN; - - if ((yy_size_t) (yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { - /* Extend the array by 50%, plus the number we really need. */ - yy_size_t new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1); - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ,yyscanner ); - if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) - YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); - } - - yyg->yy_n_chars += number_to_move; - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR; - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; - - yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; - - return ret_val; + goto restart; } - -/* yy_get_previous_state - get the state just before the EOB char was reached */ - - static yy_state_type yy_get_previous_state (yyscan_t yyscanner) -{ - register yy_state_type yy_current_state; - register char *yy_cp; - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - yy_current_state = yyg->yy_start; - - yyg->yy_state_ptr = yyg->yy_state_buf; - *yyg->yy_state_ptr++ = yy_current_state; - - for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp ) - { - register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 126 ) - yy_c = yy_meta[(unsigned int) yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - *yyg->yy_state_ptr++ = yy_current_state; - } - - return yy_current_state; -} - -/* yy_try_NUL_trans - try to make a transition on the NUL character - * - * synopsis - * next_state = yy_try_NUL_trans( current_state ); - */ - static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner) -{ - register int yy_is_jam; - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */ - - register YY_CHAR yy_c = 1; - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 126 ) - yy_c = yy_meta[(unsigned int) yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 125); - if ( ! yy_is_jam ) - *yyg->yy_state_ptr++ = yy_current_state; - - (void)yyg; - return yy_is_jam ? 0 : yy_current_state; -} - - static void yyunput (int c, register char * yy_bp , yyscan_t yyscanner) -{ - register char *yy_cp; - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - yy_cp = yyg->yy_c_buf_p; - - /* undo effects of setting up yytext */ - *yy_cp = yyg->yy_hold_char; - - if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) - { /* need to shift things up to make room */ - /* +2 for EOB chars. */ - register yy_size_t number_to_move = yyg->yy_n_chars + 2; - register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ - YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; - register char *source = - &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; - - while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) - *--dest = *--source; - - yy_cp += (int) (dest - source); - yy_bp += (int) (dest - source); - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = - yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; - - if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) - YY_FATAL_ERROR( "flex scanner push-back overflow" ); - } - - *--yy_cp = (char) c; - - yyg->yytext_ptr = yy_bp; - yyg->yy_hold_char = *yy_cp; - yyg->yy_c_buf_p = yy_cp; -} - -#ifndef YY_NO_INPUT -#ifdef __cplusplus - static int yyinput (yyscan_t yyscanner) -#else - static int input (yyscan_t yyscanner) -#endif - -{ - int c; - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - *yyg->yy_c_buf_p = yyg->yy_hold_char; - - if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) - { - /* yy_c_buf_p now points to the character we want to return. - * If this occurs *before* the EOB characters, then it's a - * valid NUL; if not, then we've hit the end of the buffer. - */ - if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) - /* This was really a NUL. */ - *yyg->yy_c_buf_p = '\0'; - - else - { /* need more input */ - yy_size_t offset = yyg->yy_c_buf_p - yyg->yytext_ptr; - ++yyg->yy_c_buf_p; - - switch ( yy_get_next_buffer( yyscanner ) ) - { - case EOB_ACT_LAST_MATCH: - /* This happens because yy_g_n_b() - * sees that we've accumulated a - * token and flags that we need to - * try matching the token before - * proceeding. But for input(), - * there's no matching to consider. - * So convert the EOB_ACT_LAST_MATCH - * to EOB_ACT_END_OF_FILE. - */ - - /* Reset buffer status. */ - yyrestart(yyin ,yyscanner); - - /*FALLTHROUGH*/ - - case EOB_ACT_END_OF_FILE: - { - if ( yywrap(yyscanner ) ) - return EOF; - - if ( ! yyg->yy_did_buffer_switch_on_eof ) - YY_NEW_FILE; -#ifdef __cplusplus - return yyinput(yyscanner); -#else - return input(yyscanner); -#endif - } - - case EOB_ACT_CONTINUE_SCAN: - yyg->yy_c_buf_p = yyg->yytext_ptr + offset; - break; - } - } - } - - c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */ - *yyg->yy_c_buf_p = '\0'; /* preserve yytext */ - yyg->yy_hold_char = *++yyg->yy_c_buf_p; - - return c; -} -#endif /* ifndef YY_NO_INPUT */ - -/** Immediately switch to a different input stream. - * @param input_file A readable stream. - * @param yyscanner The scanner object. - * @note This function does not reset the start condition to @c INITIAL . - */ - void yyrestart (FILE * input_file , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - if ( ! YY_CURRENT_BUFFER ){ - yyensure_buffer_stack (yyscanner); - YY_CURRENT_BUFFER_LVALUE = - yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); - } - - yy_init_buffer(YY_CURRENT_BUFFER,input_file ,yyscanner); - yy_load_buffer_state(yyscanner ); -} - -/** Switch to a different input buffer. - * @param new_buffer The new input buffer. - * @param yyscanner The scanner object. - */ - void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - /* TODO. We should be able to replace this entire function body - * with - * yypop_buffer_state(); - * yypush_buffer_state(new_buffer); - */ - yyensure_buffer_stack (yyscanner); - if ( YY_CURRENT_BUFFER == new_buffer ) - return; - - if ( YY_CURRENT_BUFFER ) - { - /* Flush out information for old buffer. */ - *yyg->yy_c_buf_p = yyg->yy_hold_char; - YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; - } - - YY_CURRENT_BUFFER_LVALUE = new_buffer; - yy_load_buffer_state(yyscanner ); - - /* We don't actually know whether we did this switch during - * EOF (yywrap()) processing, but the only time this flag - * is looked at is after yywrap() is called, so it's safe - * to go ahead and always set it. - */ - yyg->yy_did_buffer_switch_on_eof = 1; -} - -static void yy_load_buffer_state (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; - yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; - yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; - yyg->yy_hold_char = *yyg->yy_c_buf_p; -} - -/** Allocate and initialize an input buffer state. - * @param file A readable stream. - * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. - * @param yyscanner The scanner object. - * @return the allocated buffer state. - */ - YY_BUFFER_STATE yy_create_buffer (FILE * file, int size , yyscan_t yyscanner) -{ - YY_BUFFER_STATE b; - - b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner ); - if ( ! b ) - YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); - - b->yy_buf_size = size; - - /* yy_ch_buf has to be 2 characters longer than the size given because - * we need to put in 2 end-of-buffer characters. - */ - b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 ,yyscanner ); - if ( ! b->yy_ch_buf ) - YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); - - b->yy_is_our_buffer = 1; - - yy_init_buffer(b,file ,yyscanner); - - return b; -} - -/** Destroy the buffer. - * @param b a buffer created with yy_create_buffer() - * @param yyscanner The scanner object. - */ - void yy_delete_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - if ( ! b ) - return; - - if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ - YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; - - if ( b->yy_is_our_buffer ) - yyfree((void *) b->yy_ch_buf ,yyscanner ); - - yyfree((void *) b ,yyscanner ); -} - -/* Initializes or reinitializes a buffer. - * This function is sometimes called more than once on the same buffer, - * such as during a yyrestart() or at EOF. - */ - static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file , yyscan_t yyscanner) - -{ - int oerrno = errno; - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - yy_flush_buffer(b ,yyscanner); - - b->yy_input_file = file; - b->yy_fill_buffer = 1; - - /* If b is the current buffer, then yy_init_buffer was _probably_ - * called from yyrestart() or through yy_get_next_buffer. - * In that case, we don't want to reset the lineno or column. - */ - if (b != YY_CURRENT_BUFFER){ - b->yy_bs_lineno = 1; - b->yy_bs_column = 0; - } - - b->yy_is_interactive = 0; - - errno = oerrno; -} - -/** Discard all buffered characters. On the next scan, YY_INPUT will be called. - * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. - * @param yyscanner The scanner object. - */ - void yy_flush_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - if ( ! b ) - return; - - b->yy_n_chars = 0; - - /* We always need two end-of-buffer characters. The first causes - * a transition to the end-of-buffer state. The second causes - * a jam in that state. - */ - b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; - b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; - - b->yy_buf_pos = &b->yy_ch_buf[0]; - - b->yy_at_bol = 1; - b->yy_buffer_status = YY_BUFFER_NEW; - - if ( b == YY_CURRENT_BUFFER ) - yy_load_buffer_state(yyscanner ); -} - -/** Pushes the new state onto the stack. The new state becomes - * the current state. This function will allocate the stack - * if necessary. - * @param new_buffer The new state. - * @param yyscanner The scanner object. - */ -void yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - if (new_buffer == NULL) - return; - - yyensure_buffer_stack(yyscanner); - - /* This block is copied from yy_switch_to_buffer. */ - if ( YY_CURRENT_BUFFER ) - { - /* Flush out information for old buffer. */ - *yyg->yy_c_buf_p = yyg->yy_hold_char; - YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; - } - - /* Only push if top exists. Otherwise, replace top. */ - if (YY_CURRENT_BUFFER) - yyg->yy_buffer_stack_top++; - YY_CURRENT_BUFFER_LVALUE = new_buffer; - - /* copied from yy_switch_to_buffer. */ - yy_load_buffer_state(yyscanner ); - yyg->yy_did_buffer_switch_on_eof = 1; -} - -/** Removes and deletes the top of the stack, if present. - * The next element becomes the new top. - * @param yyscanner The scanner object. - */ -void yypop_buffer_state (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - if (!YY_CURRENT_BUFFER) - return; - - yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner); - YY_CURRENT_BUFFER_LVALUE = NULL; - if (yyg->yy_buffer_stack_top > 0) - --yyg->yy_buffer_stack_top; - - if (YY_CURRENT_BUFFER) { - yy_load_buffer_state(yyscanner ); - yyg->yy_did_buffer_switch_on_eof = 1; +#line 959 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" } } +#line 168 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" -/* Allocates the stack if it does not exist. - * Guarantees space for at least one push. - */ -static void yyensure_buffer_stack (yyscan_t yyscanner) -{ - yy_size_t num_to_alloc; - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - if (!yyg->yy_buffer_stack) { - - /* First allocation is just for 2 elements, since we don't know if this - * scanner will even need a stack. We use 2 instead of 1 to avoid an - * immediate realloc on the next call. - */ - num_to_alloc = 1; - yyg->yy_buffer_stack = (struct yy_buffer_state**)yyalloc - (num_to_alloc * sizeof(struct yy_buffer_state*) - , yyscanner); - if ( ! yyg->yy_buffer_stack ) - YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); - - memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*)); - - yyg->yy_buffer_stack_max = num_to_alloc; - yyg->yy_buffer_stack_top = 0; - return; - } - - if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){ - - /* Increase the buffer to prepare for a possible push. */ - int grow_size = 8 /* arbitrary grow size */; - - num_to_alloc = yyg->yy_buffer_stack_max + grow_size; - yyg->yy_buffer_stack = (struct yy_buffer_state**)yyrealloc - (yyg->yy_buffer_stack, - num_to_alloc * sizeof(struct yy_buffer_state*) - , yyscanner); - if ( ! yyg->yy_buffer_stack ) - YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); - - /* zero only the new slots.*/ - memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*)); - yyg->yy_buffer_stack_max = num_to_alloc; - } } - -/** Setup the input buffer state to scan directly from a user-specified character buffer. - * @param base the character buffer - * @param size the size in bytes of the character buffer - * @param yyscanner The scanner object. - * @return the newly allocated buffer state object. - */ -YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size , yyscan_t yyscanner) -{ - YY_BUFFER_STATE b; - - if ( size < 2 || - base[size-2] != YY_END_OF_BUFFER_CHAR || - base[size-1] != YY_END_OF_BUFFER_CHAR ) - /* They forgot to leave room for the EOB's. */ - return 0; - - b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner ); - if ( ! b ) - YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); - - b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ - b->yy_buf_pos = b->yy_ch_buf = base; - b->yy_is_our_buffer = 0; - b->yy_input_file = 0; - b->yy_n_chars = b->yy_buf_size; - b->yy_is_interactive = 0; - b->yy_at_bol = 1; - b->yy_fill_buffer = 0; - b->yy_buffer_status = YY_BUFFER_NEW; - - yy_switch_to_buffer(b ,yyscanner ); - - return b; -} - -/** Setup the input buffer state to scan a string. The next call to yylex() will - * scan from a @e copy of @a str. - * @param yystr a NUL-terminated string to scan - * @param yyscanner The scanner object. - * @return the newly allocated buffer state object. - * @note If you want to scan bytes that may contain NUL values, then use - * yy_scan_bytes() instead. - */ -YY_BUFFER_STATE yy_scan_string (yyconst char * yystr , yyscan_t yyscanner) -{ - - return yy_scan_bytes(yystr,strlen(yystr) ,yyscanner); -} - -/** Setup the input buffer state to scan the given bytes. The next call to yylex() will - * scan from a @e copy of @a bytes. - * @param yybytes the byte buffer to scan - * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. - * @param yyscanner The scanner object. - * @return the newly allocated buffer state object. - */ -YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len , yyscan_t yyscanner) -{ - YY_BUFFER_STATE b; - char *buf; - yy_size_t n; - yy_size_t i; - - /* Get memory for full buffer, including space for trailing EOB's. */ - n = _yybytes_len + 2; - buf = (char *) yyalloc(n ,yyscanner ); - if ( ! buf ) - YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); - - for ( i = 0; i < _yybytes_len; ++i ) - buf[i] = yybytes[i]; - - buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; - - b = yy_scan_buffer(buf,n ,yyscanner); - if ( ! b ) - YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); - - /* It's okay to grow etc. this buffer, and we should throw it - * away when we're done. - */ - b->yy_is_our_buffer = 1; - - return b; -} - -#ifndef YY_EXIT_FAILURE -#define YY_EXIT_FAILURE 2 -#endif - -static void yy_fatal_error (yyconst char* msg , yyscan_t yyscanner) -{ - (void) fprintf( stderr, "%s\n", msg ); - exit( YY_EXIT_FAILURE ); -} - -/* Redefine yyless() so it works in section 3 code. */ - -#undef yyless -#define yyless(n) \ - do \ - { \ - /* Undo effects of setting up yytext. */ \ - int yyless_macro_arg = (n); \ - YY_LESS_LINENO(yyless_macro_arg);\ - yytext[yyleng] = yyg->yy_hold_char; \ - yyg->yy_c_buf_p = yytext + yyless_macro_arg; \ - yyg->yy_hold_char = *yyg->yy_c_buf_p; \ - *yyg->yy_c_buf_p = '\0'; \ - yyleng = yyless_macro_arg; \ - } \ - while ( 0 ) - -/* Accessor methods (get/set functions) to struct members. */ - -/** Get the user-defined data for this scanner. - * @param yyscanner The scanner object. - */ -YY_EXTRA_TYPE yyget_extra (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - return yyextra; -} - -/** Get the current line number. - * @param yyscanner The scanner object. - */ -int yyget_lineno (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - if (! YY_CURRENT_BUFFER) - return 0; - - return yylineno; -} - -/** Get the current column number. - * @param yyscanner The scanner object. - */ -int yyget_column (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - if (! YY_CURRENT_BUFFER) - return 0; - - return yycolumn; -} - -/** Get the input stream. - * @param yyscanner The scanner object. - */ -FILE *yyget_in (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - return yyin; -} - -/** Get the output stream. - * @param yyscanner The scanner object. - */ -FILE *yyget_out (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - return yyout; -} - -/** Get the length of the current token. - * @param yyscanner The scanner object. - */ -yy_size_t yyget_leng (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - return yyleng; -} - -/** Get the current token. - * @param yyscanner The scanner object. - */ - -char *yyget_text (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - return yytext; -} - -/** Set the user-defined data. This data is never touched by the scanner. - * @param user_defined The data to be associated with this scanner. - * @param yyscanner The scanner object. - */ -void yyset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - yyextra = user_defined ; -} - -/** Set the current line number. - * @param line_number - * @param yyscanner The scanner object. - */ -void yyset_lineno (int line_number , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - /* lineno is only valid if an input buffer exists. */ - if (! YY_CURRENT_BUFFER ) - YY_FATAL_ERROR( "yyset_lineno called with no buffer" ); - - yylineno = line_number; -} - -/** Set the current column. - * @param line_number - * @param yyscanner The scanner object. - */ -void yyset_column (int column_no , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - /* column is only valid if an input buffer exists. */ - if (! YY_CURRENT_BUFFER ) - YY_FATAL_ERROR( "yyset_column called with no buffer" ); - - yycolumn = column_no; -} - -/** Set the input stream. This does not discard the current - * input buffer. - * @param in_str A readable stream. - * @param yyscanner The scanner object. - * @see yy_switch_to_buffer - */ -void yyset_in (FILE * in_str , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - yyin = in_str ; -} - -void yyset_out (FILE * out_str , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - yyout = out_str ; -} - -int yyget_debug (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - return yy_flex_debug; -} - -void yyset_debug (int bdebug , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - yy_flex_debug = bdebug ; -} - -/* Accessor methods for yylval and yylloc */ - -YYSTYPE * yyget_lval (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - return yylval; -} - -void yyset_lval (YYSTYPE * yylval_param , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - yylval = yylval_param; -} - -/* User-visible API */ - -/* yylex_init is special because it creates the scanner itself, so it is - * the ONLY reentrant function that doesn't take the scanner as the last argument. - * That's why we explicitly handle the declaration, instead of using our macros. - */ - -int yylex_init(yyscan_t* ptr_yy_globals) - -{ - if (ptr_yy_globals == NULL){ - errno = EINVAL; - return 1; - } - - *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), NULL ); - - if (*ptr_yy_globals == NULL){ - errno = ENOMEM; - return 1; - } - - /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */ - memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); - - return yy_init_globals ( *ptr_yy_globals ); -} - -/* yylex_init_extra has the same functionality as yylex_init, but follows the - * convention of taking the scanner as the last argument. Note however, that - * this is a *pointer* to a scanner, as it will be allocated by this call (and - * is the reason, too, why this function also must handle its own declaration). - * The user defined value in the first argument will be available to yyalloc in - * the yyextra field. - */ - -int yylex_init_extra(YY_EXTRA_TYPE yy_user_defined,yyscan_t* ptr_yy_globals ) - -{ - struct yyguts_t dummy_yyguts; - - yyset_extra (yy_user_defined, &dummy_yyguts); - - if (ptr_yy_globals == NULL){ - errno = EINVAL; - return 1; - } - - *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts ); - - if (*ptr_yy_globals == NULL){ - errno = ENOMEM; - return 1; - } - - /* By setting to 0xAA, we expose bugs in - yy_init_globals. Leave at 0x00 for releases. */ - memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); - - yyset_extra (yy_user_defined, *ptr_yy_globals); - - return yy_init_globals ( *ptr_yy_globals ); -} - -static int yy_init_globals (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - /* Initialization is the same as for the non-reentrant scanner. - * This function is called from yylex_destroy(), so don't allocate here. - */ - - yyg->yy_buffer_stack = 0; - yyg->yy_buffer_stack_top = 0; - yyg->yy_buffer_stack_max = 0; - yyg->yy_c_buf_p = (char *) 0; - yyg->yy_init = 0; - yyg->yy_start = 0; - - yyg->yy_start_stack_ptr = 0; - yyg->yy_start_stack_depth = 0; - yyg->yy_start_stack = NULL; - - yyg->yy_state_buf = 0; - yyg->yy_state_ptr = 0; - yyg->yy_full_match = 0; - yyg->yy_lp = 0; - -/* Defined in main.c */ -#ifdef YY_STDINIT - yyin = stdin; - yyout = stdout; -#else - yyin = (FILE *) 0; - yyout = (FILE *) 0; -#endif - - /* For future reference: Set errno on error, since we are called by - * yylex_init() - */ - return 0; -} - -/* yylex_destroy is for both reentrant and non-reentrant scanners. */ -int yylex_destroy (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - /* Pop the buffer stack, destroying each element. */ - while(YY_CURRENT_BUFFER){ - yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner ); - YY_CURRENT_BUFFER_LVALUE = NULL; - yypop_buffer_state(yyscanner); - } - - /* Destroy the stack itself. */ - yyfree(yyg->yy_buffer_stack ,yyscanner); - yyg->yy_buffer_stack = NULL; - - /* Destroy the start condition stack. */ - yyfree(yyg->yy_start_stack ,yyscanner ); - yyg->yy_start_stack = NULL; - - yyfree ( yyg->yy_state_buf , yyscanner); - yyg->yy_state_buf = NULL; - - /* Reset the globals. This is important in a non-reentrant scanner so the next time - * yylex() is called, initialization will occur. */ - yy_init_globals( yyscanner); - - /* Destroy the main struct (reentrant only). */ - yyfree ( yyscanner , yyscanner ); - yyscanner = NULL; - return 0; -} - -/* - * Internal utility routines. - */ - -#ifndef yytext_ptr -static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner) -{ - register int i; - for ( i = 0; i < n; ++i ) - s1[i] = s2[i]; -} -#endif - -#ifdef YY_NEED_STRLEN -static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner) -{ - register int n; - for ( n = 0; s[n]; ++n ) - ; - - return n; -} -#endif - -void *yyalloc (yy_size_t size , yyscan_t yyscanner) -{ - return (void *) malloc( size ); -} - -void *yyrealloc (void * ptr, yy_size_t size , yyscan_t yyscanner) -{ - /* The cast to (char *) in the following accommodates both - * implementations that use char* generic pointers, and those - * that use void* generic pointers. It works with the latter - * because both ANSI C and C++ allow castless assignment from - * any pointer type to void*, and deal with argument conversions - * as though doing an assignment. - */ - return (void *) realloc( (char *) ptr, size ); -} - -void yyfree (void * ptr , yyscan_t yyscanner) -{ - free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ -} - -#define YYTABLES_NAME "yytables" - -#line 131 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" - - - diff --git a/phpdbg_lexer.h b/phpdbg_lexer.h index 1958cef9a26..ab51e7daa87 100644 --- a/phpdbg_lexer.h +++ b/phpdbg_lexer.h @@ -1,348 +1,41 @@ -#ifndef yyHEADER_H -#define yyHEADER_H 1 -#define yyIN_HEADER 1 +/* + +----------------------------------------------------------------------+ + | PHP Version 5 | + +----------------------------------------------------------------------+ + | Copyright (c) 1997-2014 The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.php.net/license/3_01.txt | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Authors: Felipe Pena | + | Authors: Joe Watkins | + | Authors: Bob Weinand | + +----------------------------------------------------------------------+ +*/ -#line 6 "sapi/phpdbg/phpdbg_lexer.h" +#ifndef PHPDBG_LEXER_H +#define PHPDBG_LEXER_H -#line 8 "sapi/phpdbg/phpdbg_lexer.h" +#include "phpdbg_cmd.h" -#define YY_INT_ALIGNED short int +typedef struct { + unsigned int len; + unsigned char *text; + unsigned char *cursor; + unsigned char *marker; + int state; +} phpdbg_lexer_data; -/* A lexical scanner generated by flex */ +#define yyparse phpdbg_parse +#define yylex phpdbg_lex -#define FLEX_SCANNER -#define YY_FLEX_MAJOR_VERSION 2 -#define YY_FLEX_MINOR_VERSION 5 -#define YY_FLEX_SUBMINOR_VERSION 37 -#if YY_FLEX_SUBMINOR_VERSION > 0 -#define FLEX_BETA -#endif +void phpdbg_init_lexer (phpdbg_param_t *stack, char *input TSRMLS_DC); -/* First, we deal with platform-specific or compiler-specific issues. */ - -/* begin standard C headers. */ -#include -#include -#include -#include - -/* end standard C headers. */ - -/* flex integer type definitions */ - -#ifndef FLEXINT_H -#define FLEXINT_H - -/* C99 systems have . Non-C99 systems may or may not. */ - -#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - -/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, - * if you want the limit (max/min) macros for int types. - */ -#ifndef __STDC_LIMIT_MACROS -#define __STDC_LIMIT_MACROS 1 -#endif - -#include -typedef int8_t flex_int8_t; -typedef uint8_t flex_uint8_t; -typedef int16_t flex_int16_t; -typedef uint16_t flex_uint16_t; -typedef int32_t flex_int32_t; -typedef uint32_t flex_uint32_t; -#else -typedef signed char flex_int8_t; -typedef short int flex_int16_t; -typedef int flex_int32_t; -typedef unsigned char flex_uint8_t; -typedef unsigned short int flex_uint16_t; -typedef unsigned int flex_uint32_t; - -/* Limits of integral types. */ -#ifndef INT8_MIN -#define INT8_MIN (-128) -#endif -#ifndef INT16_MIN -#define INT16_MIN (-32767-1) -#endif -#ifndef INT32_MIN -#define INT32_MIN (-2147483647-1) -#endif -#ifndef INT8_MAX -#define INT8_MAX (127) -#endif -#ifndef INT16_MAX -#define INT16_MAX (32767) -#endif -#ifndef INT32_MAX -#define INT32_MAX (2147483647) -#endif -#ifndef UINT8_MAX -#define UINT8_MAX (255U) -#endif -#ifndef UINT16_MAX -#define UINT16_MAX (65535U) -#endif -#ifndef UINT32_MAX -#define UINT32_MAX (4294967295U) -#endif - -#endif /* ! C99 */ - -#endif /* ! FLEXINT_H */ - -#ifdef __cplusplus - -/* The "const" storage-class-modifier is valid. */ -#define YY_USE_CONST - -#else /* ! __cplusplus */ - -/* C99 requires __STDC__ to be defined as 1. */ -#if defined (__STDC__) - -#define YY_USE_CONST - -#endif /* defined (__STDC__) */ -#endif /* ! __cplusplus */ - -#ifdef YY_USE_CONST -#define yyconst const -#else -#define yyconst -#endif - -/* An opaque pointer. */ -#ifndef YY_TYPEDEF_YY_SCANNER_T -#define YY_TYPEDEF_YY_SCANNER_T -typedef void* yyscan_t; -#endif - -/* For convenience, these vars (plus the bison vars far below) - are macros in the reentrant scanner. */ -#define yyin yyg->yyin_r -#define yyout yyg->yyout_r -#define yyextra yyg->yyextra_r -#define yyleng yyg->yyleng_r -#define yytext yyg->yytext_r -#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) -#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) -#define yy_flex_debug yyg->yy_flex_debug_r - -/* Size of default input buffer. */ -#ifndef YY_BUF_SIZE -#define YY_BUF_SIZE 16384 -#endif - -#ifndef YY_TYPEDEF_YY_BUFFER_STATE -#define YY_TYPEDEF_YY_BUFFER_STATE -typedef struct yy_buffer_state *YY_BUFFER_STATE; -#endif - -#ifndef YY_TYPEDEF_YY_SIZE_T -#define YY_TYPEDEF_YY_SIZE_T -typedef size_t yy_size_t; -#endif - -#ifndef YY_STRUCT_YY_BUFFER_STATE -#define YY_STRUCT_YY_BUFFER_STATE -struct yy_buffer_state - { - FILE *yy_input_file; - - char *yy_ch_buf; /* input buffer */ - char *yy_buf_pos; /* current position in input buffer */ - - /* Size of input buffer in bytes, not including room for EOB - * characters. - */ - yy_size_t yy_buf_size; - - /* Number of characters read into yy_ch_buf, not including EOB - * characters. - */ - yy_size_t yy_n_chars; - - /* Whether we "own" the buffer - i.e., we know we created it, - * and can realloc() it to grow it, and should free() it to - * delete it. - */ - int yy_is_our_buffer; - - /* Whether this is an "interactive" input source; if so, and - * if we're using stdio for input, then we want to use getc() - * instead of fread(), to make sure we stop fetching input after - * each newline. - */ - int yy_is_interactive; - - /* Whether we're considered to be at the beginning of a line. - * If so, '^' rules will be active on the next match, otherwise - * not. - */ - int yy_at_bol; - - int yy_bs_lineno; /**< The line count. */ - int yy_bs_column; /**< The column count. */ - - /* Whether to try to fill the input buffer when we reach the - * end of it. - */ - int yy_fill_buffer; - - int yy_buffer_status; - - }; -#endif /* !YY_STRUCT_YY_BUFFER_STATE */ - -void yyrestart (FILE *input_file ,yyscan_t yyscanner ); -void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); -YY_BUFFER_STATE yy_create_buffer (FILE *file,int size ,yyscan_t yyscanner ); -void yy_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); -void yy_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); -void yypush_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); -void yypop_buffer_state (yyscan_t yyscanner ); - -YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner ); -YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner ); -YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len ,yyscan_t yyscanner ); - -void *yyalloc (yy_size_t ,yyscan_t yyscanner ); -void *yyrealloc (void *,yy_size_t ,yyscan_t yyscanner ); -void yyfree (void * ,yyscan_t yyscanner ); - -/* Begin user sect3 */ - -#define yywrap(yyscanner) 1 -#define YY_SKIP_YYWRAP - -#define yytext_ptr yytext_r - -#ifdef YY_HEADER_EXPORT_START_CONDITIONS -#define INITIAL 0 -#define RAW 1 -#define NORMAL 2 +int phpdbg_lex (phpdbg_param_t* yylval); #endif - -#ifndef YY_NO_UNISTD_H -/* Special case for "unistd.h", since it is non-ANSI. We include it way - * down here because we want the user's section 1 to have been scanned first. - * The user has a chance to override it with an option. - */ -#include -#endif - -#ifndef YY_EXTRA_TYPE -#define YY_EXTRA_TYPE void * -#endif - -int yylex_init (yyscan_t* scanner); - -int yylex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner); - -/* Accessor methods to globals. - These are made visible to non-reentrant scanners for convenience. */ - -int yylex_destroy (yyscan_t yyscanner ); - -int yyget_debug (yyscan_t yyscanner ); - -void yyset_debug (int debug_flag ,yyscan_t yyscanner ); - -YY_EXTRA_TYPE yyget_extra (yyscan_t yyscanner ); - -void yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner ); - -FILE *yyget_in (yyscan_t yyscanner ); - -void yyset_in (FILE * in_str ,yyscan_t yyscanner ); - -FILE *yyget_out (yyscan_t yyscanner ); - -void yyset_out (FILE * out_str ,yyscan_t yyscanner ); - -yy_size_t yyget_leng (yyscan_t yyscanner ); - -char *yyget_text (yyscan_t yyscanner ); - -int yyget_lineno (yyscan_t yyscanner ); - -void yyset_lineno (int line_number ,yyscan_t yyscanner ); - -int yyget_column (yyscan_t yyscanner ); - -void yyset_column (int column_no ,yyscan_t yyscanner ); - -YYSTYPE * yyget_lval (yyscan_t yyscanner ); - -void yyset_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner ); - -/* Macros after this point can all be overridden by user definitions in - * section 1. - */ - -#ifndef YY_SKIP_YYWRAP -#ifdef __cplusplus -extern "C" int yywrap (yyscan_t yyscanner ); -#else -extern int yywrap (yyscan_t yyscanner ); -#endif -#endif - -#ifndef yytext_ptr -static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner); -#endif - -#ifdef YY_NEED_STRLEN -static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner); -#endif - -#ifndef YY_NO_INPUT - -#endif - -/* Amount of stuff to slurp up with each read. */ -#ifndef YY_READ_BUF_SIZE -#define YY_READ_BUF_SIZE 8192 -#endif - -/* Number of entries by which start-condition stack grows. */ -#ifndef YY_START_STACK_INCR -#define YY_START_STACK_INCR 25 -#endif - -/* Default declaration of generated scanner - a define so the user can - * easily add parameters. - */ -#ifndef YY_DECL -#define YY_DECL_IS_OURS 1 - -extern int yylex \ - (YYSTYPE * yylval_param ,yyscan_t yyscanner); - -#define YY_DECL int yylex \ - (YYSTYPE * yylval_param , yyscan_t yyscanner) -#endif /* !YY_DECL */ - -/* yy_get_previous_state - get the state just before the EOB char was reached */ - -#undef YY_NEW_FILE -#undef YY_FLUSH_BUFFER -#undef yy_set_bol -#undef yy_new_buffer -#undef yy_set_interactive -#undef YY_DO_BEFORE_ACTION - -#ifdef YY_DECL_IS_OURS -#undef YY_DECL_IS_OURS -#undef YY_DECL -#endif - -#line 131 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" - - -#line 347 "sapi/phpdbg/phpdbg_lexer.h" -#undef yyIN_HEADER -#endif /* yyHEADER_H */ diff --git a/phpdbg_lexer.l b/phpdbg_lexer.l index b3536feab84..2108f79aae5 100644 --- a/phpdbg_lexer.l +++ b/phpdbg_lexer.l @@ -1,131 +1,169 @@ -%{ - /* * phpdbg_lexer.l */ #include "phpdbg.h" #include "phpdbg_cmd.h" -#define YYSTYPE phpdbg_param_t #include "phpdbg_parser.h" -%} +#define LEX(v) (PHPDBG_G(lexer).v) -%s RAW -%s NORMAL +#define YYCTYPE unsigned char +#define YYSETCONDITION(x) LEX(state) = x; +#define YYGETCONDITION() LEX(state) +#define YYCURSOR LEX(cursor) +#define YYMARKER LEX(marker) +#define yyleng LEX(len) +#define yytext ((char*) LEX(text)) +#undef YYDEBUG +#define YYDEBUG(a, b) +#define YYFILL(n) -%option outfile="sapi/phpdbg/phpdbg_lexer.c" header-file="sapi/phpdbg/phpdbg_lexer.h" -%option warn nodefault - -%option reentrant noyywrap never-interactive nounistd -%option bison-bridge +#define NORMAL 0 +#define RAW 1 +#define INITIAL 2 -T_TRUE "true" -T_YES "yes" -T_ON "on" -T_ENABLED "enabled" -T_FALSE "false" -T_NO "no" -T_OFF "off" -T_DISABLED "disabled" -T_EVAL "ev" -T_SHELL "sh" -T_IF "if" -T_RUN "run" -T_RUN_SHORT "r" +ZEND_DECLARE_MODULE_GLOBALS(phpdbg); -WS [ \r\n\t]+ -DIGITS [0-9\.]+ -ID [^ \r\n\t:#]+ -ADDR 0x[a-fA-F0-9]+ -OPCODE (ZEND_|zend_)([A-Za-z])+ -INPUT [^\n]+ -%% +void phpdbg_init_lexer (phpdbg_param_t *stack, char *input TSRMLS_DC) { + PHPDBG_G(parser_stack) = stack; -{ - {T_EVAL} { - BEGIN(RAW); - phpdbg_init_param(yylval, EMPTY_PARAM); - return T_EVAL; - } - {T_SHELL} { - BEGIN(RAW); - phpdbg_init_param(yylval, EMPTY_PARAM); - return T_SHELL; - } - {T_RUN}|{T_RUN_SHORT} { - BEGIN(RAW); - phpdbg_init_param(yylval, EMPTY_PARAM); - return T_RUN; - } + YYSETCONDITION(INITIAL); - .+ { - BEGIN(NORMAL); - REJECT; - } + LEX(text) = YYCURSOR = (unsigned char *) input; + LEX(len) = strlen(input); } -{ - {T_IF} { - BEGIN(RAW); - phpdbg_init_param(yylval, EMPTY_PARAM); - return T_IF; - } +int phpdbg_lex (phpdbg_param_t* yylval) { + TSRMLS_FETCH(); /* Slow, but this is not a major problem here. TODO: Use TSRMLS_DC */ + +restart: + LEX(text) = YYCURSOR; + +/*!re2c +re2c:yyfill:check = 0; +T_TRUE "true" +T_YES "yes" +T_ON "on" +T_ENABLED "enabled" +T_FALSE "false" +T_NO "no" +T_OFF "off" +T_DISABLED "disabled" +T_EVAL "ev" +T_SHELL "sh" +T_IF "if" +T_RUN "run" +T_RUN_SHORT "r" +WS [ \r\n\t]+ +DIGITS [0-9\.]+ +ID [^ \r\n\t:#]+ +ADDR [0][x][a-fA-F0-9]+ +OPCODE (ZEND_|zend_)([A-Za-z])+ +INPUT [^\n]+ + + := yyleng = (size_t) YYCURSOR - (size_t) yytext; + +<*>"\n" { + return 0; } -{ - {ID}[:]{1}[//]{2} { - phpdbg_init_param(yylval, STR_PARAM); - yylval->str = zend_strndup(yytext, yyleng); - yylval->len = yyleng; - return T_PROTO; - } - [#]{1} { return T_POUND; } - [:]{2} { return T_DCOLON; } - [:]{1} { return T_COLON; } - - {T_YES}|{T_ON}|{T_ENABLED}|{T_TRUE} { - phpdbg_init_param(yylval, NUMERIC_PARAM); - yylval->num = 1; - return T_TRUTHY; - } - {T_NO}|{T_OFF}|{T_DISABLED}|{T_FALSE} { - phpdbg_init_param(yylval, NUMERIC_PARAM); - yylval->num = 0; - return T_FALSY; - } - {DIGITS} { - phpdbg_init_param(yylval, NUMERIC_PARAM); - yylval->num = atoi(yytext); - return T_DIGITS; - } - {ADDR} { - phpdbg_init_param(yylval, ADDR_PARAM); - yylval->addr = strtoul(yytext, 0, 16); - return T_ADDR; - } - {OPCODE} { - phpdbg_init_param(yylval, OP_PARAM); - yylval->str = zend_strndup(yytext, yyleng); - yylval->len = yyleng; - return T_OPCODE; - } - {ID} { - phpdbg_init_param(yylval, STR_PARAM); - yylval->str = zend_strndup(yytext, yyleng); - yylval->len = yyleng; - return T_ID; - } +{T_IF} { + YYSETCONDITION(RAW); + phpdbg_init_param(yylval, EMPTY_PARAM); + return T_IF; } -{INPUT} { +{ID}[:]{1}[//]{2} { + phpdbg_init_param(yylval, STR_PARAM); + yylval->str = zend_strndup(yytext, yyleng); + yylval->len = yyleng; + return T_PROTO; +} +[#]{1} { + return T_POUND; +} +[:]{2} { + return T_DCOLON; +} +[:]{1} { + return T_COLON; +} + +{T_YES}|{T_ON}|{T_ENABLED}|{T_TRUE} { + phpdbg_init_param(yylval, NUMERIC_PARAM); + yylval->num = 1; + return T_TRUTHY; +} + +{T_NO}|{T_OFF}|{T_DISABLED}|{T_FALSE} { + phpdbg_init_param(yylval, NUMERIC_PARAM); + yylval->num = 0; + return T_FALSY; +} + +{DIGITS} { + phpdbg_init_param(yylval, NUMERIC_PARAM); + yylval->num = atoi(yytext); + return T_DIGITS; +} + +{ADDR} { + phpdbg_init_param(yylval, ADDR_PARAM); + yylval->addr = strtoul(yytext, 0, 16); + return T_ADDR; +} + +{OPCODE} { + phpdbg_init_param(yylval, OP_PARAM); + yylval->str = zend_strndup(yytext, yyleng); + yylval->len = yyleng; + return T_OPCODE; +} + +{ID} { + phpdbg_init_param(yylval, STR_PARAM); + yylval->str = zend_strndup(yytext, yyleng); + yylval->len = yyleng; + return T_ID; +} + +{INPUT} { phpdbg_init_param(yylval, STR_PARAM); yylval->str = zend_strndup(yytext, yyleng); yylval->len = yyleng; - BEGIN(INITIAL); return T_INPUT; } -{WS} { /* ignore whitespace */ } -%% +<*>{WS} { + /* ignore whitespace */ + + goto restart; +} + +{T_EVAL} { + YYSETCONDITION(RAW); + phpdbg_init_param(yylval, EMPTY_PARAM); + return T_EVAL; +} +{T_SHELL} { + YYSETCONDITION(RAW); + phpdbg_init_param(yylval, EMPTY_PARAM); + return T_SHELL; +} +{T_RUN}|{T_RUN_SHORT} { + YYSETCONDITION(RAW); + phpdbg_init_param(yylval, EMPTY_PARAM); + return T_RUN; +} + +. { + YYSETCONDITION(NORMAL); + + YYCURSOR = LEX(text); + goto restart; +} + +*/ +} diff --git a/phpdbg_parser.c b/phpdbg_parser.c index 79af58f8c9a..83c84c51d95 100644 --- a/phpdbg_parser.c +++ b/phpdbg_parser.c @@ -1,8 +1,8 @@ -/* A Bison parser, made by GNU Bison 2.7. */ +/* A Bison parser, made by GNU Bison 2.5. */ /* Bison implementation for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -44,7 +44,7 @@ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "2.7" +#define YYBISON_VERSION "2.5" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -58,12 +58,23 @@ /* Pull parsers. */ #define YYPULL 1 +/* Using locations. */ +#define YYLSP_NEEDED 0 +/* Substitute the variable and function names. */ +#define yyparse phpdbg_parse +#define yylex phpdbg_lex +#define yyerror phpdbg_error +#define yylval phpdbg_lval +#define yychar phpdbg_char +#define yydebug phpdbg_debug +#define yynerrs phpdbg_nerrs /* Copy the first part of user declarations. */ -/* Line 371 of yacc.c */ -#line 2 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" + +/* Line 268 of yacc.c */ +#line 1 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" /* @@ -84,33 +95,20 @@ #include "phpdbg_parser.h" #include "phpdbg_lexer.h" +#undef yyerror +static int yyerror(const char *msg); + ZEND_EXTERN_MODULE_GLOBALS(phpdbg); -int yyerror(phpdbg_param_t *stack, yyscan_t scanner, const char *msg) { - TSRMLS_FETCH(); - phpdbg_error("Parse Error: %s", msg); - { - const phpdbg_param_t *top = stack; - - while (top) { - phpdbg_param_debug( - top, "--> "); - top = top->next; - } - } - return 0; -} -/* Line 371 of yacc.c */ -#line 106 "sapi/phpdbg/phpdbg_parser.c" -# ifndef YY_NULL -# if defined __cplusplus && 201103L <= __cplusplus -# define YY_NULL nullptr -# else -# define YY_NULL 0 -# endif -# endif +/* Line 268 of yacc.c */ +#line 107 "sapi/phpdbg/phpdbg_parser.c" + +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE @@ -120,20 +118,15 @@ int yyerror(phpdbg_param_t *stack, yyscan_t scanner, const char *msg) { # define YYERROR_VERBOSE 1 #endif -/* In a future release of Bison, this section will be replaced - by #include "phpdbg_parser.h". */ -#ifndef YY_YY_SAPI_PHPDBG_PHPDBG_PARSER_H_INCLUDED -# define YY_YY_SAPI_PHPDBG_PHPDBG_PARSER_H_INCLUDED -/* Enabling traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif -#if YYDEBUG -extern int yydebug; +/* Enabling the token table. */ +#ifndef YYTOKEN_TABLE +# define YYTOKEN_TABLE 0 #endif + /* "%code requires" blocks. */ -/* Line 387 of yacc.c */ -#line 40 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" + +/* Line 288 of yacc.c */ +#line 31 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" #include "phpdbg.h" #ifndef YY_TYPEDEF_YY_SCANNER_T @@ -142,8 +135,9 @@ typedef void* yyscan_t; #endif -/* Line 387 of yacc.c */ -#line 147 "sapi/phpdbg/phpdbg_parser.c" + +/* Line 288 of yacc.c */ +#line 141 "sapi/phpdbg/phpdbg_parser.c" /* Tokens. */ #ifndef YYTOKENTYPE @@ -193,6 +187,7 @@ typedef void* yyscan_t; + #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef int YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 @@ -201,26 +196,11 @@ typedef int YYSTYPE; #endif -#ifdef YYPARSE_PARAM -#if defined __STDC__ || defined __cplusplus -int yyparse (void *YYPARSE_PARAM); -#else -int yyparse (); -#endif -#else /* ! YYPARSE_PARAM */ -#if defined __STDC__ || defined __cplusplus -int yyparse (phpdbg_param_t *stack, yyscan_t scanner); -#else -int yyparse (); -#endif -#endif /* ! YYPARSE_PARAM */ - -#endif /* !YY_YY_SAPI_PHPDBG_PHPDBG_PARSER_H_INCLUDED */ - /* Copy the second part of user declarations. */ -/* Line 390 of yacc.c */ -#line 224 "sapi/phpdbg/phpdbg_parser.c" + +/* Line 343 of yacc.c */ +#line 204 "sapi/phpdbg/phpdbg_parser.c" #ifdef short # undef short @@ -273,24 +253,24 @@ typedef short int yytype_int16; # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ -# define YY_(Msgid) dgettext ("bison-runtime", Msgid) +# define YY_(msgid) dgettext ("bison-runtime", msgid) # endif # endif # ifndef YY_ -# define YY_(Msgid) Msgid +# define YY_(msgid) msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ -# define YYUSE(E) ((void) (E)) +# define YYUSE(e) ((void) (e)) #else -# define YYUSE(E) /* empty */ +# define YYUSE(e) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint -# define YYID(N) (N) +# define YYID(n) (n) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) @@ -326,7 +306,6 @@ YYID (yyi) # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ - /* Use EXIT_SUCCESS as a witness for stdlib.h. */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif @@ -418,38 +397,38 @@ union yyalloc #endif #if defined YYCOPY_NEEDED && YYCOPY_NEEDED -/* Copy COUNT objects from SRC to DST. The source and destination do +/* Copy COUNT objects from FROM to TO. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ -# define YYCOPY(Dst, Src, Count) \ - __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) +# define YYCOPY(To, From, Count) \ + __builtin_memcpy (To, From, (Count) * sizeof (*(From))) # else -# define YYCOPY(Dst, Src, Count) \ - do \ - { \ - YYSIZE_T yyi; \ - for (yyi = 0; yyi < (Count); yyi++) \ - (Dst)[yyi] = (Src)[yyi]; \ - } \ +# define YYCOPY(To, From, Count) \ + do \ + { \ + YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (To)[yyi] = (From)[yyi]; \ + } \ while (YYID (0)) # endif # endif #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ -#define YYFINAL 24 +#define YYFINAL 25 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 33 +#define YYLAST 41 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 21 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 4 +#define YYNNTS 5 /* YYNRULES -- Number of rules. */ -#define YYNRULES 24 +#define YYNRULES 25 /* YYNRULES -- Number of states. */ -#define YYNSTATES 37 +#define YYNSTATES 38 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 @@ -496,34 +475,34 @@ static const yytype_uint8 yytranslate[] = YYRHS. */ static const yytype_uint8 yyprhs[] = { - 0, 0, 3, 5, 6, 8, 11, 15, 20, 25, - 31, 35, 41, 45, 48, 51, 54, 56, 59, 61, - 63, 65, 67, 69, 71 + 0, 0, 3, 5, 7, 8, 10, 13, 17, 22, + 27, 33, 37, 43, 47, 49, 51, 53, 55, 57, + 59, 61, 64, 67, 70, 72 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int8 yyrhs[] = { - 22, 0, -1, 23, -1, -1, 24, -1, 23, 24, - -1, 18, 10, 14, -1, 18, 10, 12, 14, -1, - 13, 18, 10, 14, -1, 13, 18, 10, 12, 14, - -1, 18, 11, 18, -1, 18, 11, 18, 12, 14, - -1, 18, 12, 14, -1, 6, 19, -1, 3, 19, - -1, 5, 19, -1, 4, -1, 4, 19, -1, 17, - -1, 16, -1, 15, -1, 7, -1, 8, -1, 14, - -1, 18, -1 + 22, 0, -1, 23, -1, 25, -1, -1, 24, -1, + 23, 24, -1, 18, 10, 14, -1, 18, 10, 12, + 14, -1, 13, 18, 10, 14, -1, 13, 18, 10, + 12, 14, -1, 18, 11, 18, -1, 18, 11, 18, + 12, 14, -1, 18, 12, 14, -1, 17, -1, 16, + -1, 15, -1, 7, -1, 8, -1, 14, -1, 18, + -1, 6, 19, -1, 3, 19, -1, 5, 19, -1, + 4, -1, 4, 19, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint8 yyrline[] = { - 0, 76, 76, 77, 81, 82, 86, 91, 96, 107, - 118, 123, 129, 135, 140, 145, 150, 154, 159, 160, - 161, 162, 163, 164, 165 + 0, 64, 64, 65, 66, 70, 71, 75, 80, 85, + 95, 105, 110, 116, 122, 123, 124, 125, 126, 127, + 128, 132, 137, 142, 147, 151 }; #endif -#if YYDEBUG || YYERROR_VERBOSE || 1 +#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = @@ -536,7 +515,7 @@ static const char *const yytname[] = "\"digits (numbers)\"", "\"literal (string)\"", "\"address\"", "\"opcode\"", "\"identifier (command or function name)\"", "\"input (input string or data)\"", "\"input\"", "$accept", "input", - "parameters", "parameter", YY_NULL + "parameters", "parameter", "full_expression", 0 }; #endif @@ -554,17 +533,17 @@ static const yytype_uint16 yytoknum[] = /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { - 0, 21, 22, 22, 23, 23, 24, 24, 24, 24, + 0, 21, 22, 22, 22, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24 + 24, 25, 25, 25, 25, 25 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { - 0, 2, 1, 0, 1, 2, 3, 4, 4, 5, - 3, 5, 3, 2, 2, 2, 1, 2, 1, 1, - 1, 1, 1, 1, 1 + 0, 2, 1, 1, 0, 1, 2, 3, 4, 4, + 5, 3, 5, 3, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 2, 1, 2 }; /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. @@ -572,16 +551,16 @@ static const yytype_uint8 yyr2[] = means the default is an error. */ static const yytype_uint8 yydefact[] = { - 3, 0, 16, 0, 0, 21, 22, 0, 23, 20, - 19, 18, 24, 0, 2, 4, 14, 17, 15, 13, - 0, 0, 0, 0, 1, 5, 0, 0, 6, 10, - 12, 0, 8, 7, 0, 9, 11 + 4, 0, 24, 0, 0, 17, 18, 0, 19, 16, + 15, 14, 20, 0, 2, 5, 3, 22, 25, 23, + 21, 0, 0, 0, 0, 1, 6, 0, 0, 7, + 11, 13, 0, 9, 8, 0, 10, 12 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int8 yydefgoto[] = { - -1, 13, 14, 15 + -1, 13, 14, 15, 16 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing @@ -589,16 +568,16 @@ static const yytype_int8 yydefgoto[] = #define YYPACT_NINF -11 static const yytype_int8 yypact[] = { - -3, -10, 1, 2, 3, -11, -11, 6, -11, -11, - -11, -11, -4, 23, -3, -11, -11, -11, -11, -11, - 15, 4, 8, 13, -11, -11, 5, 14, -11, 17, - -11, 16, -11, -11, 18, -11, -11 + -3, -10, 10, 11, 12, -11, -11, 14, -11, -11, + -11, -11, -4, 28, 9, -11, -11, -11, -11, -11, + -11, 23, 6, 16, 21, -11, -11, 7, 22, -11, + 25, -11, 24, -11, -11, 26, -11, -11 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = { - -11, -11, -11, 19 + -11, -11, -11, 27, -11 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If @@ -607,24 +586,26 @@ static const yytype_int8 yypgoto[] = #define YYTABLE_NINF -1 static const yytype_uint8 yytable[] = { - 1, 2, 3, 4, 5, 6, 21, 22, 23, 16, - 7, 8, 9, 10, 11, 12, 27, 31, 28, 32, - 17, 18, 19, 24, 20, 26, 29, 30, 33, 34, - 35, 0, 36, 25 + 1, 2, 3, 4, 5, 6, 22, 23, 24, 17, + 7, 8, 9, 10, 11, 12, 5, 6, 28, 32, + 29, 33, 7, 8, 9, 10, 11, 12, 25, 18, + 19, 20, 21, 27, 30, 31, 34, 35, 36, 0, + 37, 26 }; -#define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-11))) +#define yypact_value_is_default(yystate) \ + ((yystate) == (-11)) -#define yytable_value_is_error(Yytable_value) \ +#define yytable_value_is_error(yytable_value) \ YYID (0) static const yytype_int8 yycheck[] = { 3, 4, 5, 6, 7, 8, 10, 11, 12, 19, - 13, 14, 15, 16, 17, 18, 12, 12, 14, 14, - 19, 19, 19, 0, 18, 10, 18, 14, 14, 12, - 14, -1, 14, 14 + 13, 14, 15, 16, 17, 18, 7, 8, 12, 12, + 14, 14, 13, 14, 15, 16, 17, 18, 0, 19, + 19, 19, 18, 10, 18, 14, 14, 12, 14, -1, + 14, 14 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -632,9 +613,9 @@ static const yytype_int8 yycheck[] = static const yytype_uint8 yystos[] = { 0, 3, 4, 5, 6, 7, 8, 13, 14, 15, - 16, 17, 18, 22, 23, 24, 19, 19, 19, 19, - 18, 10, 11, 12, 0, 24, 10, 12, 14, 18, - 14, 12, 14, 14, 12, 14, 14 + 16, 17, 18, 22, 23, 24, 25, 19, 19, 19, + 19, 18, 10, 11, 12, 0, 24, 10, 12, 14, + 18, 14, 12, 14, 14, 12, 14, 14 }; #define yyerrok (yyerrstatus = 0) @@ -664,39 +645,66 @@ static const yytype_uint8 yystos[] = #define YYRECOVERING() (!!yyerrstatus) -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - YYPOPSTACK (yylen); \ - yystate = *yyssp; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror (stack, scanner, YY_("syntax error: cannot back up")); \ +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY && yylen == 1) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + YYPOPSTACK (1); \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) -/* Error token number */ + #define YYTERROR 1 #define YYERRCODE 256 +/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. + If N is 0, then set CURRENT to the empty location which ends + the previous symbol: RHS[0] (always defined). */ + +#define YYRHSLOC(Rhs, K) ((Rhs)[K]) +#ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (YYID (N)) \ + { \ + (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ + (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ + (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ + (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ + } \ + else \ + { \ + (Current).first_line = (Current).last_line = \ + YYRHSLOC (Rhs, 0).last_line; \ + (Current).first_column = (Current).last_column = \ + YYRHSLOC (Rhs, 0).last_column; \ + } \ + while (YYID (0)) +#endif + + /* This macro is provided for backward compatibility. */ + #ifndef YY_LOCATION_PRINT # define YY_LOCATION_PRINT(File, Loc) ((void) 0) #endif /* YYLEX -- calling `yylex' with the right arguments. */ + #ifdef YYLEX_PARAM # define YYLEX yylex (&yylval, YYLEX_PARAM) #else -# define YYLEX yylex (&yylval, scanner) +# define YYLEX yylex (&yylval) #endif /* Enable debugging if requested. */ @@ -719,7 +727,7 @@ do { \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ - Type, Value, stack, scanner); \ + Type, Value); \ YYFPRINTF (stderr, "\n"); \ } \ } while (YYID (0)) @@ -733,23 +741,17 @@ do { \ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void -yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, phpdbg_param_t *stack, yyscan_t scanner) +yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) #else static void -yy_symbol_value_print (yyoutput, yytype, yyvaluep, stack, scanner) +yy_symbol_value_print (yyoutput, yytype, yyvaluep) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; - phpdbg_param_t *stack; - yyscan_t scanner; #endif { - FILE *yyo = yyoutput; - YYUSE (yyo); if (!yyvaluep) return; - YYUSE (stack); - YYUSE (scanner); # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); @@ -759,7 +761,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, stack, scanner) switch (yytype) { default: - break; + break; } } @@ -771,15 +773,13 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, stack, scanner) #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void -yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, phpdbg_param_t *stack, yyscan_t scanner) +yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) #else static void -yy_symbol_print (yyoutput, yytype, yyvaluep, stack, scanner) +yy_symbol_print (yyoutput, yytype, yyvaluep) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; - phpdbg_param_t *stack; - yyscan_t scanner; #endif { if (yytype < YYNTOKENS) @@ -787,7 +787,7 @@ yy_symbol_print (yyoutput, yytype, yyvaluep, stack, scanner) else YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); - yy_symbol_value_print (yyoutput, yytype, yyvaluep, stack, scanner); + yy_symbol_value_print (yyoutput, yytype, yyvaluep); YYFPRINTF (yyoutput, ")"); } @@ -830,14 +830,12 @@ do { \ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void -yy_reduce_print (YYSTYPE *yyvsp, int yyrule, phpdbg_param_t *stack, yyscan_t scanner) +yy_reduce_print (YYSTYPE *yyvsp, int yyrule) #else static void -yy_reduce_print (yyvsp, yyrule, stack, scanner) +yy_reduce_print (yyvsp, yyrule) YYSTYPE *yyvsp; int yyrule; - phpdbg_param_t *stack; - yyscan_t scanner; #endif { int yynrhs = yyr2[yyrule]; @@ -851,7 +849,7 @@ yy_reduce_print (yyvsp, yyrule, stack, scanner) YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) - , stack, scanner); + ); YYFPRINTF (stderr, "\n"); } } @@ -859,7 +857,7 @@ yy_reduce_print (yyvsp, yyrule, stack, scanner) # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ - yy_reduce_print (yyvsp, Rule, stack, scanner); \ + yy_reduce_print (yyvsp, Rule); \ } while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that @@ -1003,11 +1001,12 @@ static int yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, yytype_int16 *yyssp, int yytoken) { - YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]); + YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]); YYSIZE_T yysize = yysize0; + YYSIZE_T yysize1; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ - const char *yyformat = YY_NULL; + const char *yyformat = 0; /* Arguments of yyformat. */ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; /* Number of reported tokens (one for the "unexpected", one per @@ -1067,13 +1066,11 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, break; } yyarg[yycount++] = yytname[yyx]; - { - YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]); - if (! (yysize <= yysize1 - && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) - return 2; - yysize = yysize1; - } + yysize1 = yysize + yytnamerr (0, yytname[yyx]); + if (! (yysize <= yysize1 + && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + return 2; + yysize = yysize1; } } } @@ -1093,12 +1090,10 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, # undef YYCASE_ } - { - YYSIZE_T yysize1 = yysize + yystrlen (yyformat); - if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) - return 2; - yysize = yysize1; - } + yysize1 = yysize + yystrlen (yyformat); + if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + return 2; + yysize = yysize1; if (*yymsg_alloc < yysize) { @@ -1139,20 +1134,16 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void -yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, phpdbg_param_t *stack, yyscan_t scanner) +yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) #else static void -yydestruct (yymsg, yytype, yyvaluep, stack, scanner) +yydestruct (yymsg, yytype, yyvaluep) const char *yymsg; int yytype; YYSTYPE *yyvaluep; - phpdbg_param_t *stack; - yyscan_t scanner; #endif { YYUSE (yyvaluep); - YYUSE (stack); - YYUSE (scanner); if (!yymsg) yymsg = "Deleting"; @@ -1162,11 +1153,25 @@ yydestruct (yymsg, yytype, yyvaluep, stack, scanner) { default: - break; + break; } } +/* Prevent warnings from -Wmissing-prototypes. */ +#ifdef YYPARSE_PARAM +#if defined __STDC__ || defined __cplusplus +int yyparse (void *YYPARSE_PARAM); +#else +int yyparse (); +#endif +#else /* ! YYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus +int yyparse (void); +#else +int yyparse (); +#endif +#endif /* ! YYPARSE_PARAM */ /*----------. @@ -1187,43 +1192,19 @@ yyparse (YYPARSE_PARAM) #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int -yyparse (phpdbg_param_t *stack, yyscan_t scanner) +yyparse (void) #else int -yyparse (stack, scanner) - phpdbg_param_t *stack; - yyscan_t scanner; +yyparse () + #endif #endif { /* The lookahead symbol. */ int yychar; - -#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ -/* Suppress an incorrect diagnostic about yylval being uninitialized. */ -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ - _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") -# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ - _Pragma ("GCC diagnostic pop") -#else -/* Default value used for initialization, for pacifying older GCCs - or non-GCC compilers. */ -static YYSTYPE yyval_default; -# define YY_INITIAL_VALUE(Value) = Value -#endif -#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_END -#endif -#ifndef YY_INITIAL_VALUE -# define YY_INITIAL_VALUE(Value) /* Nothing. */ -#endif - /* The semantic value of the lookahead symbol. */ -YYSTYPE yylval YY_INITIAL_VALUE(yyval_default); +YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; @@ -1236,7 +1217,7 @@ YYSTYPE yylval YY_INITIAL_VALUE(yyval_default); `yyss': related to states. `yyvs': related to semantic values. - Refer to the stacks through separate pointers, to allow yyoverflow + Refer to the stacks thru separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ @@ -1254,7 +1235,7 @@ YYSTYPE yylval YY_INITIAL_VALUE(yyval_default); int yyn; int yyresult; /* Lookahead token as an internal (translated) token number. */ - int yytoken = 0; + int yytoken; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; @@ -1272,8 +1253,9 @@ YYSTYPE yylval YY_INITIAL_VALUE(yyval_default); Keep to zero when no symbol should be popped. */ int yylen = 0; - yyssp = yyss = yyssa; - yyvsp = yyvs = yyvsa; + yytoken = 0; + yyss = yyssa; + yyvs = yyvsa; yystacksize = YYINITDEPTH; YYDPRINTF ((stderr, "Starting parse\n")); @@ -1282,6 +1264,14 @@ YYSTYPE yylval YY_INITIAL_VALUE(yyval_default); yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + yyssp = yyss; + yyvsp = yyvs; + goto yysetstate; /*------------------------------------------------------------. @@ -1422,9 +1412,7 @@ yybackup: yychar = YYEMPTY; yystate = yyn; - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; - YY_IGNORE_MAYBE_UNINITIALIZED_END goto yynewstate; @@ -1460,21 +1448,31 @@ yyreduce: YY_REDUCE_PRINT (yyn); switch (yyn) { - case 4: -/* Line 1792 of yacc.c */ -#line 81 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" - { phpdbg_stack_push(stack, &(yyvsp[(1) - (1)])); } + case 3: + +/* Line 1806 of yacc.c */ +#line 65 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" + { phpdbg_stack_push(PHPDBG_G(parser_stack), &(yyvsp[(1) - (1)])); } break; case 5: -/* Line 1792 of yacc.c */ -#line 82 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" - { phpdbg_stack_push(stack, &(yyvsp[(2) - (2)])); } + +/* Line 1806 of yacc.c */ +#line 70 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" + { phpdbg_stack_push(PHPDBG_G(parser_stack), &(yyvsp[(1) - (1)])); } break; case 6: -/* Line 1792 of yacc.c */ -#line 86 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" + +/* Line 1806 of yacc.c */ +#line 71 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" + { phpdbg_stack_push(PHPDBG_G(parser_stack), &(yyvsp[(2) - (2)])); } + break; + + case 7: + +/* Line 1806 of yacc.c */ +#line 75 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = FILE_PARAM; (yyval).file.name = (yyvsp[(2) - (3)]).str; @@ -1482,9 +1480,10 @@ yyreduce: } break; - case 7: -/* Line 1792 of yacc.c */ -#line 91 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" + case 8: + +/* Line 1806 of yacc.c */ +#line 80 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = NUMERIC_FILE_PARAM; (yyval).file.name = (yyvsp[(1) - (4)]).str; @@ -1492,13 +1491,13 @@ yyreduce: } break; - case 8: -/* Line 1792 of yacc.c */ -#line 96 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" + case 9: + +/* Line 1806 of yacc.c */ +#line 85 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = FILE_PARAM; - (yyval).file.name = malloc((yyvsp[(1) - (4)]).len + - (yyvsp[(2) - (4)]).len + 1); + (yyval).file.name = malloc((yyvsp[(1) - (4)]).len + (yyvsp[(2) - (4)]).len + 1); if ((yyval).file.name) { memcpy(&(yyval).file.name[0], (yyvsp[(1) - (4)]).str, (yyvsp[(1) - (4)]).len); memcpy(&(yyval).file.name[(yyvsp[(1) - (4)]).len], (yyvsp[(2) - (4)]).str, (yyvsp[(2) - (4)]).len); @@ -1508,13 +1507,13 @@ yyreduce: } break; - case 9: -/* Line 1792 of yacc.c */ -#line 107 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" + case 10: + +/* Line 1806 of yacc.c */ +#line 95 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = NUMERIC_FILE_PARAM; - (yyval).file.name = malloc((yyvsp[(1) - (5)]).len + - (yyvsp[(2) - (5)]).len + 1); + (yyval).file.name = malloc((yyvsp[(1) - (5)]).len + (yyvsp[(2) - (5)]).len + 1); if ((yyval).file.name) { memcpy(&(yyval).file.name[0], (yyvsp[(1) - (5)]).str, (yyvsp[(1) - (5)]).len); memcpy(&(yyval).file.name[(yyvsp[(1) - (5)]).len], (yyvsp[(2) - (5)]).str, (yyvsp[(2) - (5)]).len); @@ -1524,9 +1523,10 @@ yyreduce: } break; - case 10: -/* Line 1792 of yacc.c */ -#line 118 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" + case 11: + +/* Line 1806 of yacc.c */ +#line 105 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = METHOD_PARAM; (yyval).method.class = (yyvsp[(1) - (3)]).str; @@ -1534,9 +1534,10 @@ yyreduce: } break; - case 11: -/* Line 1792 of yacc.c */ -#line 123 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" + case 12: + +/* Line 1806 of yacc.c */ +#line 110 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = NUMERIC_METHOD_PARAM; (yyval).method.class = (yyvsp[(1) - (5)]).str; @@ -1545,9 +1546,10 @@ yyreduce: } break; - case 12: -/* Line 1792 of yacc.c */ -#line 129 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" + case 13: + +/* Line 1806 of yacc.c */ +#line 116 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = NUMERIC_FUNCTION_PARAM; (yyval).str = (yyvsp[(1) - (3)]).str; @@ -1556,19 +1558,70 @@ yyreduce: } break; - case 13: -/* Line 1792 of yacc.c */ -#line 135 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" - { + case 14: + +/* Line 1806 of yacc.c */ +#line 122 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" + { (yyval) = (yyvsp[(1) - (1)]); } + break; + + case 15: + +/* Line 1806 of yacc.c */ +#line 123 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" + { (yyval) = (yyvsp[(1) - (1)]); } + break; + + case 16: + +/* Line 1806 of yacc.c */ +#line 124 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" + { (yyval) = (yyvsp[(1) - (1)]); } + break; + + case 17: + +/* Line 1806 of yacc.c */ +#line 125 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" + { (yyval) = (yyvsp[(1) - (1)]); } + break; + + case 18: + +/* Line 1806 of yacc.c */ +#line 126 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" + { (yyval) = (yyvsp[(1) - (1)]); } + break; + + case 19: + +/* Line 1806 of yacc.c */ +#line 127 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" + { (yyval) = (yyvsp[(1) - (1)]); } + break; + + case 20: + +/* Line 1806 of yacc.c */ +#line 128 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" + { (yyval) = (yyvsp[(1) - (1)]); } + break; + + case 21: + +/* Line 1806 of yacc.c */ +#line 132 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" + { (yyval).type = COND_PARAM; (yyval).str = (yyvsp[(2) - (2)]).str; (yyval).len = (yyvsp[(2) - (2)]).len; } break; - case 14: -/* Line 1792 of yacc.c */ -#line 140 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" + case 22: + +/* Line 1806 of yacc.c */ +#line 137 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = EVAL_PARAM; (yyval).str = (yyvsp[(2) - (2)]).str; @@ -1576,9 +1629,10 @@ yyreduce: } break; - case 15: -/* Line 1792 of yacc.c */ -#line 145 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" + case 23: + +/* Line 1806 of yacc.c */ +#line 142 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = SHELL_PARAM; (yyval).str = (yyvsp[(2) - (2)]).str; @@ -1586,18 +1640,20 @@ yyreduce: } break; - case 16: -/* Line 1792 of yacc.c */ -#line 150 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" + case 24: + +/* Line 1806 of yacc.c */ +#line 147 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = RUN_PARAM; (yyval).len = 0; } break; - case 17: -/* Line 1792 of yacc.c */ -#line 154 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" + case 25: + +/* Line 1806 of yacc.c */ +#line 151 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = RUN_PARAM; (yyval).str = (yyvsp[(2) - (2)]).str; @@ -1605,51 +1661,10 @@ yyreduce: } break; - case 18: -/* Line 1792 of yacc.c */ -#line 159 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" - { (yyval) = (yyvsp[(1) - (1)]); } - break; - - case 19: -/* Line 1792 of yacc.c */ -#line 160 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" - { (yyval) = (yyvsp[(1) - (1)]); } - break; - - case 20: -/* Line 1792 of yacc.c */ -#line 161 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" - { (yyval) = (yyvsp[(1) - (1)]); } - break; - - case 21: -/* Line 1792 of yacc.c */ -#line 162 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" - { (yyval) = (yyvsp[(1) - (1)]); } - break; - - case 22: -/* Line 1792 of yacc.c */ -#line 163 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" - { (yyval) = (yyvsp[(1) - (1)]); } - break; - - case 23: -/* Line 1792 of yacc.c */ -#line 164 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" - { (yyval) = (yyvsp[(1) - (1)]); } - break; - - case 24: -/* Line 1792 of yacc.c */ -#line 165 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" - { (yyval) = (yyvsp[(1) - (1)]); } - break; -/* Line 1792 of yacc.c */ -#line 1653 "sapi/phpdbg/phpdbg_parser.c" +/* Line 1806 of yacc.c */ +#line 1668 "sapi/phpdbg/phpdbg_parser.c" default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -1699,7 +1714,7 @@ yyerrlab: { ++yynerrs; #if ! YYERROR_VERBOSE - yyerror (stack, scanner, YY_("syntax error")); + yyerror (YY_("syntax error")); #else # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ yyssp, yytoken) @@ -1726,7 +1741,7 @@ yyerrlab: yymsgp = yymsg; } } - yyerror (stack, scanner, yymsgp); + yyerror (yymsgp); if (yysyntax_error_status == 2) goto yyexhaustedlab; } @@ -1750,7 +1765,7 @@ yyerrlab: else { yydestruct ("Error: discarding", - yytoken, &yylval, stack, scanner); + yytoken, &yylval); yychar = YYEMPTY; } } @@ -1806,15 +1821,13 @@ yyerrlab1: yydestruct ("Error: popping", - yystos[yystate], yyvsp, stack, scanner); + yystos[yystate], yyvsp); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; - YY_IGNORE_MAYBE_UNINITIALIZED_END /* Shift the error token. */ @@ -1838,12 +1851,12 @@ yyabortlab: yyresult = 1; goto yyreturn; -#if !defined yyoverflow || YYERROR_VERBOSE +#if !defined(yyoverflow) || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: - yyerror (stack, scanner, YY_("memory exhausted")); + yyerror (YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif @@ -1855,7 +1868,7 @@ yyreturn: user semantic actions for why this is necessary. */ yytoken = YYTRANSLATE (yychar); yydestruct ("Cleanup: discarding lookahead", - yytoken, &yylval, stack, scanner); + yytoken, &yylval); } /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ @@ -1864,7 +1877,7 @@ yyreturn: while (yyssp != yyss) { yydestruct ("Cleanup: popping", - yystos[*yyssp], yyvsp, stack, scanner); + yystos[*yyssp], yyvsp); YYPOPSTACK (1); } #ifndef yyoverflow @@ -1880,6 +1893,30 @@ yyreturn: } -/* Line 2055 of yacc.c */ -#line 168 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" + +/* Line 2067 of yacc.c */ +#line 158 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" + + +static int yyerror(const char *msg) { + TSRMLS_FETCH(); + + phpdbg_error("Parse Error: %s", msg); + + { + const phpdbg_param_t *top = PHPDBG_G(parser_stack); + + while (top) { + phpdbg_param_debug(top, "--> "); + top = top->next; + } + } + return 0; +} + +int phpdbg_do_parse(phpdbg_param_t *stack, char *input TSRMLS_DC) { + phpdbg_init_lexer(stack, input TSRMLS_CC); + + return yyparse(); +} diff --git a/phpdbg_parser.h b/phpdbg_parser.h index 6acb8963c9e..3f1eb5cd49a 100644 --- a/phpdbg_parser.h +++ b/phpdbg_parser.h @@ -1,8 +1,8 @@ -/* A Bison parser, made by GNU Bison 2.7. */ +/* A Bison parser, made by GNU Bison 2.5. */ /* Bison interface for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -30,18 +30,10 @@ This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ -#ifndef YY_YY_SAPI_PHPDBG_PHPDBG_PARSER_H_INCLUDED -# define YY_YY_SAPI_PHPDBG_PHPDBG_PARSER_H_INCLUDED -/* Enabling traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif -#if YYDEBUG -extern int yydebug; -#endif /* "%code requires" blocks. */ -/* Line 2058 of yacc.c */ -#line 40 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" + +/* Line 2068 of yacc.c */ +#line 31 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" #include "phpdbg.h" #ifndef YY_TYPEDEF_YY_SCANNER_T @@ -50,8 +42,9 @@ typedef void* yyscan_t; #endif -/* Line 2058 of yacc.c */ -#line 55 "sapi/phpdbg/phpdbg_parser.h" + +/* Line 2068 of yacc.c */ +#line 48 "sapi/phpdbg/phpdbg_parser.h" /* Tokens. */ #ifndef YYTOKENTYPE @@ -101,6 +94,7 @@ typedef void* yyscan_t; + #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef int YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 @@ -109,18 +103,5 @@ typedef int YYSTYPE; #endif -#ifdef YYPARSE_PARAM -#if defined __STDC__ || defined __cplusplus -int yyparse (void *YYPARSE_PARAM); -#else -int yyparse (); -#endif -#else /* ! YYPARSE_PARAM */ -#if defined __STDC__ || defined __cplusplus -int yyparse (phpdbg_param_t *stack, yyscan_t scanner); -#else -int yyparse (); -#endif -#endif /* ! YYPARSE_PARAM */ -#endif /* !YY_YY_SAPI_PHPDBG_PHPDBG_PARSER_H_INCLUDED */ + diff --git a/phpdbg_parser.y b/phpdbg_parser.y index 4a84504e2e5..55671babe49 100644 --- a/phpdbg_parser.y +++ b/phpdbg_parser.y @@ -1,4 +1,3 @@ -%error-verbose %{ /* @@ -19,23 +18,15 @@ #include "phpdbg_parser.h" #include "phpdbg_lexer.h" +#undef yyerror +static int yyerror(const char *msg); + ZEND_EXTERN_MODULE_GLOBALS(phpdbg); -int yyerror(phpdbg_param_t *stack, yyscan_t scanner, const char *msg) { - TSRMLS_FETCH(); - phpdbg_error("Parse Error: %s", msg); - { - const phpdbg_param_t *top = stack; - - while (top) { - phpdbg_param_debug( - top, "--> "); - top = top->next; - } - } - return 0; -} %} + +%pure-parser +%error-verbose %code requires { #include "phpdbg.h" @@ -44,59 +35,56 @@ int yyerror(phpdbg_param_t *stack, yyscan_t scanner, const char *msg) { typedef void* yyscan_t; #endif } + %output "sapi/phpdbg/phpdbg_parser.c" %defines "sapi/phpdbg/phpdbg_parser.h" - -%define api.pure -%lex-param { yyscan_t scanner } -%parse-param { phpdbg_param_t *stack } -%parse-param { yyscan_t scanner } -%token T_EVAL "eval" -%token T_RUN "run" -%token T_SHELL "shell" -%token T_IF "if (condition)" -%token T_TRUTHY "truthy (true, on, yes or enabled)" -%token T_FALSY "falsy (false, off, no or disabled)" -%token T_STRING "string (some input, perhaps)" -%token T_COLON ": (colon)" -%token T_DCOLON ":: (double colon)" -%token T_POUND "# (pound sign)" -%token T_PROTO "protocol (file://)" -%token T_DIGITS "digits (numbers)" -%token T_LITERAL "literal (string)" -%token T_ADDR "address" -%token T_OPCODE "opcode" -%token T_ID "identifier (command or function name)" -%token T_INPUT "input (input string or data)" -%token T_UNEXPECTED "input" -%% +%token T_EVAL "eval" +%token T_RUN "run" +%token T_SHELL "shell" +%token T_IF "if (condition)" +%token T_TRUTHY "truthy (true, on, yes or enabled)" +%token T_FALSY "falsy (false, off, no or disabled)" +%token T_STRING "string (some input, perhaps)" +%token T_COLON ": (colon)" +%token T_DCOLON ":: (double colon)" +%token T_POUND "# (pound sign)" +%token T_PROTO "protocol (file://)" +%token T_DIGITS "digits (numbers)" +%token T_LITERAL "literal (string)" +%token T_ADDR "address" +%token T_OPCODE "opcode" +%token T_ID "identifier (command or function name)" +%token T_INPUT "input (input string or data)" +%token T_UNEXPECTED "input" + +%% /* Rules */ input - : parameters - | /* nothing */ - ; + : parameters + | full_expression { phpdbg_stack_push(PHPDBG_G(parser_stack), &$1); } + | /* nothing */ + ; parameters - : parameter { phpdbg_stack_push(stack, &$1); } - | parameters parameter { phpdbg_stack_push(stack, &$2); } + : parameter { phpdbg_stack_push(PHPDBG_G(parser_stack), &$1); } + | parameters parameter { phpdbg_stack_push(PHPDBG_G(parser_stack), &$2); } ; parameter - : T_ID T_COLON T_DIGITS { + : T_ID T_COLON T_DIGITS { $$.type = FILE_PARAM; $$.file.name = $2.str; $$.file.line = $3.num; } - | T_ID T_COLON T_POUND T_DIGITS { + | T_ID T_COLON T_POUND T_DIGITS { $$.type = NUMERIC_FILE_PARAM; $$.file.name = $1.str; $$.file.line = $4.num; } - | T_PROTO T_ID T_COLON T_DIGITS { + | T_PROTO T_ID T_COLON T_DIGITS { $$.type = FILE_PARAM; - $$.file.name = malloc($1.len + - $2.len + 1); + $$.file.name = malloc($1.len + $2.len + 1); if ($$.file.name) { memcpy(&$$.file.name[0], $1.str, $1.len); memcpy(&$$.file.name[$1.len], $2.str, $2.len); @@ -104,10 +92,9 @@ parameter } $$.file.line = $4.num; } - | T_PROTO T_ID T_COLON T_POUND T_DIGITS { + | T_PROTO T_ID T_COLON T_POUND T_DIGITS { $$.type = NUMERIC_FILE_PARAM; - $$.file.name = malloc($1.len + - $2.len + 1); + $$.file.name = malloc($1.len + $2.len + 1); if ($$.file.name) { memcpy(&$$.file.name[0], $1.str, $1.len); memcpy(&$$.file.name[$1.len], $2.str, $2.len); @@ -115,54 +102,79 @@ parameter } $$.file.line = $5.num; } - | T_ID T_DCOLON T_ID { + | T_ID T_DCOLON T_ID { $$.type = METHOD_PARAM; $$.method.class = $1.str; $$.method.name = $3.str; } - | T_ID T_DCOLON T_ID T_POUND T_DIGITS { + | T_ID T_DCOLON T_ID T_POUND T_DIGITS { $$.type = NUMERIC_METHOD_PARAM; $$.method.class = $1.str; $$.method.name = $3.str; $$.num = $5.num; } - | T_ID T_POUND T_DIGITS { + | T_ID T_POUND T_DIGITS { $$.type = NUMERIC_FUNCTION_PARAM; $$.str = $1.str; $$.len = $1.len; $$.num = $3.num; } - | T_IF T_INPUT { + | T_OPCODE { $$ = $1; } + | T_ADDR { $$ = $1; } + | T_LITERAL { $$ = $1; } + | T_TRUTHY { $$ = $1; } + | T_FALSY { $$ = $1; } + | T_DIGITS { $$ = $1; } + | T_ID { $$ = $1; } + ; + +full_expression + : T_IF T_INPUT { $$.type = COND_PARAM; $$.str = $2.str; $$.len = $2.len; } - | T_EVAL T_INPUT { + | T_EVAL T_INPUT { $$.type = EVAL_PARAM; $$.str = $2.str; $$.len = $2.len; } - | T_SHELL T_INPUT { + | T_SHELL T_INPUT { $$.type = SHELL_PARAM; $$.str = $2.str; $$.len = $2.len; } - | T_RUN { + | T_RUN { $$.type = RUN_PARAM; $$.len = 0; } - | T_RUN T_INPUT { + | T_RUN T_INPUT { $$.type = RUN_PARAM; $$.str = $2.str; $$.len = $2.len; } - | T_OPCODE { $$ = $1; } - | T_ADDR { $$ = $1; } - | T_LITERAL { $$ = $1; } - | T_TRUTHY { $$ = $1; } - | T_FALSY { $$ = $1; } - | T_DIGITS { $$ = $1; } - | T_ID { $$ = $1; } ; %% + +static int yyerror(const char *msg) { + TSRMLS_FETCH(); + + phpdbg_error("Parse Error: %s", msg); + + { + const phpdbg_param_t *top = PHPDBG_G(parser_stack); + + while (top) { + phpdbg_param_debug(top, "--> "); + top = top->next; + } + } + return 0; +} + +int phpdbg_do_parse(phpdbg_param_t *stack, char *input TSRMLS_DC) { + phpdbg_init_lexer(stack, input TSRMLS_CC); + + return yyparse(); +} diff --git a/phpdbg_prompt.c b/phpdbg_prompt.c index 7a28a75129f..3fbda219d13 100644 --- a/phpdbg_prompt.c +++ b/phpdbg_prompt.c @@ -248,20 +248,10 @@ void phpdbg_try_file_init(char *init_file, size_t init_file_len, zend_bool free_ char *why = NULL; char *input = phpdbg_read_input(cmd TSRMLS_CC); phpdbg_param_t stack; - yyscan_t scanner; - YY_BUFFER_STATE state; phpdbg_init_param(&stack, STACK_PARAM); - - if (yylex_init(&scanner)) { - phpdbg_error( - "could not initialize scanner"); - break; - } - state = yy_scan_string(input, scanner); - - if (yyparse(&stack, scanner) <= 0) { + if (phpdbg_do_parse(&stack, input) <= 0) { switch (phpdbg_stack_execute(&stack, &why TSRMLS_CC)) { case FAILURE: // if (!(PHPDBG_G(flags) & PHPDBG_IS_QUITTING)) { @@ -274,15 +264,12 @@ void phpdbg_try_file_init(char *init_file, size_t init_file_len, zend_bool free_ break; } } - + if (why) { free(why); why = NULL; } - - yy_delete_buffer(state, scanner); - yylex_destroy(scanner); - + phpdbg_stack_free(&stack); phpdbg_destroy_input(&input TSRMLS_CC); } @@ -1014,20 +1001,9 @@ int phpdbg_interactive(TSRMLS_D) /* {{{ */ if (input) { do { - yyscan_t scanner; - YY_BUFFER_STATE state; - phpdbg_init_param(&stack, STACK_PARAM); - if (yylex_init(&scanner)) { - phpdbg_error( - "could not initialize scanner"); - return FAILURE; - } - - state = yy_scan_string(input, scanner); - - if (yyparse(&stack, scanner) <= 0) { + if (phpdbg_do_parse(&stack, input) <= 0) { switch (ret = phpdbg_stack_execute(&stack, &why TSRMLS_CC)) { case FAILURE: if (!(PHPDBG_G(flags) & PHPDBG_IS_QUITTING)) { @@ -1061,9 +1037,6 @@ int phpdbg_interactive(TSRMLS_D) /* {{{ */ why = NULL; } - yy_delete_buffer(state, scanner); - yylex_destroy(scanner); - phpdbg_stack_free(&stack); phpdbg_destroy_input(&input TSRMLS_CC); From 5fd7c2b01ddfcf932f364dc7065e7b0dd492655e Mon Sep 17 00:00:00 2001 From: Jeff Welch Date: Sun, 8 Jun 2014 04:09:14 -0400 Subject: [PATCH 18/77] Remove superfluous echos. --- ext/exif/tests/exif004.phpt | 2 +- ext/reflection/tests/ReflectionFunction_isClosure_basic.phpt | 2 +- .../tests/ReflectionFunction_isDeprecated_basic.phpt | 2 +- ext/reflection/tests/ReflectionFunction_isDisabled_basic.phpt | 2 +- ext/zlib/tests/gzseek_basic2.phpt | 4 ++-- ext/zlib/tests/gzseek_variation1.phpt | 4 ++-- ext/zlib/tests/gzseek_variation4.phpt | 4 ++-- ext/zlib/tests/gzseek_variation5.phpt | 4 ++-- 8 files changed, 12 insertions(+), 12 deletions(-) diff --git a/ext/exif/tests/exif004.phpt b/ext/exif/tests/exif004.phpt index 229f49e1459..8797955f8c8 100644 --- a/ext/exif/tests/exif004.phpt +++ b/ext/exif/tests/exif004.phpt @@ -18,7 +18,7 @@ exif.encode_unicode=ISO-8859-1 test4.jpg is a 1*1 image that contains Exif tags written by WindowsXP */ $image = exif_read_data(dirname(__FILE__).'/test4.jpg','',true,false); -echo var_dump($image['WINXP']); +var_dump($image['WINXP']); ?> --EXPECT-- array(5) { diff --git a/ext/reflection/tests/ReflectionFunction_isClosure_basic.phpt b/ext/reflection/tests/ReflectionFunction_isClosure_basic.phpt index eeaf8d382c8..368464e1303 100644 --- a/ext/reflection/tests/ReflectionFunction_isClosure_basic.phpt +++ b/ext/reflection/tests/ReflectionFunction_isClosure_basic.phpt @@ -13,6 +13,6 @@ if (!extension_loaded('reflection') || !defined('PHP_VERSION_ID') || PHP_VERSION isClosure()); +var_dump($rc->isClosure()); --EXPECTF-- bool(true) diff --git a/ext/reflection/tests/ReflectionFunction_isDeprecated_basic.phpt b/ext/reflection/tests/ReflectionFunction_isDeprecated_basic.phpt index 31d37a85f17..4148fada0cd 100644 --- a/ext/reflection/tests/ReflectionFunction_isDeprecated_basic.phpt +++ b/ext/reflection/tests/ReflectionFunction_isDeprecated_basic.phpt @@ -10,6 +10,6 @@ if (!extension_loaded('reflection') || !defined('PHP_VERSION_ID') || PHP_VERSION --FILE-- isDeprecated()); +var_dump($rc->isDeprecated()); --EXPECTF-- bool(true) diff --git a/ext/reflection/tests/ReflectionFunction_isDisabled_basic.phpt b/ext/reflection/tests/ReflectionFunction_isDisabled_basic.phpt index c71b96b8ef0..30189cf4de5 100644 --- a/ext/reflection/tests/ReflectionFunction_isDisabled_basic.phpt +++ b/ext/reflection/tests/ReflectionFunction_isDisabled_basic.phpt @@ -12,6 +12,6 @@ disable_functions=is_file --FILE-- isDisabled()); +var_dump($rc->isDisabled()); --EXPECTF-- bool(true) diff --git a/ext/zlib/tests/gzseek_basic2.phpt b/ext/zlib/tests/gzseek_basic2.phpt index a815b8ff417..861b3c8dbe8 100644 --- a/ext/zlib/tests/gzseek_basic2.phpt +++ b/ext/zlib/tests/gzseek_basic2.phpt @@ -24,7 +24,7 @@ gzclose($h); echo "\nreading the output file\n"; $h = gzopen($f, 'r'); echo gzread($h, strlen($str1))."\n"; -echo var_dump(bin2hex(gzread($h, 20))); +var_dump(bin2hex(gzread($h, 20))); echo gzread($h, strlen($str2))."\n"; gzclose($h); unlink($f); @@ -39,4 +39,4 @@ reading the output file This is the first line. string(40) "0000000000000000000000000000000000000000" This is the second line. -===DONE=== \ No newline at end of file +===DONE=== diff --git a/ext/zlib/tests/gzseek_variation1.phpt b/ext/zlib/tests/gzseek_variation1.phpt index 301b57d151f..4dec495f920 100644 --- a/ext/zlib/tests/gzseek_variation1.phpt +++ b/ext/zlib/tests/gzseek_variation1.phpt @@ -20,7 +20,7 @@ gzwrite($h, $str2); gzclose($h); $h = gzopen($f, 'r'); echo gzread($h, strlen($str1))."\n"; -echo var_dump(bin2hex(gzread($h, 20))); +var_dump(bin2hex(gzread($h, 20))); echo gzread($h, strlen($str2))."\n"; gzclose($h); unlink($f); @@ -30,4 +30,4 @@ unlink($f); This is the first line. string(40) "0000000000000000000000000000000000000000" This is the second line. -===DONE=== \ No newline at end of file +===DONE=== diff --git a/ext/zlib/tests/gzseek_variation4.phpt b/ext/zlib/tests/gzseek_variation4.phpt index fc641f6c82c..4c66d7451b4 100644 --- a/ext/zlib/tests/gzseek_variation4.phpt +++ b/ext/zlib/tests/gzseek_variation4.phpt @@ -24,7 +24,7 @@ gzclose($h); echo "\nreading the output file\n"; $h = gzopen($f, 'r'); echo gzread($h, strlen($str1))."\n"; -echo var_dump(bin2hex(gzread($h, 20))); +var_dump(bin2hex(gzread($h, 20))); echo gzread($h, strlen($str2))."\n"; gzclose($h); unlink($f); @@ -39,4 +39,4 @@ reading the output file This is the first line. string(40) "0000000000000000000000000000000000000000" This is the second line. -===DONE=== \ No newline at end of file +===DONE=== diff --git a/ext/zlib/tests/gzseek_variation5.phpt b/ext/zlib/tests/gzseek_variation5.phpt index 0167e204c23..b82688b6d43 100644 --- a/ext/zlib/tests/gzseek_variation5.phpt +++ b/ext/zlib/tests/gzseek_variation5.phpt @@ -24,7 +24,7 @@ gzclose($h); echo "\nreading the output file\n"; $h = gzopen($f, 'r'); echo gzread($h, strlen($str1))."\n"; -echo var_dump(bin2hex(gzread($h, 20))); +var_dump(bin2hex(gzread($h, 20))); echo gzread($h, strlen($str2))."\n"; gzclose($h); unlink($f); @@ -39,4 +39,4 @@ reading the output file This is the first line. string(40) "0000000000000000000000000000000000000000" This is the second line. -===DONE=== \ No newline at end of file +===DONE=== From 04908509573ef599b20fa815083cce093b675541 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Sun, 8 Jun 2014 22:16:06 +0100 Subject: [PATCH 19/77] remove phpdbg directory from source tree on travis --- travis/ci.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/travis/ci.sh b/travis/ci.sh index 44d56a01ffe..d9f3ac6a02b 100755 --- a/travis/ci.sh +++ b/travis/ci.sh @@ -1,6 +1,7 @@ #!/usr/bin/env sh git clone https://github.com/php/php-src cd php-src/sapi +rm -rf phpdbg git clone https://github.com/krakjoe/phpdbg.git cd ../ ./buildconf --force From 76a7fd893b7d6101300cc656058704a73254d593 Mon Sep 17 00:00:00 2001 From: Paul Oehler Date: Tue, 13 May 2014 13:38:25 -0400 Subject: [PATCH 20/77] Added support for parsing ssl certificates using GeneralizedTime format. fix bug #65698 fix bug #66636 --- NEWS | 9 ++++++++- ext/openssl/openssl.c | 24 ++++++++++++++++++------ ext/openssl/tests/bug65698.crt | 28 ++++++++++++++++++++++++++++ ext/openssl/tests/bug65698.phpt | 19 +++++++++++++++++++ ext/openssl/tests/cve-2013-6420.phpt | 2 +- 5 files changed, 74 insertions(+), 8 deletions(-) create mode 100644 ext/openssl/tests/bug65698.crt create mode 100644 ext/openssl/tests/bug65698.phpt diff --git a/NEWS b/NEWS index bb2cb1fd02d..7354aa9dba9 100644 --- a/NEWS +++ b/NEWS @@ -14,7 +14,14 @@ PHP NEWS (Remi) - Fileinfo: - . Fixed bug #67326 (fileinfo: cdf_read_short_sector insufficient boundary check). + . Fixed bug #67326 (fileinfo: cdf_read_short_sector insufficient boundary + check). + +- OpenSSL: + . Fixed bug #65698 (certificates validity parsing does not work past 2050). + (Paul Oehler) + . Fixed bug #66636 (openssl_x509_parse warning with V_ASN1_GENERALIZEDTIME). + (Paul Oehler) - SPL: . Fixed bug #67359 (Segfault in recursiveDirectoryIterator). (Laruence) diff --git a/ext/openssl/openssl.c b/ext/openssl/openssl.c index 257681f045f..0ec2a9a6bd6 100755 --- a/ext/openssl/openssl.c +++ b/ext/openssl/openssl.c @@ -649,7 +649,7 @@ static time_t asn1_time_to_time_t(ASN1_UTCTIME * timestr TSRMLS_DC) /* {{{ */ char * thestr; long gmadjust = 0; - if (ASN1_STRING_type(timestr) != V_ASN1_UTCTIME) { + if (ASN1_STRING_type(timestr) != V_ASN1_UTCTIME && ASN1_STRING_type(timestr) != V_ASN1_GENERALIZEDTIME) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "illegal ASN1 data type for timestamp"); return (time_t)-1; } @@ -664,6 +664,11 @@ static time_t asn1_time_to_time_t(ASN1_UTCTIME * timestr TSRMLS_DC) /* {{{ */ return (time_t)-1; } + if (ASN1_STRING_type(timestr) == V_ASN1_GENERALIZEDTIME && ASN1_STRING_length(timestr) < 15) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to parse time string %s correctly", timestr->data); + return (time_t)-1; + } + strbuf = estrdup((char *)ASN1_STRING_data(timestr)); memset(&thetime, 0, sizeof(thetime)); @@ -685,14 +690,21 @@ static time_t asn1_time_to_time_t(ASN1_UTCTIME * timestr TSRMLS_DC) /* {{{ */ *thestr = '\0'; thestr -= 2; thetime.tm_mon = atoi(thestr)-1; - *thestr = '\0'; - thestr -= 2; - thetime.tm_year = atoi(thestr); - if (thetime.tm_year < 68) { - thetime.tm_year += 100; + *thestr = '\0'; + if( ASN1_STRING_type(timestr) == V_ASN1_UTCTIME ) { + thestr -= 2; + thetime.tm_year = atoi(thestr); + + if (thetime.tm_year < 68) { + thetime.tm_year += 100; + } + } else if( ASN1_STRING_type(timestr) == V_ASN1_GENERALIZEDTIME ) { + thestr -= 4; + thetime.tm_year = atoi(thestr) - 1900; } + thetime.tm_isdst = -1; ret = mktime(&thetime); diff --git a/ext/openssl/tests/bug65698.crt b/ext/openssl/tests/bug65698.crt new file mode 100644 index 00000000000..c4a02611387 --- /dev/null +++ b/ext/openssl/tests/bug65698.crt @@ -0,0 +1,28 @@ +-----BEGIN CERTIFICATE----- +MIIEsTCCA5mgAwIBAgIQdwrGwrpRpBwdXS+ZsmsMGjANBgkqhkiG9w0BAQUFADA+ +MQswCQYDVQQGEwJQTDEbMBkGA1UEChMSVW5pemV0byBTcC4geiBvLm8uMRIwEAYD +VQQDEwlDZXJ0dW0gQ0EwIhgPMjAwOTAzMDMxMjUzMThaGA8yMDI0MDMwMzEyNTMx +OFowdzELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVz +IFMuQS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEb +MBkGA1UEAxMSQ2VydHVtIExldmVsIElJIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEA4LE0Ixw8h5Lper9tHVtZkWIujxYsPVgUZABeZZgQsKTdJjaG +VP64B/oiEV5Hd3AxRqaZ7dRRsf4Pg/PSS/2mHRQQ/SH3XACbrDHmucDvYgtU/WoZ +yp9d6PXVPY4j7J5t/52s+EbZD5swSuQLGjZ9iwg9sXX3JdJ9Ty+B3z80oiajpK0B +wqAxrcX3DekEOknj7LkAOK6iuQKI85REj4IVb9kD7KKIWdISGbfL4Ezh/TP51e0L +/WhTJ7lHbHbRzFfPU/oi3Qyt5tEexrPKe+6N+Jrejdb5Ya7Ne3tKujDU7KlbO+dn +pzFH7VHkBPJcQJ7QUrprPaqVsVg3JJ1PXTqVnwIDAQABo4IBbDCCAWgwDwYDVR0T +AQH/BAUwAwEB/zAdBgNVHQ4EFgQUgGIR3sBrpxDhCPBVtDCDv/qPCGAwUgYDVR0j +BEswSaFCpEAwPjELMAkGA1UEBhMCUEwxGzAZBgNVBAoTElVuaXpldG8gU3AuIHog +by5vLjESMBAGA1UEAxMJQ2VydHVtIENBggMBACAwDgYDVR0PAQH/BAQDAgEGMCwG +A1UdHwQlMCMwIaAfoB2GG2h0dHA6Ly9jcmwuY2VydHVtLnBsL2NhLmNybDBoBggr +BgEFBQcBAQRcMFowKAYIKwYBBQUHMAGGHGh0dHA6Ly9zdWJjYS5vY3NwLWNlcnR1 +bS5jb20wLgYIKwYBBQUHMAKGImh0dHA6Ly9yZXBvc2l0b3J5LmNlcnR1bS5wbC9j +YS5jZXIwOgYDVR0gBDMwMTAvBgRVHSAAMCcwJQYIKwYBBQUHAgEWGWh0dHBzOi8v +d3d3LmNlcnR1bS5wbC9DUFMwDQYJKoZIhvcNAQEFBQADggEBAI/jSDAW/w9qLzF6 +4oQiIRB7dGKp2Nlj27xZFYDBRINn4DKyZExkpanASF2of9eEzvrS+qoDY29mhXCi +MkiGr0vCsVhn0ReUpjg4Z5SsiQhZ2BGSjXiOJgaDI7Dw1MH7Ru6jdfSbLyd97EFj +ER0ERGdrcA2kLw7KfQm78IkClXEEKjKnAUTn1d/5Y4UuBWDCEL0FLgO9AqNXEzIy +rlXVGIs73kdefAK+Z1T6dm83vUrDMyzemWNRBI2tVBujkN6zkaF6uPjE4hfoIkEQ +Z4317byFkG4mxjATU+tQLG1Bs88HUAOrxtJOo/WoeCNsFJaxbYPt4oQGxIVYdz29 +OUX9CQA= +-----END CERTIFICATE----- diff --git a/ext/openssl/tests/bug65698.phpt b/ext/openssl/tests/bug65698.phpt new file mode 100644 index 00000000000..35d31764d5d --- /dev/null +++ b/ext/openssl/tests/bug65698.phpt @@ -0,0 +1,19 @@ +--TEST-- +Bug #65689 (GeneralizedTime format parsing) +--SKIPIF-- + +--FILE-- + +Done +--EXPECTF-- +string(15) "20090303125318Z" +int(1236084798) +string(15) "20240303125318Z" +int(1709470398) +Done diff --git a/ext/openssl/tests/cve-2013-6420.phpt b/ext/openssl/tests/cve-2013-6420.phpt index 87c0210b2ef..ccead0aab67 100644 --- a/ext/openssl/tests/cve-2013-6420.phpt +++ b/ext/openssl/tests/cve-2013-6420.phpt @@ -12,7 +12,7 @@ var_dump($info['issuer']['emailAddress'], $info["validFrom_time_t"]); ?> Done --EXPECTF-- -%s openssl_x509_parse(): illegal ASN1 data type for timestamp in %s%ecve-2013-6420.php on line 3 +%s openssl_x509_parse(): illegal length in timestamp in %s%ecve-2013-6420.php on line 3 string(27) "stefan.esser@sektioneins.de" int(-1) Done From e51eaaf665dd6b5668a4d62babc64b6adafb1143 Mon Sep 17 00:00:00 2001 From: Jefersson Nathan Date: Mon, 12 May 2014 13:37:47 -0300 Subject: [PATCH 21/77] Fix align indentation --- Zend/zend_builtin_functions.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c index f3dd12346d3..e4002fa224a 100644 --- a/Zend/zend_builtin_functions.c +++ b/Zend/zend_builtin_functions.c @@ -245,16 +245,16 @@ static const zend_function_entry builtin_functions[] = { /* {{{ */ ZEND_FE(func_num_args, arginfo_zend__void) ZEND_FE(func_get_arg, arginfo_func_get_arg) ZEND_FE(func_get_args, arginfo_zend__void) - ZEND_FE(strlen, arginfo_strlen) - ZEND_FE(strcmp, arginfo_strcmp) - ZEND_FE(strncmp, arginfo_strncmp) - ZEND_FE(strcasecmp, arginfo_strcmp) + ZEND_FE(strlen, arginfo_strlen) + ZEND_FE(strcmp, arginfo_strcmp) + ZEND_FE(strncmp, arginfo_strncmp) + ZEND_FE(strcasecmp, arginfo_strcmp) ZEND_FE(strncasecmp, arginfo_strncmp) - ZEND_FE(each, arginfo_each) + ZEND_FE(each, arginfo_each) ZEND_FE(error_reporting, arginfo_error_reporting) - ZEND_FE(define, arginfo_define) - ZEND_FE(defined, arginfo_defined) - ZEND_FE(get_class, arginfo_get_class) + ZEND_FE(define, arginfo_define) + ZEND_FE(defined, arginfo_defined) + ZEND_FE(get_class, arginfo_get_class) ZEND_FE(get_called_class, arginfo_zend__void) ZEND_FE(get_parent_class, arginfo_get_class) ZEND_FE(method_exists, arginfo_method_exists) @@ -274,13 +274,13 @@ static const zend_function_entry builtin_functions[] = { /* {{{ */ ZEND_FE(get_included_files, arginfo_zend__void) ZEND_FALIAS(get_required_files, get_included_files, arginfo_zend__void) ZEND_FE(is_subclass_of, arginfo_is_subclass_of) - ZEND_FE(is_a, arginfo_is_subclass_of) + ZEND_FE(is_a, arginfo_is_subclass_of) ZEND_FE(get_class_vars, arginfo_get_class_vars) ZEND_FE(get_object_vars, arginfo_get_object_vars) ZEND_FE(get_class_methods, arginfo_get_class_methods) ZEND_FE(trigger_error, arginfo_trigger_error) ZEND_FALIAS(user_error, trigger_error, arginfo_trigger_error) - ZEND_FE(set_error_handler, arginfo_set_error_handler) + ZEND_FE(set_error_handler, arginfo_set_error_handler) ZEND_FE(restore_error_handler, arginfo_zend__void) ZEND_FE(set_exception_handler, arginfo_set_exception_handler) ZEND_FE(restore_exception_handler, arginfo_zend__void) @@ -288,14 +288,14 @@ static const zend_function_entry builtin_functions[] = { /* {{{ */ ZEND_FE(get_declared_traits, arginfo_zend__void) ZEND_FE(get_declared_interfaces, arginfo_zend__void) ZEND_FE(get_defined_functions, arginfo_zend__void) - ZEND_FE(get_defined_vars, arginfo_zend__void) - ZEND_FE(create_function, arginfo_create_function) - ZEND_FE(get_resource_type, arginfo_get_resource_type) + ZEND_FE(get_defined_vars, arginfo_zend__void) + ZEND_FE(create_function, arginfo_create_function) + ZEND_FE(get_resource_type, arginfo_get_resource_type) ZEND_FE(get_loaded_extensions, arginfo_get_loaded_extensions) - ZEND_FE(extension_loaded, arginfo_extension_loaded) + ZEND_FE(extension_loaded, arginfo_extension_loaded) ZEND_FE(get_extension_funcs, arginfo_extension_loaded) ZEND_FE(get_defined_constants, arginfo_get_defined_constants) - ZEND_FE(debug_backtrace, arginfo_debug_backtrace) + ZEND_FE(debug_backtrace, arginfo_debug_backtrace) ZEND_FE(debug_print_backtrace, arginfo_debug_print_backtrace) #if ZEND_DEBUG ZEND_FE(zend_test_func, NULL) @@ -305,7 +305,7 @@ static const zend_function_entry builtin_functions[] = { /* {{{ */ #endif ZEND_FE(gc_collect_cycles, arginfo_zend__void) ZEND_FE(gc_enabled, arginfo_zend__void) - ZEND_FE(gc_enable, arginfo_zend__void) + ZEND_FE(gc_enable, arginfo_zend__void) ZEND_FE(gc_disable, arginfo_zend__void) ZEND_FE_END }; From 33926b19d09d54ee43854eb59a987cd812179a7f Mon Sep 17 00:00:00 2001 From: Jefersson Nathan Date: Tue, 23 Apr 2013 08:24:15 -0300 Subject: [PATCH 22/77] Fixed identation on file From 7cfe696371374430f7da8ef61e14b2f4f4b9e53f Mon Sep 17 00:00:00 2001 From: Bob Weinand Date: Mon, 9 Jun 2014 00:02:10 +0200 Subject: [PATCH 23/77] Fix ZTS build --- phpdbg_lexer.c | 96 ++++++------ phpdbg_lexer.l | 2 +- phpdbg_parser.c | 379 +++++++++++++++++++++++------------------------- phpdbg_parser.h | 39 +++-- phpdbg_parser.y | 14 +- phpdbg_prompt.c | 6 +- 6 files changed, 273 insertions(+), 263 deletions(-) diff --git a/phpdbg_lexer.c b/phpdbg_lexer.c index 6bacd9939c8..81fc4d611b0 100644 --- a/phpdbg_lexer.c +++ b/phpdbg_lexer.c @@ -1,5 +1,5 @@ /* Generated by re2c 0.13.5 */ -#line 1 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" +#line 1 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" /* * phpdbg_lexer.l */ @@ -26,7 +26,7 @@ #define RAW 1 #define INITIAL 2 -ZEND_DECLARE_MODULE_GLOBALS(phpdbg); +ZEND_EXTERN_MODULE_GLOBALS(phpdbg); void phpdbg_init_lexer (phpdbg_param_t *stack, char *input TSRMLS_DC) { PHPDBG_G(parser_stack) = stack; @@ -44,7 +44,7 @@ restart: LEX(text) = YYCURSOR; -#line 48 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 48 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" { YYCTYPE yych; unsigned int yyaccept = 0; @@ -126,14 +126,14 @@ yy2: yy3: YYDEBUG(3, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 161 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" +#line 161 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { YYSETCONDITION(NORMAL); YYCURSOR = LEX(text); goto restart; } -#line 137 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 137 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy4: YYDEBUG(4, *YYCURSOR); ++YYCURSOR; @@ -142,11 +142,11 @@ yy4: } YYDEBUG(5, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 68 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" +#line 68 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { return 0; } -#line 150 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 150 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy6: YYDEBUG(6, *YYCURSOR); yych = *++YYCURSOR; @@ -165,13 +165,13 @@ yy8: yy9: YYDEBUG(9, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 155 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" +#line 155 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { YYSETCONDITION(RAW); phpdbg_init_param(yylval, EMPTY_PARAM); return T_RUN; } -#line 175 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 175 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy10: YYDEBUG(10, *YYCURSOR); yych = *++YYCURSOR; @@ -192,25 +192,25 @@ yy14: ++YYCURSOR; YYDEBUG(15, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 150 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" +#line 150 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { YYSETCONDITION(RAW); phpdbg_init_param(yylval, EMPTY_PARAM); return T_SHELL; } -#line 202 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 202 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy16: YYDEBUG(16, *YYCURSOR); ++YYCURSOR; YYDEBUG(17, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 145 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" +#line 145 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { YYSETCONDITION(RAW); phpdbg_init_param(yylval, EMPTY_PARAM); return T_EVAL; } -#line 214 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 214 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy18: YYDEBUG(18, *YYCURSOR); ++YYCURSOR; @@ -222,13 +222,13 @@ yy18: } YYDEBUG(20, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 139 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" +#line 139 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { /* ignore whitespace */ goto restart; } -#line 232 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 232 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" } /* *********************************** */ yyc_NORMAL: @@ -330,13 +330,13 @@ yy23: } YYDEBUG(25, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 139 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" +#line 139 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { /* ignore whitespace */ goto restart; } -#line 340 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 340 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy26: YYDEBUG(26, *YYCURSOR); ++YYCURSOR; @@ -345,11 +345,11 @@ yy26: } YYDEBUG(27, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 68 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" +#line 68 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { return 0; } -#line 353 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 353 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy28: YYDEBUG(28, *YYCURSOR); yyaccept = 0; @@ -359,14 +359,14 @@ yy28: yy29: YYDEBUG(29, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 125 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" +#line 125 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { phpdbg_init_param(yylval, STR_PARAM); yylval->str = zend_strndup(yytext, yyleng); yylval->len = yyleng; return T_ID; } -#line 370 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 370 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy30: YYDEBUG(30, *YYCURSOR); yyaccept = 0; @@ -408,13 +408,13 @@ yy32: yy34: YYDEBUG(34, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 106 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" +#line 106 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { phpdbg_init_param(yylval, NUMERIC_PARAM); yylval->num = atoi(yytext); return T_DIGITS; } -#line 418 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 418 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy35: YYDEBUG(35, *YYCURSOR); yyaccept = 1; @@ -500,32 +500,32 @@ yy45: ++YYCURSOR; YYDEBUG(46, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 84 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" +#line 84 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { return T_POUND; } -#line 508 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 508 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy47: YYDEBUG(47, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) == ':') goto yy49; YYDEBUG(48, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 90 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" +#line 90 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { return T_COLON; } -#line 519 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 519 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy49: YYDEBUG(49, *YYCURSOR); ++YYCURSOR; YYDEBUG(50, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 87 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" +#line 87 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { return T_DCOLON; } -#line 529 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 529 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy51: YYDEBUG(51, *YYCURSOR); yyaccept = 0; @@ -572,14 +572,14 @@ yy54: ++YYCURSOR; YYDEBUG(56, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 78 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" +#line 78 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { phpdbg_init_param(yylval, STR_PARAM); yylval->str = zend_strndup(yytext, yyleng); yylval->len = yyleng; return T_PROTO; } -#line 583 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 583 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy57: YYDEBUG(57, *YYCURSOR); yyaccept = 0; @@ -625,14 +625,14 @@ yy60: yy62: YYDEBUG(62, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 118 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" +#line 118 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { phpdbg_init_param(yylval, OP_PARAM); yylval->str = zend_strndup(yytext, yyleng); yylval->len = yyleng; return T_OPCODE; } -#line 636 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 636 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy63: YYDEBUG(63, *YYCURSOR); yyaccept = 0; @@ -656,13 +656,13 @@ yy64: yy65: YYDEBUG(65, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 94 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" +#line 94 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { phpdbg_init_param(yylval, NUMERIC_PARAM); yylval->num = 1; return T_TRUTHY; } -#line 666 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 666 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy66: YYDEBUG(66, *YYCURSOR); yyaccept = 0; @@ -696,13 +696,13 @@ yy69: yy70: YYDEBUG(70, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 100 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" +#line 100 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { phpdbg_init_param(yylval, NUMERIC_PARAM); yylval->num = 0; return T_FALSY; } -#line 706 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 706 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy71: YYDEBUG(71, *YYCURSOR); yyaccept = 0; @@ -815,13 +815,13 @@ yy89: yy91: YYDEBUG(91, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 112 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" +#line 112 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { phpdbg_init_param(yylval, ADDR_PARAM); yylval->addr = strtoul(yytext, 0, 16); return T_ADDR; } -#line 825 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 825 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy92: YYDEBUG(92, *YYCURSOR); yyaccept = 6; @@ -840,13 +840,13 @@ yy92: yy93: YYDEBUG(93, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 72 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" +#line 72 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { YYSETCONDITION(RAW); phpdbg_init_param(yylval, EMPTY_PARAM); return T_IF; } -#line 850 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 850 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" } /* *********************************** */ yyc_RAW: @@ -907,14 +907,14 @@ yy96: yy98: YYDEBUG(98, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 132 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" +#line 132 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { phpdbg_init_param(yylval, STR_PARAM); yylval->str = zend_strndup(yytext, yyleng); yylval->len = yyleng; return T_INPUT; } -#line 918 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 918 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy99: YYDEBUG(99, *YYCURSOR); ++YYCURSOR; @@ -923,11 +923,11 @@ yy99: } YYDEBUG(100, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 68 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" +#line 68 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { return 0; } -#line 931 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 931 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy101: YYDEBUG(101, *YYCURSOR); ++YYCURSOR; @@ -949,15 +949,15 @@ yy103: } YYDEBUG(105, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; -#line 139 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" +#line 139 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { /* ignore whitespace */ goto restart; } -#line 959 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 959 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" } } -#line 168 "/home/pi/php-src/sapi/phpdbg/phpdbg_lexer.l" +#line 168 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" } diff --git a/phpdbg_lexer.l b/phpdbg_lexer.l index 2108f79aae5..217061081f5 100644 --- a/phpdbg_lexer.l +++ b/phpdbg_lexer.l @@ -24,7 +24,7 @@ #define RAW 1 #define INITIAL 2 -ZEND_DECLARE_MODULE_GLOBALS(phpdbg); +ZEND_EXTERN_MODULE_GLOBALS(phpdbg); void phpdbg_init_lexer (phpdbg_param_t *stack, char *input TSRMLS_DC) { PHPDBG_G(parser_stack) = stack; diff --git a/phpdbg_parser.c b/phpdbg_parser.c index 83c84c51d95..f9a3e4d299a 100644 --- a/phpdbg_parser.c +++ b/phpdbg_parser.c @@ -1,8 +1,8 @@ -/* A Bison parser, made by GNU Bison 2.5. */ +/* A Bison parser, made by GNU Bison 2.6.2. */ /* Bison implementation for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -44,7 +44,7 @@ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "2.5" +#define YYBISON_VERSION "2.6.2" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -58,8 +58,6 @@ /* Pull parsers. */ #define YYPULL 1 -/* Using locations. */ -#define YYLSP_NEEDED 0 /* Substitute the variable and function names. */ #define yyparse phpdbg_parse @@ -70,11 +68,9 @@ #define yydebug phpdbg_debug #define yynerrs phpdbg_nerrs - /* Copy the first part of user declarations. */ - -/* Line 268 of yacc.c */ -#line 1 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" +/* Line 336 of yacc.c */ +#line 1 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" /* @@ -96,19 +92,21 @@ #include "phpdbg_lexer.h" #undef yyerror -static int yyerror(const char *msg); +static int yyerror(void ***tsrm_ls, const char *msg); ZEND_EXTERN_MODULE_GLOBALS(phpdbg); +/* Line 336 of yacc.c */ +#line 102 "sapi/phpdbg/phpdbg_parser.c" -/* Line 268 of yacc.c */ -#line 107 "sapi/phpdbg/phpdbg_parser.c" - -/* Enabling traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif +# ifndef YY_NULL +# if defined __cplusplus && 201103L <= __cplusplus +# define YY_NULL nullptr +# else +# define YY_NULL 0 +# endif +# endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE @@ -118,15 +116,20 @@ ZEND_EXTERN_MODULE_GLOBALS(phpdbg); # define YYERROR_VERBOSE 1 #endif -/* Enabling the token table. */ -#ifndef YYTOKEN_TABLE -# define YYTOKEN_TABLE 0 +/* In a future release of Bison, this section will be replaced + by #include "phpdbg_parser.h". */ +#ifndef PHPDBG_SAPI_PHPDBG_PHPDBG_PARSER_H +# define PHPDBG_SAPI_PHPDBG_PHPDBG_PARSER_H +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif +#if YYDEBUG +extern int phpdbg_debug; #endif - /* "%code requires" blocks. */ - -/* Line 288 of yacc.c */ -#line 31 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" +/* Line 350 of yacc.c */ +#line 31 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" #include "phpdbg.h" #ifndef YY_TYPEDEF_YY_SCANNER_T @@ -135,9 +138,8 @@ typedef void* yyscan_t; #endif - -/* Line 288 of yacc.c */ -#line 141 "sapi/phpdbg/phpdbg_parser.c" +/* Line 350 of yacc.c */ +#line 143 "sapi/phpdbg/phpdbg_parser.c" /* Tokens. */ #ifndef YYTOKENTYPE @@ -187,7 +189,6 @@ typedef void* yyscan_t; - #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef int YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 @@ -196,11 +197,26 @@ typedef int YYSTYPE; #endif +#ifdef YYPARSE_PARAM +#if defined __STDC__ || defined __cplusplus +int phpdbg_parse (void *YYPARSE_PARAM); +#else +int phpdbg_parse (); +#endif +#else /* ! YYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus +int phpdbg_parse (void *tsrm_ls); +#else +int phpdbg_parse (); +#endif +#endif /* ! YYPARSE_PARAM */ + +#endif /* !PHPDBG_SAPI_PHPDBG_PHPDBG_PARSER_H */ + /* Copy the second part of user declarations. */ - -/* Line 343 of yacc.c */ -#line 204 "sapi/phpdbg/phpdbg_parser.c" +/* Line 353 of yacc.c */ +#line 220 "sapi/phpdbg/phpdbg_parser.c" #ifdef short # undef short @@ -306,6 +322,7 @@ YYID (yyi) # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ + /* Use EXIT_SUCCESS as a witness for stdlib.h. */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif @@ -397,20 +414,20 @@ union yyalloc #endif #if defined YYCOPY_NEEDED && YYCOPY_NEEDED -/* Copy COUNT objects from FROM to TO. The source and destination do +/* Copy COUNT objects from SRC to DST. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ -# define YYCOPY(To, From, Count) \ - __builtin_memcpy (To, From, (Count) * sizeof (*(From))) +# define YYCOPY(Dst, Src, Count) \ + __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) # else -# define YYCOPY(To, From, Count) \ - do \ - { \ - YYSIZE_T yyi; \ - for (yyi = 0; yyi < (Count); yyi++) \ - (To)[yyi] = (From)[yyi]; \ - } \ +# define YYCOPY(Dst, Src, Count) \ + do \ + { \ + YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (Dst)[yyi] = (Src)[yyi]; \ + } \ while (YYID (0)) # endif # endif @@ -496,13 +513,13 @@ static const yytype_int8 yyrhs[] = /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint8 yyrline[] = { - 0, 64, 64, 65, 66, 70, 71, 75, 80, 85, - 95, 105, 110, 116, 122, 123, 124, 125, 126, 127, - 128, 132, 137, 142, 147, 151 + 0, 66, 66, 67, 68, 72, 73, 77, 82, 87, + 97, 107, 112, 118, 124, 125, 126, 127, 128, 129, + 130, 134, 139, 144, 149, 153 }; #endif -#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE +#if YYDEBUG || YYERROR_VERBOSE || 1 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = @@ -515,7 +532,7 @@ static const char *const yytname[] = "\"digits (numbers)\"", "\"literal (string)\"", "\"address\"", "\"opcode\"", "\"identifier (command or function name)\"", "\"input (input string or data)\"", "\"input\"", "$accept", "input", - "parameters", "parameter", "full_expression", 0 + "parameters", "parameter", "full_expression", YY_NULL }; #endif @@ -645,18 +662,19 @@ static const yytype_uint8 yystos[] = #define YYRECOVERING() (!!yyerrstatus) -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY && yylen == 1) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - YYPOPSTACK (1); \ - goto yybackup; \ - } \ - else \ - { \ - yyerror (YY_("syntax error: cannot back up")); \ +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + YYPOPSTACK (yylen); \ + yystate = *yyssp; \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (tsrm_ls, YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) @@ -665,32 +683,33 @@ while (YYID (0)) #define YYTERROR 1 #define YYERRCODE 256 - /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ -#define YYRHSLOC(Rhs, K) ((Rhs)[K]) #ifndef YYLLOC_DEFAULT -# define YYLLOC_DEFAULT(Current, Rhs, N) \ - do \ - if (YYID (N)) \ - { \ - (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ - (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ - (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ - (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ - } \ - else \ - { \ - (Current).first_line = (Current).last_line = \ - YYRHSLOC (Rhs, 0).last_line; \ - (Current).first_column = (Current).last_column = \ - YYRHSLOC (Rhs, 0).last_column; \ - } \ +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (YYID (N)) \ + { \ + (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ + (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ + (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ + (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ + } \ + else \ + { \ + (Current).first_line = (Current).last_line = \ + YYRHSLOC (Rhs, 0).last_line; \ + (Current).first_column = (Current).last_column = \ + YYRHSLOC (Rhs, 0).last_column; \ + } \ while (YYID (0)) #endif +#define YYRHSLOC(Rhs, K) ((Rhs)[K]) + + /* This macro is provided for backward compatibility. */ @@ -727,7 +746,7 @@ do { \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ - Type, Value); \ + Type, Value, tsrm_ls); \ YYFPRINTF (stderr, "\n"); \ } \ } while (YYID (0)) @@ -741,17 +760,21 @@ do { \ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void -yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, void *tsrm_ls) #else static void -yy_symbol_value_print (yyoutput, yytype, yyvaluep) +yy_symbol_value_print (yyoutput, yytype, yyvaluep, tsrm_ls) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; + void *tsrm_ls; #endif { + FILE *yyo = yyoutput; + YYUSE (yyo); if (!yyvaluep) return; + YYUSE (tsrm_ls); # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); @@ -773,13 +796,14 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep) #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void -yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, void *tsrm_ls) #else static void -yy_symbol_print (yyoutput, yytype, yyvaluep) +yy_symbol_print (yyoutput, yytype, yyvaluep, tsrm_ls) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; + void *tsrm_ls; #endif { if (yytype < YYNTOKENS) @@ -787,7 +811,7 @@ yy_symbol_print (yyoutput, yytype, yyvaluep) else YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); - yy_symbol_value_print (yyoutput, yytype, yyvaluep); + yy_symbol_value_print (yyoutput, yytype, yyvaluep, tsrm_ls); YYFPRINTF (yyoutput, ")"); } @@ -830,12 +854,13 @@ do { \ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void -yy_reduce_print (YYSTYPE *yyvsp, int yyrule) +yy_reduce_print (YYSTYPE *yyvsp, int yyrule, void *tsrm_ls) #else static void -yy_reduce_print (yyvsp, yyrule) +yy_reduce_print (yyvsp, yyrule, tsrm_ls) YYSTYPE *yyvsp; int yyrule; + void *tsrm_ls; #endif { int yynrhs = yyr2[yyrule]; @@ -849,7 +874,7 @@ yy_reduce_print (yyvsp, yyrule) YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) - ); + , tsrm_ls); YYFPRINTF (stderr, "\n"); } } @@ -857,7 +882,7 @@ yy_reduce_print (yyvsp, yyrule) # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ - yy_reduce_print (yyvsp, Rule); \ + yy_reduce_print (yyvsp, Rule, tsrm_ls); \ } while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that @@ -1001,12 +1026,12 @@ static int yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, yytype_int16 *yyssp, int yytoken) { - YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]); + YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]); YYSIZE_T yysize = yysize0; YYSIZE_T yysize1; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ - const char *yyformat = 0; + const char *yyformat = YY_NULL; /* Arguments of yyformat. */ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; /* Number of reported tokens (one for the "unexpected", one per @@ -1066,7 +1091,7 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, break; } yyarg[yycount++] = yytname[yyx]; - yysize1 = yysize + yytnamerr (0, yytname[yyx]); + yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]); if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) return 2; @@ -1134,16 +1159,18 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void -yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) +yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, void *tsrm_ls) #else static void -yydestruct (yymsg, yytype, yyvaluep) +yydestruct (yymsg, yytype, yyvaluep, tsrm_ls) const char *yymsg; int yytype; YYSTYPE *yyvaluep; + void *tsrm_ls; #endif { YYUSE (yyvaluep); + YYUSE (tsrm_ls); if (!yymsg) yymsg = "Deleting"; @@ -1158,20 +1185,6 @@ yydestruct (yymsg, yytype, yyvaluep) } -/* Prevent warnings from -Wmissing-prototypes. */ -#ifdef YYPARSE_PARAM -#if defined __STDC__ || defined __cplusplus -int yyparse (void *YYPARSE_PARAM); -#else -int yyparse (); -#endif -#else /* ! YYPARSE_PARAM */ -#if defined __STDC__ || defined __cplusplus -int yyparse (void); -#else -int yyparse (); -#endif -#endif /* ! YYPARSE_PARAM */ /*----------. @@ -1192,11 +1205,11 @@ yyparse (YYPARSE_PARAM) #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int -yyparse (void) +yyparse (void *tsrm_ls) #else int -yyparse () - +yyparse (tsrm_ls) + void *tsrm_ls; #endif #endif { @@ -1217,7 +1230,7 @@ YYSTYPE yylval; `yyss': related to states. `yyvs': related to semantic values. - Refer to the stacks thru separate pointers, to allow yyoverflow + Refer to the stacks through separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ @@ -1271,7 +1284,6 @@ YYSTYPE yylval; The wasted elements are never initialized. */ yyssp = yyss; yyvsp = yyvs; - goto yysetstate; /*------------------------------------------------------------. @@ -1449,30 +1461,26 @@ yyreduce: switch (yyn) { case 3: - -/* Line 1806 of yacc.c */ -#line 65 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" +/* Line 1802 of yacc.c */ +#line 67 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" { phpdbg_stack_push(PHPDBG_G(parser_stack), &(yyvsp[(1) - (1)])); } break; case 5: - -/* Line 1806 of yacc.c */ -#line 70 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" +/* Line 1802 of yacc.c */ +#line 72 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" { phpdbg_stack_push(PHPDBG_G(parser_stack), &(yyvsp[(1) - (1)])); } break; case 6: - -/* Line 1806 of yacc.c */ -#line 71 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" +/* Line 1802 of yacc.c */ +#line 73 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" { phpdbg_stack_push(PHPDBG_G(parser_stack), &(yyvsp[(2) - (2)])); } break; case 7: - -/* Line 1806 of yacc.c */ -#line 75 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" +/* Line 1802 of yacc.c */ +#line 77 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = FILE_PARAM; (yyval).file.name = (yyvsp[(2) - (3)]).str; @@ -1481,9 +1489,8 @@ yyreduce: break; case 8: - -/* Line 1806 of yacc.c */ -#line 80 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" +/* Line 1802 of yacc.c */ +#line 82 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = NUMERIC_FILE_PARAM; (yyval).file.name = (yyvsp[(1) - (4)]).str; @@ -1492,9 +1499,8 @@ yyreduce: break; case 9: - -/* Line 1806 of yacc.c */ -#line 85 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" +/* Line 1802 of yacc.c */ +#line 87 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = FILE_PARAM; (yyval).file.name = malloc((yyvsp[(1) - (4)]).len + (yyvsp[(2) - (4)]).len + 1); @@ -1508,9 +1514,8 @@ yyreduce: break; case 10: - -/* Line 1806 of yacc.c */ -#line 95 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" +/* Line 1802 of yacc.c */ +#line 97 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = NUMERIC_FILE_PARAM; (yyval).file.name = malloc((yyvsp[(1) - (5)]).len + (yyvsp[(2) - (5)]).len + 1); @@ -1524,9 +1529,8 @@ yyreduce: break; case 11: - -/* Line 1806 of yacc.c */ -#line 105 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" +/* Line 1802 of yacc.c */ +#line 107 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = METHOD_PARAM; (yyval).method.class = (yyvsp[(1) - (3)]).str; @@ -1535,9 +1539,8 @@ yyreduce: break; case 12: - -/* Line 1806 of yacc.c */ -#line 110 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" +/* Line 1802 of yacc.c */ +#line 112 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = NUMERIC_METHOD_PARAM; (yyval).method.class = (yyvsp[(1) - (5)]).str; @@ -1547,9 +1550,8 @@ yyreduce: break; case 13: - -/* Line 1806 of yacc.c */ -#line 116 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" +/* Line 1802 of yacc.c */ +#line 118 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = NUMERIC_FUNCTION_PARAM; (yyval).str = (yyvsp[(1) - (3)]).str; @@ -1559,58 +1561,50 @@ yyreduce: break; case 14: - -/* Line 1806 of yacc.c */ -#line 122 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" +/* Line 1802 of yacc.c */ +#line 124 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval) = (yyvsp[(1) - (1)]); } break; case 15: - -/* Line 1806 of yacc.c */ -#line 123 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" +/* Line 1802 of yacc.c */ +#line 125 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval) = (yyvsp[(1) - (1)]); } break; case 16: - -/* Line 1806 of yacc.c */ -#line 124 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" +/* Line 1802 of yacc.c */ +#line 126 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval) = (yyvsp[(1) - (1)]); } break; case 17: - -/* Line 1806 of yacc.c */ -#line 125 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" +/* Line 1802 of yacc.c */ +#line 127 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval) = (yyvsp[(1) - (1)]); } break; case 18: - -/* Line 1806 of yacc.c */ -#line 126 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" +/* Line 1802 of yacc.c */ +#line 128 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval) = (yyvsp[(1) - (1)]); } break; case 19: - -/* Line 1806 of yacc.c */ -#line 127 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" +/* Line 1802 of yacc.c */ +#line 129 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval) = (yyvsp[(1) - (1)]); } break; case 20: - -/* Line 1806 of yacc.c */ -#line 128 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" +/* Line 1802 of yacc.c */ +#line 130 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval) = (yyvsp[(1) - (1)]); } break; case 21: - -/* Line 1806 of yacc.c */ -#line 132 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" +/* Line 1802 of yacc.c */ +#line 134 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = COND_PARAM; (yyval).str = (yyvsp[(2) - (2)]).str; @@ -1619,9 +1613,8 @@ yyreduce: break; case 22: - -/* Line 1806 of yacc.c */ -#line 137 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" +/* Line 1802 of yacc.c */ +#line 139 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = EVAL_PARAM; (yyval).str = (yyvsp[(2) - (2)]).str; @@ -1630,9 +1623,8 @@ yyreduce: break; case 23: - -/* Line 1806 of yacc.c */ -#line 142 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" +/* Line 1802 of yacc.c */ +#line 144 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = SHELL_PARAM; (yyval).str = (yyvsp[(2) - (2)]).str; @@ -1641,9 +1633,8 @@ yyreduce: break; case 24: - -/* Line 1806 of yacc.c */ -#line 147 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" +/* Line 1802 of yacc.c */ +#line 149 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = RUN_PARAM; (yyval).len = 0; @@ -1651,9 +1642,8 @@ yyreduce: break; case 25: - -/* Line 1806 of yacc.c */ -#line 151 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" +/* Line 1802 of yacc.c */ +#line 153 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = RUN_PARAM; (yyval).str = (yyvsp[(2) - (2)]).str; @@ -1662,9 +1652,8 @@ yyreduce: break; - -/* Line 1806 of yacc.c */ -#line 1668 "sapi/phpdbg/phpdbg_parser.c" +/* Line 1802 of yacc.c */ +#line 1657 "sapi/phpdbg/phpdbg_parser.c" default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -1714,7 +1703,7 @@ yyerrlab: { ++yynerrs; #if ! YYERROR_VERBOSE - yyerror (YY_("syntax error")); + yyerror (tsrm_ls, YY_("syntax error")); #else # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ yyssp, yytoken) @@ -1741,7 +1730,7 @@ yyerrlab: yymsgp = yymsg; } } - yyerror (yymsgp); + yyerror (tsrm_ls, yymsgp); if (yysyntax_error_status == 2) goto yyexhaustedlab; } @@ -1765,7 +1754,7 @@ yyerrlab: else { yydestruct ("Error: discarding", - yytoken, &yylval); + yytoken, &yylval, tsrm_ls); yychar = YYEMPTY; } } @@ -1821,7 +1810,7 @@ yyerrlab1: yydestruct ("Error: popping", - yystos[yystate], yyvsp); + yystos[yystate], yyvsp, tsrm_ls); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); @@ -1851,12 +1840,12 @@ yyabortlab: yyresult = 1; goto yyreturn; -#if !defined(yyoverflow) || YYERROR_VERBOSE +#if !defined yyoverflow || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: - yyerror (YY_("memory exhausted")); + yyerror (tsrm_ls, YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif @@ -1868,7 +1857,7 @@ yyreturn: user semantic actions for why this is necessary. */ yytoken = YYTRANSLATE (yychar); yydestruct ("Cleanup: discarding lookahead", - yytoken, &yylval); + yytoken, &yylval, tsrm_ls); } /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ @@ -1877,7 +1866,7 @@ yyreturn: while (yyssp != yyss) { yydestruct ("Cleanup: popping", - yystos[*yyssp], yyvsp); + yystos[*yyssp], yyvsp, tsrm_ls); YYPOPSTACK (1); } #ifndef yyoverflow @@ -1893,14 +1882,11 @@ yyreturn: } - -/* Line 2067 of yacc.c */ -#line 158 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" +/* Line 2048 of yacc.c */ +#line 160 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" -static int yyerror(const char *msg) { - TSRMLS_FETCH(); - +static int yyerror(void ***tsrm_ls, const char *msg) { phpdbg_error("Parse Error: %s", msg); { @@ -1917,6 +1903,9 @@ static int yyerror(const char *msg) { int phpdbg_do_parse(phpdbg_param_t *stack, char *input TSRMLS_DC) { phpdbg_init_lexer(stack, input TSRMLS_CC); - return yyparse(); +#ifdef ZTS + return yyparse(TSRMLS_C); +#else + return yyparse(NULL); +#endif } - diff --git a/phpdbg_parser.h b/phpdbg_parser.h index 3f1eb5cd49a..b3aadb9c62d 100644 --- a/phpdbg_parser.h +++ b/phpdbg_parser.h @@ -1,8 +1,8 @@ -/* A Bison parser, made by GNU Bison 2.5. */ +/* A Bison parser, made by GNU Bison 2.6.2. */ /* Bison interface for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -30,10 +30,18 @@ This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ +#ifndef PHPDBG_SAPI_PHPDBG_PHPDBG_PARSER_H +# define PHPDBG_SAPI_PHPDBG_PHPDBG_PARSER_H +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif +#if YYDEBUG +extern int phpdbg_debug; +#endif /* "%code requires" blocks. */ - -/* Line 2068 of yacc.c */ -#line 31 "/home/pi/php-src/sapi/phpdbg/phpdbg_parser.y" +/* Line 2055 of yacc.c */ +#line 31 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" #include "phpdbg.h" #ifndef YY_TYPEDEF_YY_SCANNER_T @@ -42,9 +50,8 @@ typedef void* yyscan_t; #endif - -/* Line 2068 of yacc.c */ -#line 48 "sapi/phpdbg/phpdbg_parser.h" +/* Line 2055 of yacc.c */ +#line 55 "sapi/phpdbg/phpdbg_parser.h" /* Tokens. */ #ifndef YYTOKENTYPE @@ -94,7 +101,6 @@ typedef void* yyscan_t; - #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef int YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 @@ -103,5 +109,18 @@ typedef int YYSTYPE; #endif +#ifdef YYPARSE_PARAM +#if defined __STDC__ || defined __cplusplus +int phpdbg_parse (void *YYPARSE_PARAM); +#else +int phpdbg_parse (); +#endif +#else /* ! YYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus +int phpdbg_parse (void *tsrm_ls); +#else +int phpdbg_parse (); +#endif +#endif /* ! YYPARSE_PARAM */ - +#endif /* !PHPDBG_SAPI_PHPDBG_PHPDBG_PARSER_H */ diff --git a/phpdbg_parser.y b/phpdbg_parser.y index 55671babe49..fd81edfc29d 100644 --- a/phpdbg_parser.y +++ b/phpdbg_parser.y @@ -19,7 +19,7 @@ #include "phpdbg_lexer.h" #undef yyerror -static int yyerror(const char *msg); +static int yyerror(void ***tsrm_ls, const char *msg); ZEND_EXTERN_MODULE_GLOBALS(phpdbg); @@ -36,6 +36,8 @@ typedef void* yyscan_t; #endif } +%parse-param { void *tsrm_ls } + %output "sapi/phpdbg/phpdbg_parser.c" %defines "sapi/phpdbg/phpdbg_parser.h" @@ -157,9 +159,7 @@ full_expression %% -static int yyerror(const char *msg) { - TSRMLS_FETCH(); - +static int yyerror(void ***tsrm_ls, const char *msg) { phpdbg_error("Parse Error: %s", msg); { @@ -176,5 +176,9 @@ static int yyerror(const char *msg) { int phpdbg_do_parse(phpdbg_param_t *stack, char *input TSRMLS_DC) { phpdbg_init_lexer(stack, input TSRMLS_CC); - return yyparse(); +#ifdef ZTS + return yyparse(TSRMLS_C); +#else + return yyparse(NULL); +#endif } diff --git a/phpdbg_prompt.c b/phpdbg_prompt.c index 3fbda219d13..5379e775867 100644 --- a/phpdbg_prompt.c +++ b/phpdbg_prompt.c @@ -38,8 +38,6 @@ #include "phpdbg_lexer.h" #include "phpdbg_parser.h" -int yyparse(phpdbg_param_t *stack, yyscan_t scanner); - /* {{{ command declarations */ const phpdbg_command_t phpdbg_prompt_commands[] = { PHPDBG_COMMAND_D(exec, "set execution context", 'e', NULL, "s"), @@ -251,7 +249,7 @@ void phpdbg_try_file_init(char *init_file, size_t init_file_len, zend_bool free_ phpdbg_init_param(&stack, STACK_PARAM); - if (phpdbg_do_parse(&stack, input) <= 0) { + if (phpdbg_do_parse(&stack, input TSRMLS_CC) <= 0) { switch (phpdbg_stack_execute(&stack, &why TSRMLS_CC)) { case FAILURE: // if (!(PHPDBG_G(flags) & PHPDBG_IS_QUITTING)) { @@ -1003,7 +1001,7 @@ int phpdbg_interactive(TSRMLS_D) /* {{{ */ do { phpdbg_init_param(&stack, STACK_PARAM); - if (phpdbg_do_parse(&stack, input) <= 0) { + if (phpdbg_do_parse(&stack, input TSRMLS_CC) <= 0) { switch (ret = phpdbg_stack_execute(&stack, &why TSRMLS_CC)) { case FAILURE: if (!(PHPDBG_G(flags) & PHPDBG_IS_QUITTING)) { From 144077edb8c55b1890b0ddc6a5d3806040e76017 Mon Sep 17 00:00:00 2001 From: Bob Weinand Date: Mon, 9 Jun 2014 00:38:06 +0200 Subject: [PATCH 24/77] Fix segfault in tests with lexer There's still a bug in parsing commands --- phpdbg_lexer.c | 704 +++++++++++++++++++++++++------------------------ phpdbg_lexer.l | 4 +- 2 files changed, 364 insertions(+), 344 deletions(-) diff --git a/phpdbg_lexer.c b/phpdbg_lexer.c index 81fc4d611b0..97fd18e7b13 100644 --- a/phpdbg_lexer.c +++ b/phpdbg_lexer.c @@ -99,29 +99,30 @@ yyc_INITIAL: YYFILL(3); yych = *YYCURSOR; if (yych <= 0x1F) { - if (yych <= '\n') { - if (yych <= 0x08) goto yy10; - if (yych >= '\n') goto yy4; + if (yych <= '\t') { + if (yych <= 0x00) goto yy6; + if (yych <= 0x08) goto yy11; } else { - if (yych != '\r') goto yy10; + if (yych <= '\n') goto yy4; + if (yych != '\r') goto yy11; } } else { if (yych <= 'e') { if (yych <= ' ') goto yy2; - if (yych <= 'd') goto yy10; - goto yy6; + if (yych <= 'd') goto yy11; + goto yy7; } else { - if (yych <= 'q') goto yy10; - if (yych <= 'r') goto yy8; - if (yych <= 's') goto yy7; - goto yy10; + if (yych <= 'q') goto yy11; + if (yych <= 'r') goto yy9; + if (yych <= 's') goto yy8; + goto yy11; } } yy2: YYDEBUG(2, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 128) { - goto yy18; + goto yy19; } yy3: YYDEBUG(3, *YYCURSOR); @@ -133,12 +134,12 @@ yy3: YYCURSOR = LEX(text); goto restart; } -#line 137 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 138 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy4: YYDEBUG(4, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 128) { - goto yy18; + goto yy19; } YYDEBUG(5, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; @@ -146,24 +147,28 @@ yy4: { return 0; } -#line 150 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 151 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy6: YYDEBUG(6, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'v') goto yy16; goto yy3; yy7: YYDEBUG(7, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'h') goto yy14; + if (yych == 'v') goto yy17; goto yy3; yy8: YYDEBUG(8, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'u') goto yy11; + yych = *++YYCURSOR; + if (yych == 'h') goto yy15; + goto yy3; yy9: YYDEBUG(9, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'u') goto yy12; +yy10: + YYDEBUG(10, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; #line 155 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { @@ -171,26 +176,26 @@ yy9: phpdbg_init_param(yylval, EMPTY_PARAM); return T_RUN; } -#line 175 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" -yy10: - YYDEBUG(10, *YYCURSOR); - yych = *++YYCURSOR; - goto yy3; +#line 180 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy11: YYDEBUG(11, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'n') goto yy13; + goto yy3; +yy12: YYDEBUG(12, *YYCURSOR); - YYCURSOR = YYMARKER; - goto yy9; -yy13: - YYDEBUG(13, *YYCURSOR); yych = *++YYCURSOR; - goto yy9; + if (yych == 'n') goto yy14; + YYDEBUG(13, *YYCURSOR); + YYCURSOR = YYMARKER; + goto yy10; yy14: YYDEBUG(14, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + goto yy10; +yy15: YYDEBUG(15, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(16, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; #line 150 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { @@ -198,11 +203,11 @@ yy14: phpdbg_init_param(yylval, EMPTY_PARAM); return T_SHELL; } -#line 202 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" -yy16: - YYDEBUG(16, *YYCURSOR); - ++YYCURSOR; +#line 207 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy17: YYDEBUG(17, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(18, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; #line 145 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { @@ -210,17 +215,17 @@ yy16: phpdbg_init_param(yylval, EMPTY_PARAM); return T_EVAL; } -#line 214 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" -yy18: - YYDEBUG(18, *YYCURSOR); +#line 219 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy19: + YYDEBUG(19, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(19, *YYCURSOR); - if (yybm[0+yych] & 128) { - goto yy18; - } YYDEBUG(20, *YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy19; + } + YYDEBUG(21, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; #line 139 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { @@ -228,7 +233,7 @@ yy18: goto restart; } -#line 232 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 237 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" } /* *********************************** */ yyc_NORMAL: @@ -267,68 +272,71 @@ yyc_NORMAL: 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, }; - YYDEBUG(21, *YYCURSOR); + YYDEBUG(22, *YYCURSOR); YYFILL(11); yych = *YYCURSOR; - if (yych <= 'Y') { - if (yych <= '"') { - if (yych <= '\f') { - if (yych <= 0x08) goto yy30; - if (yych <= '\t') goto yy23; - if (yych <= '\n') goto yy26; - goto yy30; + if (yych <= ':') { + if (yych <= ' ') { + if (yych <= '\n') { + if (yych <= 0x00) goto yy29; + if (yych <= 0x08) goto yy32; + if (yych >= '\n') goto yy27; } else { - if (yych <= '\r') goto yy23; - if (yych != ' ') goto yy30; + if (yych == '\r') goto yy24; + if (yych <= 0x1F) goto yy32; } } else { - if (yych <= '/') { - if (yych <= '#') goto yy45; - if (yych == '.') goto yy32; - goto yy30; + if (yych <= '.') { + if (yych == '#') goto yy47; + if (yych <= '-') goto yy32; + goto yy34; } else { - if (yych <= '0') goto yy35; - if (yych <= '9') goto yy32; - if (yych <= ':') goto yy47; - goto yy30; + if (yych <= '/') goto yy32; + if (yych <= '0') goto yy37; + if (yych <= '9') goto yy34; + goto yy49; } } } else { - if (yych <= 'm') { - if (yych <= 'e') { - if (yych <= 'Z') goto yy36; - if (yych <= 'c') goto yy30; - if (yych <= 'd') goto yy37; - goto yy38; + if (yych <= 'i') { + if (yych <= 'd') { + if (yych == 'Z') goto yy38; + if (yych <= 'c') goto yy32; + goto yy39; } else { - if (yych <= 'f') goto yy39; - if (yych == 'i') goto yy28; - goto yy30; + if (yych <= 'e') goto yy40; + if (yych <= 'f') goto yy41; + if (yych <= 'h') goto yy32; + goto yy31; } } else { - if (yych <= 't') { - if (yych <= 'n') goto yy40; - if (yych <= 'o') goto yy41; - if (yych <= 's') goto yy30; - goto yy42; + if (yych <= 's') { + if (yych <= 'm') goto yy32; + if (yych <= 'n') goto yy42; + if (yych <= 'o') goto yy43; + goto yy32; } else { - if (yych <= 'x') goto yy30; - if (yych <= 'y') goto yy43; - if (yych <= 'z') goto yy44; - goto yy30; + if (yych <= 'x') { + if (yych <= 't') goto yy44; + goto yy32; + } else { + if (yych <= 'y') goto yy45; + if (yych <= 'z') goto yy46; + goto yy32; + } } } } -yy23: - YYDEBUG(23, *YYCURSOR); +yy24: + YYDEBUG(24, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(24, *YYCURSOR); - if (yybm[0+yych] & 8) { - goto yy23; - } YYDEBUG(25, *YYCURSOR); + if (yybm[0+yych] & 8) { + goto yy24; + } + YYDEBUG(26, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; #line 139 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { @@ -336,28 +344,27 @@ yy23: goto restart; } -#line 340 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" -yy26: - YYDEBUG(26, *YYCURSOR); +#line 348 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy27: + YYDEBUG(27, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 8) { - goto yy23; + goto yy24; } - YYDEBUG(27, *YYCURSOR); + YYDEBUG(28, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; #line 68 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { return 0; } -#line 353 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" -yy28: - YYDEBUG(28, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'f') goto yy92; - goto yy31; +#line 361 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy29: YYDEBUG(29, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + goto yy33; +yy30: + YYDEBUG(30, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; #line 125 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { @@ -366,47 +373,53 @@ yy29: yylval->len = yyleng; return T_ID; } -#line 370 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" -yy30: - YYDEBUG(30, *YYCURSOR); +#line 377 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy31: + YYDEBUG(31, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'f') goto yy94; + goto yy33; +yy32: + YYDEBUG(32, *YYCURSOR); yyaccept = 0; YYMARKER = ++YYCURSOR; YYFILL(3); yych = *YYCURSOR; -yy31: - YYDEBUG(31, *YYCURSOR); +yy33: + YYDEBUG(33, *YYCURSOR); if (yybm[0+yych] & 16) { - goto yy30; + goto yy32; } - if (yych <= '9') goto yy29; - goto yy52; -yy32: - YYDEBUG(32, *YYCURSOR); + if (yych <= '9') goto yy30; + goto yy54; +yy34: + YYDEBUG(34, *YYCURSOR); yyaccept = 1; YYMARKER = ++YYCURSOR; YYFILL(3); yych = *YYCURSOR; - YYDEBUG(33, *YYCURSOR); + YYDEBUG(35, *YYCURSOR); if (yybm[0+yych] & 32) { - goto yy32; + goto yy34; } if (yych <= 0x1F) { if (yych <= '\n') { - if (yych <= 0x08) goto yy30; + if (yych <= 0x08) goto yy32; } else { - if (yych != '\r') goto yy30; + if (yych != '\r') goto yy32; } } else { if (yych <= '#') { - if (yych <= ' ') goto yy34; - if (yych <= '"') goto yy30; + if (yych <= ' ') goto yy36; + if (yych <= '"') goto yy32; } else { - if (yych == ':') goto yy52; - goto yy30; + if (yych == ':') goto yy54; + goto yy32; } } -yy34: - YYDEBUG(34, *YYCURSOR); +yy36: + YYDEBUG(36, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; #line 106 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { @@ -414,163 +427,163 @@ yy34: yylval->num = atoi(yytext); return T_DIGITS; } -#line 418 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" -yy35: - YYDEBUG(35, *YYCURSOR); +#line 431 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy37: + YYDEBUG(37, *YYCURSOR); yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 32) { - goto yy32; + goto yy34; } if (yych <= 0x1F) { if (yych <= '\n') { - if (yych <= 0x08) goto yy31; - goto yy34; + if (yych <= 0x08) goto yy33; + goto yy36; } else { - if (yych == '\r') goto yy34; - goto yy31; + if (yych == '\r') goto yy36; + goto yy33; } } else { if (yych <= '#') { - if (yych <= ' ') goto yy34; - if (yych <= '"') goto yy31; - goto yy34; + if (yych <= ' ') goto yy36; + if (yych <= '"') goto yy33; + goto yy36; } else { - if (yych == 'x') goto yy88; - goto yy31; + if (yych == 'x') goto yy90; + goto yy33; } } -yy36: - YYDEBUG(36, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'E') goto yy85; - goto yy31; -yy37: - YYDEBUG(37, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'i') goto yy79; - goto yy31; yy38: YYDEBUG(38, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'n') goto yy74; - goto yy31; + if (yych == 'E') goto yy87; + goto yy33; yy39: YYDEBUG(39, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'a') goto yy71; - goto yy31; + if (yych == 'i') goto yy81; + goto yy33; yy40: YYDEBUG(40, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'o') goto yy69; - goto yy31; + if (yych == 'n') goto yy76; + goto yy33; yy41: YYDEBUG(41, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'f') goto yy68; - if (yych == 'n') goto yy64; - goto yy31; + if (yych == 'a') goto yy73; + goto yy33; yy42: YYDEBUG(42, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'r') goto yy66; - goto yy31; + if (yych == 'o') goto yy71; + goto yy33; yy43: YYDEBUG(43, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'e') goto yy63; - goto yy31; + if (yych == 'f') goto yy70; + if (yych == 'n') goto yy66; + goto yy33; yy44: YYDEBUG(44, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'e') goto yy51; - goto yy31; + if (yych == 'r') goto yy68; + goto yy33; yy45: YYDEBUG(45, *YYCURSOR); - ++YYCURSOR; + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'e') goto yy65; + goto yy33; +yy46: YYDEBUG(46, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'e') goto yy53; + goto yy33; +yy47: + YYDEBUG(47, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(48, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; #line 84 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { return T_POUND; } -#line 508 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" -yy47: - YYDEBUG(47, *YYCURSOR); +#line 521 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy49: + YYDEBUG(49, *YYCURSOR); ++YYCURSOR; - if ((yych = *YYCURSOR) == ':') goto yy49; - YYDEBUG(48, *YYCURSOR); + if ((yych = *YYCURSOR) == ':') goto yy51; + YYDEBUG(50, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; #line 90 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { return T_COLON; } -#line 519 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" -yy49: - YYDEBUG(49, *YYCURSOR); +#line 532 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy51: + YYDEBUG(51, *YYCURSOR); ++YYCURSOR; - YYDEBUG(50, *YYCURSOR); + YYDEBUG(52, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; #line 87 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { return T_DCOLON; } -#line 529 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" -yy51: - YYDEBUG(51, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'n') goto yy57; - goto yy31; -yy52: - YYDEBUG(52, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '/') goto yy54; +#line 542 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy53: YYDEBUG(53, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'n') goto yy59; + goto yy33; +yy54: + YYDEBUG(54, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '/') goto yy56; +yy55: + YYDEBUG(55, *YYCURSOR); YYCURSOR = YYMARKER; if (yyaccept <= 3) { if (yyaccept <= 1) { if (yyaccept <= 0) { - goto yy29; + goto yy30; } else { - goto yy34; + goto yy36; } } else { if (yyaccept <= 2) { - goto yy62; + goto yy64; } else { - goto yy65; + goto yy67; } } } else { if (yyaccept <= 5) { if (yyaccept <= 4) { - goto yy70; + goto yy72; } else { - goto yy91; + goto yy93; } } else { - goto yy93; + goto yy95; } } -yy54: - YYDEBUG(54, *YYCURSOR); - yych = *++YYCURSOR; - if (yych != '/') goto yy53; - YYDEBUG(55, *YYCURSOR); - ++YYCURSOR; +yy56: YYDEBUG(56, *YYCURSOR); + yych = *++YYCURSOR; + if (yych != '/') goto yy55; + YYDEBUG(57, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(58, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; #line 78 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { @@ -579,51 +592,51 @@ yy54: yylval->len = yyleng; return T_PROTO; } -#line 583 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" -yy57: - YYDEBUG(57, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if (yych != 'd') goto yy31; - YYDEBUG(58, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if (yych != '_') goto yy31; +#line 596 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy59: YYDEBUG(59, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if (yybm[0+yych] & 64) { - goto yy60; - } - goto yy31; -yy60: + if (yych != 'd') goto yy33; YYDEBUG(60, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != '_') goto yy33; +yy61: + YYDEBUG(61, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yybm[0+yych] & 64) { + goto yy62; + } + goto yy33; +yy62: + YYDEBUG(62, *YYCURSOR); yyaccept = 2; YYMARKER = ++YYCURSOR; YYFILL(3); yych = *YYCURSOR; - YYDEBUG(61, *YYCURSOR); + YYDEBUG(63, *YYCURSOR); if (yybm[0+yych] & 64) { - goto yy60; + goto yy62; } if (yych <= 0x1F) { if (yych <= '\n') { - if (yych <= 0x08) goto yy30; + if (yych <= 0x08) goto yy32; } else { - if (yych != '\r') goto yy30; + if (yych != '\r') goto yy32; } } else { if (yych <= '#') { - if (yych <= ' ') goto yy62; - if (yych <= '"') goto yy30; + if (yych <= ' ') goto yy64; + if (yych <= '"') goto yy32; } else { - if (yych == ':') goto yy52; - goto yy30; + if (yych == ':') goto yy54; + goto yy32; } } -yy62: - YYDEBUG(62, *YYCURSOR); +yy64: + YYDEBUG(64, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; #line 118 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { @@ -632,29 +645,29 @@ yy62: yylval->len = yyleng; return T_OPCODE; } -#line 636 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" -yy63: - YYDEBUG(63, *YYCURSOR); +#line 649 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy65: + YYDEBUG(65, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if (yych != 's') goto yy31; -yy64: - YYDEBUG(64, *YYCURSOR); + if (yych != 's') goto yy33; +yy66: + YYDEBUG(66, *YYCURSOR); yyaccept = 3; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '\r') { - if (yych <= 0x08) goto yy31; - if (yych <= '\n') goto yy65; - if (yych <= '\f') goto yy31; + if (yych <= 0x08) goto yy33; + if (yych <= '\n') goto yy67; + if (yych <= '\f') goto yy33; } else { if (yych <= ' ') { - if (yych <= 0x1F) goto yy31; + if (yych <= 0x1F) goto yy33; } else { - if (yych != '#') goto yy31; + if (yych != '#') goto yy33; } } -yy65: - YYDEBUG(65, *YYCURSOR); +yy67: + YYDEBUG(67, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; #line 94 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { @@ -662,39 +675,39 @@ yy65: yylval->num = 1; return T_TRUTHY; } -#line 666 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" -yy66: - YYDEBUG(66, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if (yych != 'u') goto yy31; - YYDEBUG(67, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'e') goto yy64; - goto yy31; +#line 679 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy68: YYDEBUG(68, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if (yych != 'f') goto yy31; -yy69: + if (yych != 'u') goto yy33; YYDEBUG(69, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'e') goto yy66; + goto yy33; +yy70: + YYDEBUG(70, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != 'f') goto yy33; +yy71: + YYDEBUG(71, *YYCURSOR); yyaccept = 4; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '\r') { - if (yych <= 0x08) goto yy31; - if (yych <= '\n') goto yy70; - if (yych <= '\f') goto yy31; + if (yych <= 0x08) goto yy33; + if (yych <= '\n') goto yy72; + if (yych <= '\f') goto yy33; } else { if (yych <= ' ') { - if (yych <= 0x1F) goto yy31; + if (yych <= 0x1F) goto yy33; } else { - if (yych != '#') goto yy31; + if (yych != '#') goto yy33; } } -yy70: - YYDEBUG(70, *YYCURSOR); +yy72: + YYDEBUG(72, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; #line 100 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { @@ -702,118 +715,118 @@ yy70: yylval->num = 0; return T_FALSY; } -#line 706 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" -yy71: - YYDEBUG(71, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if (yych != 'l') goto yy31; - YYDEBUG(72, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if (yych != 's') goto yy31; +#line 719 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy73: YYDEBUG(73, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'e') goto yy69; - goto yy31; -yy74: + if (yych != 'l') goto yy33; YYDEBUG(74, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if (yych != 'a') goto yy31; + if (yych != 's') goto yy33; YYDEBUG(75, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if (yych != 'b') goto yy31; + if (yych == 'e') goto yy71; + goto yy33; +yy76: YYDEBUG(76, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if (yych != 'l') goto yy31; + if (yych != 'a') goto yy33; YYDEBUG(77, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if (yych != 'e') goto yy31; + if (yych != 'b') goto yy33; YYDEBUG(78, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'd') goto yy64; - goto yy31; -yy79: + if (yych != 'l') goto yy33; YYDEBUG(79, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if (yych != 's') goto yy31; + if (yych != 'e') goto yy33; YYDEBUG(80, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if (yych != 'a') goto yy31; + if (yych == 'd') goto yy66; + goto yy33; +yy81: YYDEBUG(81, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if (yych != 'b') goto yy31; + if (yych != 's') goto yy33; YYDEBUG(82, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if (yych != 'l') goto yy31; + if (yych != 'a') goto yy33; YYDEBUG(83, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if (yych != 'e') goto yy31; + if (yych != 'b') goto yy33; YYDEBUG(84, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'd') goto yy69; - goto yy31; -yy85: + if (yych != 'l') goto yy33; YYDEBUG(85, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if (yych != 'N') goto yy31; + if (yych != 'e') goto yy33; YYDEBUG(86, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if (yych != 'D') goto yy31; + if (yych == 'd') goto yy71; + goto yy33; +yy87: YYDEBUG(87, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if (yych == '_') goto yy59; - goto yy31; -yy88: + if (yych != 'N') goto yy33; YYDEBUG(88, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if (yybm[0+yych] & 128) { - goto yy89; - } - goto yy31; -yy89: + if (yych != 'D') goto yy33; YYDEBUG(89, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == '_') goto yy61; + goto yy33; +yy90: + YYDEBUG(90, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy91; + } + goto yy33; +yy91: + YYDEBUG(91, *YYCURSOR); yyaccept = 5; YYMARKER = ++YYCURSOR; YYFILL(3); yych = *YYCURSOR; - YYDEBUG(90, *YYCURSOR); + YYDEBUG(92, *YYCURSOR); if (yybm[0+yych] & 128) { - goto yy89; + goto yy91; } if (yych <= 0x1F) { if (yych <= '\n') { - if (yych <= 0x08) goto yy30; + if (yych <= 0x08) goto yy32; } else { - if (yych != '\r') goto yy30; + if (yych != '\r') goto yy32; } } else { if (yych <= '#') { - if (yych <= ' ') goto yy91; - if (yych <= '"') goto yy30; + if (yych <= ' ') goto yy93; + if (yych <= '"') goto yy32; } else { - if (yych == ':') goto yy52; - goto yy30; + if (yych == ':') goto yy54; + goto yy32; } } -yy91: - YYDEBUG(91, *YYCURSOR); +yy93: + YYDEBUG(93, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; #line 112 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { @@ -821,24 +834,24 @@ yy91: yylval->addr = strtoul(yytext, 0, 16); return T_ADDR; } -#line 825 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" -yy92: - YYDEBUG(92, *YYCURSOR); +#line 838 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy94: + YYDEBUG(94, *YYCURSOR); yyaccept = 6; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '\r') { - if (yych <= 0x08) goto yy31; - if (yych <= '\n') goto yy93; - if (yych <= '\f') goto yy31; + if (yych <= 0x08) goto yy33; + if (yych <= '\n') goto yy95; + if (yych <= '\f') goto yy33; } else { if (yych <= ' ') { - if (yych <= 0x1F) goto yy31; + if (yych <= 0x1F) goto yy33; } else { - if (yych != '#') goto yy31; + if (yych != '#') goto yy33; } } -yy93: - YYDEBUG(93, *YYCURSOR); +yy95: + YYDEBUG(95, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; #line 72 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { @@ -846,13 +859,13 @@ yy93: phpdbg_init_param(yylval, EMPTY_PARAM); return T_IF; } -#line 850 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 863 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" } /* *********************************** */ yyc_RAW: { static const unsigned char yybm[] = { - 64, 64, 64, 64, 64, 64, 64, 64, + 0, 64, 64, 64, 64, 64, 64, 64, 64, 224, 128, 64, 64, 224, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, @@ -885,27 +898,29 @@ yyc_RAW: 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, }; - YYDEBUG(94, *YYCURSOR); + YYDEBUG(96, *YYCURSOR); YYFILL(2); yych = *YYCURSOR; if (yybm[0+yych] & 32) { - goto yy96; + goto yy98; } - if (yych == '\n') goto yy99; - goto yy101; -yy96: - YYDEBUG(96, *YYCURSOR); + if (yych <= 0x00) goto yy103; + if (yych == '\n') goto yy101; + goto yy104; +yy98: + YYDEBUG(98, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(97, *YYCURSOR); + YYDEBUG(99, *YYCURSOR); if (yybm[0+yych] & 32) { - goto yy96; + goto yy98; } - if (yych == '\n') goto yy103; - goto yy101; -yy98: - YYDEBUG(98, *YYCURSOR); + if (yych <= 0x00) goto yy100; + if (yych == '\n') goto yy106; + goto yy104; +yy100: + YYDEBUG(100, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; #line 132 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { @@ -914,40 +929,45 @@ yy98: yylval->len = yyleng; return T_INPUT; } -#line 918 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" -yy99: - YYDEBUG(99, *YYCURSOR); +#line 933 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy101: + YYDEBUG(101, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 128) { - goto yy103; + goto yy106; } - YYDEBUG(100, *YYCURSOR); +yy102: + YYDEBUG(102, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; #line 68 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { return 0; } -#line 931 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" -yy101: - YYDEBUG(101, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(102, *YYCURSOR); - if (yybm[0+yych] & 64) { - goto yy101; - } - goto yy98; +#line 947 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy103: YYDEBUG(103, *YYCURSOR); + yych = *++YYCURSOR; + goto yy102; +yy104: + YYDEBUG(104, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(104, *YYCURSOR); - if (yybm[0+yych] & 128) { - goto yy103; - } YYDEBUG(105, *YYCURSOR); + if (yybm[0+yych] & 64) { + goto yy104; + } + goto yy100; +yy106: + YYDEBUG(106, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(107, *YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy106; + } + YYDEBUG(108, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; #line 139 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { @@ -955,7 +975,7 @@ yy103: goto restart; } -#line 959 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 979 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" } } #line 168 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" diff --git a/phpdbg_lexer.l b/phpdbg_lexer.l index 217061081f5..cb8bd9b18d8 100644 --- a/phpdbg_lexer.l +++ b/phpdbg_lexer.l @@ -61,11 +61,11 @@ DIGITS [0-9\.]+ ID [^ \r\n\t:#]+ ADDR [0][x][a-fA-F0-9]+ OPCODE (ZEND_|zend_)([A-Za-z])+ -INPUT [^\n]+ +INPUT [^\n\000]+ := yyleng = (size_t) YYCURSOR - (size_t) yytext; -<*>"\n" { +<*>[\n\000] { return 0; } From e030efa4f64b377acc5311a92b00a8576643bb11 Mon Sep 17 00:00:00 2001 From: Levi Morrison Date: Mon, 12 May 2014 21:53:08 -0600 Subject: [PATCH 25/77] Fix bug 666222 This also adds some smaller, isolated tests related to bug 66622. Conflicts: Zend/zend_vm_def.h Zend/zend_vm_execute.h --- NEWS | 2 ++ Zend/tests/closure_bug66622.phpt | 37 ++++++++++++++++++++++++++++++++ Zend/zend_closures.c | 4 +--- Zend/zend_vm_def.h | 9 +++++++- Zend/zend_vm_execute.h | 9 +++++++- 5 files changed, 56 insertions(+), 5 deletions(-) create mode 100644 Zend/tests/closure_bug66622.phpt diff --git a/NEWS b/NEWS index 7354aa9dba9..65e2fadb876 100644 --- a/NEWS +++ b/NEWS @@ -6,6 +6,8 @@ PHP NEWS . Fixed BC break introduced by patch for bug #67072. (Anatol) . Fixed bug #67390 (insecure temporary file use in the configure script). (Remi) (CVE-2014-3981) + . Fixed bug #66622 (Closures do not correctly capture the late bound class + (static::) in some cases). (Levi Morrison) - Date: . Fixed bug #67308 (Serialize of DateTime truncates fractions of second). diff --git a/Zend/tests/closure_bug66622.phpt b/Zend/tests/closure_bug66622.phpt new file mode 100644 index 00000000000..1c9577d688b --- /dev/null +++ b/Zend/tests/closure_bug66622.phpt @@ -0,0 +1,37 @@ +--TEST-- +Bug 66622: Closures do not correctly capture the late bound class (static::) in some cases + +--FILE-- +foo(); + (new B)->bar(); + (new B)->baz(); + B::baz(); +} +test(); + +--EXPECT-- +B vs B +B vs B +B vs B +B vs B diff --git a/Zend/zend_closures.c b/Zend/zend_closures.c index c18972a7f10..9ae82b4189f 100644 --- a/Zend/zend_closures.c +++ b/Zend/zend_closures.c @@ -487,6 +487,7 @@ ZEND_API void zend_create_closure(zval *res, zend_function *func, zend_class_ent } } + closure->this_ptr = NULL; /* Invariants: * If the closure is unscoped, it has no bound object. * The the closure is scoped, it's either static or it's bound */ @@ -498,10 +499,7 @@ ZEND_API void zend_create_closure(zval *res, zend_function *func, zend_class_ent Z_ADDREF_P(this_ptr); } else { closure->func.common.fn_flags |= ZEND_ACC_STATIC; - closure->this_ptr = NULL; } - } else { - closure->this_ptr = NULL; } } /* }}} */ diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index ab33468205e..a7ad3aa6d92 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -5161,6 +5161,7 @@ ZEND_VM_HANDLER(153, ZEND_DECLARE_LAMBDA_FUNCTION, CONST, UNUSED) { USE_OPLINE zend_function *op_array; + int closure_is_static, closure_is_being_defined_inside_static_context; SAVE_OPLINE(); @@ -5169,7 +5170,13 @@ ZEND_VM_HANDLER(153, ZEND_DECLARE_LAMBDA_FUNCTION, CONST, UNUSED) zend_error_noreturn(E_ERROR, "Base lambda function for closure not found"); } - zend_create_closure(&EX_T(opline->result.var).tmp_var, op_array, EG(scope), EG(This) TSRMLS_CC); + closure_is_static = op_array->common.fn_flags & ZEND_ACC_STATIC; + closure_is_being_defined_inside_static_context = EX(prev_execute_data) && EX(prev_execute_data)->function_state.function->common.fn_flags & ZEND_ACC_STATIC; + if (closure_is_static || closure_is_being_defined_inside_static_context) { + zend_create_closure(&EX_T(opline->result.var).tmp_var, (zend_function *) op_array, EG(called_scope), NULL TSRMLS_CC); + } else { + zend_create_closure(&EX_T(opline->result.var).tmp_var, (zend_function *) op_array, EG(scope), EG(This) TSRMLS_CC); + } CHECK_EXCEPTION(); ZEND_VM_NEXT_OPCODE(); diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index fa997b287ea..fba5f9cc6fb 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -5847,6 +5847,7 @@ static int ZEND_FASTCALL ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED_HANDLER { USE_OPLINE zend_function *op_array; + int closure_is_static, closure_is_being_defined_inside_static_context; SAVE_OPLINE(); @@ -5855,7 +5856,13 @@ static int ZEND_FASTCALL ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED_HANDLER zend_error_noreturn(E_ERROR, "Base lambda function for closure not found"); } - zend_create_closure(&EX_T(opline->result.var).tmp_var, op_array, EG(scope), EG(This) TSRMLS_CC); + closure_is_static = op_array->common.fn_flags & ZEND_ACC_STATIC; + closure_is_being_defined_inside_static_context = EX(prev_execute_data) && EX(prev_execute_data)->function_state.function->common.fn_flags & ZEND_ACC_STATIC; + if (closure_is_static || closure_is_being_defined_inside_static_context) { + zend_create_closure(&EX_T(opline->result.var).tmp_var, (zend_function *) op_array, EG(called_scope), NULL TSRMLS_CC); + } else { + zend_create_closure(&EX_T(opline->result.var).tmp_var, (zend_function *) op_array, EG(scope), EG(This) TSRMLS_CC); + } CHECK_EXCEPTION(); ZEND_VM_NEXT_OPCODE(); From f47976dd9ba5318eb1e358c816288ecd70975d95 Mon Sep 17 00:00:00 2001 From: Levi Morrison Date: Mon, 12 May 2014 21:53:08 -0600 Subject: [PATCH 26/77] Fix bug 666222 This also adds some smaller, isolated tests related to bug 66622. --- Zend/tests/closure_049.phpt | 22 +++++++++++++++++++ Zend/tests/closure_050.phpt | 22 +++++++++++++++++++ Zend/tests/closure_051.phpt | 21 ++++++++++++++++++ Zend/tests/closure_052.phpt | 21 ++++++++++++++++++ Zend/tests/closure_053.phpt | 22 +++++++++++++++++++ Zend/tests/closure_054.phpt | 22 +++++++++++++++++++ Zend/tests/closure_055.phpt | 21 ++++++++++++++++++ Zend/tests/closure_056.phpt | 21 ++++++++++++++++++ Zend/tests/closure_bug66622.phpt | 37 ++++++++++++++++++++++++++++++++ Zend/zend_closures.c | 4 +--- Zend/zend_vm_def.h | 9 +++++++- Zend/zend_vm_execute.h | 9 +++++++- 12 files changed, 226 insertions(+), 5 deletions(-) create mode 100644 Zend/tests/closure_049.phpt create mode 100644 Zend/tests/closure_050.phpt create mode 100644 Zend/tests/closure_051.phpt create mode 100644 Zend/tests/closure_052.phpt create mode 100644 Zend/tests/closure_053.phpt create mode 100644 Zend/tests/closure_054.phpt create mode 100644 Zend/tests/closure_055.phpt create mode 100644 Zend/tests/closure_056.phpt create mode 100644 Zend/tests/closure_bug66622.phpt diff --git a/Zend/tests/closure_049.phpt b/Zend/tests/closure_049.phpt new file mode 100644 index 00000000000..684b33d5640 --- /dev/null +++ b/Zend/tests/closure_049.phpt @@ -0,0 +1,22 @@ +--TEST-- +Closure 049: static::class in static closure in non-static method. + +--FILE-- +foo()); +--EXPECT-- +string(1) "B" diff --git a/Zend/tests/closure_050.phpt b/Zend/tests/closure_050.phpt new file mode 100644 index 00000000000..d43f325ef1f --- /dev/null +++ b/Zend/tests/closure_050.phpt @@ -0,0 +1,22 @@ +--TEST-- +Closure 050: static::class in non-static closure in non-static method. + +--FILE-- +foo()); + +--EXPECT-- +string(1) "B" diff --git a/Zend/tests/closure_051.phpt b/Zend/tests/closure_051.phpt new file mode 100644 index 00000000000..78b28d74a33 --- /dev/null +++ b/Zend/tests/closure_051.phpt @@ -0,0 +1,21 @@ +--TEST-- +Closure 051: static::class in static closure in static method. + +--FILE-- +foo()); + +--EXPECT-- +string(1) "A" diff --git a/Zend/tests/closure_054.phpt b/Zend/tests/closure_054.phpt new file mode 100644 index 00000000000..b2f87d1d610 --- /dev/null +++ b/Zend/tests/closure_054.phpt @@ -0,0 +1,22 @@ +--TEST-- +Closure 054: self::class in non-static closure in non-static method. + +--FILE-- +foo()); + +--EXPECT-- +string(1) "A" diff --git a/Zend/tests/closure_055.phpt b/Zend/tests/closure_055.phpt new file mode 100644 index 00000000000..047d72a89bd --- /dev/null +++ b/Zend/tests/closure_055.phpt @@ -0,0 +1,21 @@ +--TEST-- +Closure 055: self::class in static closure in static method. + +--FILE-- +foo(); + (new B)->bar(); + (new B)->baz(); + B::baz(); +} +test(); + +--EXPECT-- +B vs B +B vs B +B vs B +B vs B diff --git a/Zend/zend_closures.c b/Zend/zend_closures.c index fcea56d811a..08127248268 100644 --- a/Zend/zend_closures.c +++ b/Zend/zend_closures.c @@ -486,6 +486,7 @@ ZEND_API void zend_create_closure(zval *res, zend_function *func, zend_class_ent } } + closure->this_ptr = NULL; /* Invariants: * If the closure is unscoped, it has no bound object. * The the closure is scoped, it's either static or it's bound */ @@ -497,10 +498,7 @@ ZEND_API void zend_create_closure(zval *res, zend_function *func, zend_class_ent Z_ADDREF_P(this_ptr); } else { closure->func.common.fn_flags |= ZEND_ACC_STATIC; - closure->this_ptr = NULL; } - } else { - closure->this_ptr = NULL; } } /* }}} */ diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 03cc9c45a0a..f76e52961ae 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -5179,6 +5179,7 @@ ZEND_VM_HANDLER(153, ZEND_DECLARE_LAMBDA_FUNCTION, CONST, UNUSED) { USE_OPLINE zend_function *op_array; + int closure_is_static, closure_is_being_defined_inside_static_context; SAVE_OPLINE(); @@ -5187,7 +5188,13 @@ ZEND_VM_HANDLER(153, ZEND_DECLARE_LAMBDA_FUNCTION, CONST, UNUSED) zend_error_noreturn(E_ERROR, "Base lambda function for closure not found"); } - zend_create_closure(&EX_T(opline->result.var).tmp_var, (zend_function *) op_array, EG(scope), EG(This) TSRMLS_CC); + closure_is_static = op_array->common.fn_flags & ZEND_ACC_STATIC; + closure_is_being_defined_inside_static_context = EX(prev_execute_data) && EX(prev_execute_data)->function_state.function->common.fn_flags & ZEND_ACC_STATIC; + if (closure_is_static || closure_is_being_defined_inside_static_context) { + zend_create_closure(&EX_T(opline->result.var).tmp_var, (zend_function *) op_array, EG(called_scope), NULL TSRMLS_CC); + } else { + zend_create_closure(&EX_T(opline->result.var).tmp_var, (zend_function *) op_array, EG(scope), EG(This) TSRMLS_CC); + } CHECK_EXCEPTION(); ZEND_VM_NEXT_OPCODE(); diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 511a40b37e4..94026a08efc 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -6487,6 +6487,7 @@ static int ZEND_FASTCALL ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED_HANDLER { USE_OPLINE zend_function *op_array; + int closure_is_static, closure_is_being_defined_inside_static_context; SAVE_OPLINE(); @@ -6495,7 +6496,13 @@ static int ZEND_FASTCALL ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED_HANDLER zend_error_noreturn(E_ERROR, "Base lambda function for closure not found"); } - zend_create_closure(&EX_T(opline->result.var).tmp_var, (zend_function *) op_array, EG(scope), EG(This) TSRMLS_CC); + closure_is_static = op_array->common.fn_flags & ZEND_ACC_STATIC; + closure_is_being_defined_inside_static_context = EX(prev_execute_data) && EX(prev_execute_data)->function_state.function->common.fn_flags & ZEND_ACC_STATIC; + if (closure_is_static || closure_is_being_defined_inside_static_context) { + zend_create_closure(&EX_T(opline->result.var).tmp_var, (zend_function *) op_array, EG(called_scope), NULL TSRMLS_CC); + } else { + zend_create_closure(&EX_T(opline->result.var).tmp_var, (zend_function *) op_array, EG(scope), EG(This) TSRMLS_CC); + } CHECK_EXCEPTION(); ZEND_VM_NEXT_OPCODE(); From 1607ff8b9ea45b941d496f7aa03043f0b097c778 Mon Sep 17 00:00:00 2001 From: Stanislav Malyshev Date: Sun, 8 Jun 2014 19:03:31 -0700 Subject: [PATCH 27/77] add news --- NEWS | 3 +++ 1 file changed, 3 insertions(+) diff --git a/NEWS b/NEWS index f336b4ec567..f65f1699edd 100644 --- a/NEWS +++ b/NEWS @@ -3,10 +3,13 @@ PHP NEWS ?? ??? 2014, PHP 5.6.0 Release Candidate 1 - Core: + . Fixed bug #66622 (Closures do not correctly capture the late bound class + (static::) in some cases). (Levi Morrison) . Fixed bug #67390 (insecure temporary file use in the configure script). (Remi) (CVE-2014-3981) . Fixed bug #67392 (dtrace breaks argument unpack). (Nikita) + - OpenSSL: . Fixed bug #65698 (certificates validity parsing does not work past 2050). (Paul Oehler) From e43270cb2a32d090fef260f429d05b155b16c450 Mon Sep 17 00:00:00 2001 From: Stanislav Malyshev Date: Sun, 8 Jun 2014 19:03:50 -0700 Subject: [PATCH 28/77] fix order --- NEWS | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index 65e2fadb876..f98155f321f 100644 --- a/NEWS +++ b/NEWS @@ -4,10 +4,10 @@ PHP NEWS - Core: . Fixed BC break introduced by patch for bug #67072. (Anatol) - . Fixed bug #67390 (insecure temporary file use in the configure script). - (Remi) (CVE-2014-3981) . Fixed bug #66622 (Closures do not correctly capture the late bound class (static::) in some cases). (Levi Morrison) + . Fixed bug #67390 (insecure temporary file use in the configure script). + (Remi) (CVE-2014-3981) - Date: . Fixed bug #67308 (Serialize of DateTime truncates fractions of second). From 7ddbfae022dcdfb36d40824e449639a4b389d75a Mon Sep 17 00:00:00 2001 From: Stanislav Malyshev Date: Sun, 8 Jun 2014 19:04:21 -0700 Subject: [PATCH 29/77] fix order --- NEWS | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index b900684877c..dc3b8e62179 100644 --- a/NEWS +++ b/NEWS @@ -4,10 +4,10 @@ PHP NEWS - Core: . Fixed BC break introduced by patch for bug #67072. (Anatol) - . Fixed bug #67390 (insecure temporary file use in the configure script). - (Remi) (CVE-2014-3981) . Fixed bug #66622 (Closures do not correctly capture the late bound class (static::) in some cases). (Levi Morrison) + . Fixed bug #67390 (insecure temporary file use in the configure script). + (Remi) (CVE-2014-3981) - Date: . Fixed bug #67308 (Serialize of DateTime truncates fractions of second). From cfccdc63628944cde2c9fe9bfbc897cce3e22dc5 Mon Sep 17 00:00:00 2001 From: Boro Sitnikovski Date: Fri, 20 Sep 2013 02:58:11 +0200 Subject: [PATCH 30/77] Bug 64744 Show the type of the non-object for more descriptive errors --- Zend/tests/dereference_002.phpt | 2 +- Zend/zend_vm_def.h | 2 +- Zend/zend_vm_execute.h | 32 +++++++++---------- ext/mysqli/tests/bug33491.phpt | 2 +- .../pdo_mysql_prepare_native_clear_error.phpt | 2 +- .../pdo_mysql_prepare_native_mixed_style.phpt | 2 +- .../tests/pdo_mysql_stmt_errorcode.phpt | 2 +- .../tests/pdo_mysql_stmt_multiquery.phpt | 2 +- 8 files changed, 23 insertions(+), 23 deletions(-) diff --git a/Zend/tests/dereference_002.phpt b/Zend/tests/dereference_002.phpt index 022ff370d22..da13decc396 100644 --- a/Zend/tests/dereference_002.phpt +++ b/Zend/tests/dereference_002.phpt @@ -76,4 +76,4 @@ NULL Notice: Undefined offset: 3 in %s on line %d -Fatal error: Call to a member function bar() on a non-object in %s on line %d +Fatal error: Call to a member function bar() on null in %s on line %d diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index ba3ed8793e3..cd7dbf498da 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -2463,7 +2463,7 @@ ZEND_VM_HANDLER(112, ZEND_INIT_METHOD_CALL, TMP|VAR|UNUSED|CV, CONST|TMP|VAR|CV) FREE_OP2(); HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index e275a3c42ca..29a8c0c80f7 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -9313,7 +9313,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMP_CONST_HANDLER(ZEND_OPCO HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -10178,7 +10178,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE zval_dtor(free_op2.var); HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -11044,7 +11044,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE zval_ptr_dtor_nogc(&free_op2.var); HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -12490,7 +12490,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_ HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -15728,7 +15728,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCO HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -18074,7 +18074,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE zval_dtor(free_op2.var); HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -20381,7 +20381,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE zval_ptr_dtor_nogc(&free_op2.var); HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -23838,7 +23838,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_ HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -25480,7 +25480,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_O HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -26888,7 +26888,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMP_HANDLER(ZEND_OPC zval_dtor(free_op2.var); HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -28202,7 +28202,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_VAR_HANDLER(ZEND_OPC zval_ptr_dtor_nogc(&free_op2.var); HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -29944,7 +29944,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCO HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -33183,7 +33183,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER(ZEND_OPCOD HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -35295,7 +35295,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_ zval_dtor(free_op2.var); HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -37462,7 +37462,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_ zval_ptr_dtor_nogc(&free_op2.var); HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -40630,7 +40630,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_H HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { diff --git a/ext/mysqli/tests/bug33491.phpt b/ext/mysqli/tests/bug33491.phpt index 168ecb03810..7e994bc4d0b 100644 --- a/ext/mysqli/tests/bug33491.phpt +++ b/ext/mysqli/tests/bug33491.phpt @@ -26,4 +26,4 @@ $DB->query_single('SELECT DATE()'); ?> --EXPECTF-- -Fatal error: Call to a member function fetch_row() on a non-object in %sbug33491.php on line %d +Fatal error: Call to a member function fetch_row() on boolean in %sbug33491.php on line %d diff --git a/ext/pdo_mysql/tests/pdo_mysql_prepare_native_clear_error.phpt b/ext/pdo_mysql/tests/pdo_mysql_prepare_native_clear_error.phpt index 42c3d074ad3..224684b8782 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_prepare_native_clear_error.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_prepare_native_clear_error.phpt @@ -93,4 +93,4 @@ array(1) { Warning: PDO::prepare(): SQLSTATE[42S22]: Column not found: 1054 Unknown column 'unknown_column' in 'field list' in %s on line %d -Fatal error: Call to a member function execute() on a non-object in %s on line %d \ No newline at end of file +Fatal error: Call to a member function execute() on boolean in %s on line %d diff --git a/ext/pdo_mysql/tests/pdo_mysql_prepare_native_mixed_style.phpt b/ext/pdo_mysql/tests/pdo_mysql_prepare_native_mixed_style.phpt index 90cedef5617..b7b0ab6294c 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_prepare_native_mixed_style.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_prepare_native_mixed_style.phpt @@ -36,4 +36,4 @@ Warning: PDO::prepare(): SQLSTATE[HY093]: Invalid parameter number: mixed named Warning: PDO::prepare(): SQLSTATE[HY093]: Invalid parameter number in %s on line %d -Fatal error: Call to a member function execute() on a non-object in %s on line %d \ No newline at end of file +Fatal error: Call to a member function execute() on boolean in %s on line %d diff --git a/ext/pdo_mysql/tests/pdo_mysql_stmt_errorcode.phpt b/ext/pdo_mysql/tests/pdo_mysql_stmt_errorcode.phpt index 4d59e8c3b10..c16ce5dd1cb 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_stmt_errorcode.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_stmt_errorcode.phpt @@ -56,4 +56,4 @@ Testing native PS... Warning: PDO::prepare(): SQLSTATE[42S02]: Base table or view not found: 1146 Table '%s.ihopeitdoesnotexist' doesn't exist in %s on line %d -Fatal error: Call to a member function execute() on a non-object in %s on line %d \ No newline at end of file +Fatal error: Call to a member function execute() on boolean in %s on line %d diff --git a/ext/pdo_mysql/tests/pdo_mysql_stmt_multiquery.phpt b/ext/pdo_mysql/tests/pdo_mysql_stmt_multiquery.phpt index 91b5237ea8d..56c37c5f1a9 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_stmt_multiquery.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_stmt_multiquery.phpt @@ -99,4 +99,4 @@ Native Prepared Statements... Warning: PDO::query(): SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%SSELECT label FROM test ORDER BY id ASC LIMIT 1' at line %d in %s on line %d -Fatal error: Call to a member function errorInfo() on a non-object in %s on line %d +Fatal error: Call to a member function errorInfo() on boolean in %s on line %d From 244c289f9cc29c25fcd9988d0ffefa693c27ae32 Mon Sep 17 00:00:00 2001 From: Sobak Date: Sat, 10 May 2014 13:16:48 +0200 Subject: [PATCH 31/77] Removed cvsclean and svnclean tools --- build/build.mk | 14 +---- svnclean.bat | 2 - vcsclean | 6 +- win32/build/cvsclean.js | 120 ---------------------------------------- win32/build/svnclean.js | 120 ---------------------------------------- 5 files changed, 2 insertions(+), 260 deletions(-) delete mode 100755 svnclean.bat delete mode 100644 win32/build/cvsclean.js delete mode 100644 win32/build/svnclean.js diff --git a/build/build.mk b/build/build.mk index ac5dadb313b..2c189159a26 100644 --- a/build/build.mk +++ b/build/build.mk @@ -1,7 +1,7 @@ # +----------------------------------------------------------------------+ # | PHP Version 5 | # +----------------------------------------------------------------------+ -# | Copyright (c) 1997-2006 The PHP Group | +# | Copyright (c) 1997-2014 The PHP Group | # +----------------------------------------------------------------------+ # | This source file is subject to version 3.01 of the PHP license, | # | that is bundled with this package in the file LICENSE, and is | @@ -14,8 +14,6 @@ # | Author: Sascha Schumann | # +----------------------------------------------------------------------+ # -# $Id$ -# # # Makefile to generate build tools # @@ -61,16 +59,6 @@ snapshot: md5sum $$distname.tar.bz2; \ bzip2 -t $$distname.tar.bz2 -cvsclean-work: - @for i in `find . -name .cvsignore`; do \ - (cd `dirname $$i` 2>/dev/null && rm -rf `cat .cvsignore | grep -v config.nice | sed 's/[[:space:]]/ /g'` *.o *.a *.lo *.la *.gcno *.gcda .libs || true); \ - done - -svnclean-work: - @for i in `find . -type d ! -path '*/.svn/*' | grep -v '.svn'`; do \ - (cd $$i 2>/dev/null && rm -rf `svn propget svn:ignore . | grep -v config.nice` *.o *.a *.lo *.la *.gcno *.gcda .libs || true); \ - done - gitclean-work: @if (test ! -f '.git/info/exclude' || grep -s "git-ls-files" .git/info/exclude); then \ (echo "Rebuild .git/info/exclude" && echo '*.o' > .git/info/exclude && git svn propget svn:ignore | grep -v config.nice >> .git/info/exclude); \ diff --git a/svnclean.bat b/svnclean.bat deleted file mode 100755 index 4c0118d6719..00000000000 --- a/svnclean.bat +++ /dev/null @@ -1,2 +0,0 @@ -@echo off -cscript /nologo win32\build\cvsclean.js diff --git a/vcsclean b/vcsclean index e1004e4349e..b5d201b69f4 100755 --- a/vcsclean +++ b/vcsclean @@ -1,10 +1,6 @@ #! /bin/sh -if test -d 'CVS'; then - ${MAKE:-make} -f build/build.mk cvsclean-work -elif test -d '.svn'; then - ${MAKE:-make} -f build/build.mk svnclean-work -elif test -d '.git'; then +if test -d '.git'; then ${MAKE:-make} -f build/build.mk gitclean-work else echo "Can't figure out your VCS, not cleaning." diff --git a/win32/build/cvsclean.js b/win32/build/cvsclean.js deleted file mode 100644 index c5f92a38833..00000000000 --- a/win32/build/cvsclean.js +++ /dev/null @@ -1,120 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2009 The PHP Group | - +----------------------------------------------------------------------+ - | This source file is subject to version 3.01 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Wez Furlong | - | Pierre A. Joye | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ -// Cleans up files that do not belong in the repository - -var FSO = WScript.CreateObject("Scripting.FileSystemObject"); -var WshShell = WScript.CreateObject("WScript.Shell"); -var STDOUT = WScript.StdOut; - -/* svn propget svn:ignore dirname */ -function find_ignore(dirname) -{ - dirname = "" + dirname; - dirname_len = dirname.length; - - if (!FSO.FolderExists(dirname) || (dirname_len >= 4 && - dirname.substring(dirname_len - 4) == ".svn")) { - return; - } - - var f = FSO.GetFolder(dirname); - var fc = new Enumerator(f.SubFolders); - - for (; !fc.atEnd(); fc.moveNext()) { - find_ignore(fc.item()); - } - - kill_from_ignore(dirname); -} - -/* recursive remove using ignore props style wildcard matching; - * note that FSO.DeleteFolder and FSO.DeleteFile methods both - * accept wildcards, but that they are dangerous to use eg: - * "*.php" will match "*.phpt" */ -function rm_r(filename) -{ - if (FSO.FolderExists(filename)) { - var fc = new Enumerator(FSO.GetFolder(filename).SubFolders); - - for (; !fc.atEnd(); fc.moveNext()) { - rm_r(fc.item()); - } - - fc = new Enumerator(FSO.GetFolder(filename).Files); - - for (; !fc.atEnd(); fc.moveNext()) { - FSO.DeleteFile(fc.item(), true); - } - - FSO.DeleteFolder(filename, true); - } else if (FSO.FileExists(filename)) { - FSO.DeleteFile(filename, true); - } else { - /* we need to handle wildcards here */ - var foldername = FSO.GetParentFolderName(filename); - - if (foldername == "") - foldername = "."; - - var filename = FSO.GetFileName(filename); - - var retext = filename.replace(/\./g, '\\.'); - retext = '^' + retext.replace(/\*/g, '.*') + "$"; - var re = new RegExp(retext); - - var folder = FSO.GetFolder(foldername); - var fc = new Enumerator(folder.SubFolders); - for (; !fc.atEnd(); fc.moveNext()) { - - var item = FSO.GetFileName(fc.item()); - - if (item.match(re)) { - rm_r(fc.item()); - } - } - var fc = new Enumerator(folder.Files); - for (; !fc.atEnd(); fc.moveNext()) { - item = FSO.GetFileName(fc.item()); - - if (item.match(re)) { - FSO.DeleteFile(fc.item(), true); - } - } - } -} - -function kill_from_ignore(dirname) -{ - var l; - var e = WshShell.Exec("svn propget svn:ignore " + dirname); - var re = /^(config\.nice.*)|(\*)$/i; - - while (!e.StdOut.atEndOfStream) { - l = e.StdOut.ReadLine(); - if (l.length == 0 || re.test(l)) { - continue; - } - rm_r(dirname + l); - } - -} - -find_ignore("."); diff --git a/win32/build/svnclean.js b/win32/build/svnclean.js deleted file mode 100644 index c5f92a38833..00000000000 --- a/win32/build/svnclean.js +++ /dev/null @@ -1,120 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2009 The PHP Group | - +----------------------------------------------------------------------+ - | This source file is subject to version 3.01 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Wez Furlong | - | Pierre A. Joye | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ -// Cleans up files that do not belong in the repository - -var FSO = WScript.CreateObject("Scripting.FileSystemObject"); -var WshShell = WScript.CreateObject("WScript.Shell"); -var STDOUT = WScript.StdOut; - -/* svn propget svn:ignore dirname */ -function find_ignore(dirname) -{ - dirname = "" + dirname; - dirname_len = dirname.length; - - if (!FSO.FolderExists(dirname) || (dirname_len >= 4 && - dirname.substring(dirname_len - 4) == ".svn")) { - return; - } - - var f = FSO.GetFolder(dirname); - var fc = new Enumerator(f.SubFolders); - - for (; !fc.atEnd(); fc.moveNext()) { - find_ignore(fc.item()); - } - - kill_from_ignore(dirname); -} - -/* recursive remove using ignore props style wildcard matching; - * note that FSO.DeleteFolder and FSO.DeleteFile methods both - * accept wildcards, but that they are dangerous to use eg: - * "*.php" will match "*.phpt" */ -function rm_r(filename) -{ - if (FSO.FolderExists(filename)) { - var fc = new Enumerator(FSO.GetFolder(filename).SubFolders); - - for (; !fc.atEnd(); fc.moveNext()) { - rm_r(fc.item()); - } - - fc = new Enumerator(FSO.GetFolder(filename).Files); - - for (; !fc.atEnd(); fc.moveNext()) { - FSO.DeleteFile(fc.item(), true); - } - - FSO.DeleteFolder(filename, true); - } else if (FSO.FileExists(filename)) { - FSO.DeleteFile(filename, true); - } else { - /* we need to handle wildcards here */ - var foldername = FSO.GetParentFolderName(filename); - - if (foldername == "") - foldername = "."; - - var filename = FSO.GetFileName(filename); - - var retext = filename.replace(/\./g, '\\.'); - retext = '^' + retext.replace(/\*/g, '.*') + "$"; - var re = new RegExp(retext); - - var folder = FSO.GetFolder(foldername); - var fc = new Enumerator(folder.SubFolders); - for (; !fc.atEnd(); fc.moveNext()) { - - var item = FSO.GetFileName(fc.item()); - - if (item.match(re)) { - rm_r(fc.item()); - } - } - var fc = new Enumerator(folder.Files); - for (; !fc.atEnd(); fc.moveNext()) { - item = FSO.GetFileName(fc.item()); - - if (item.match(re)) { - FSO.DeleteFile(fc.item(), true); - } - } - } -} - -function kill_from_ignore(dirname) -{ - var l; - var e = WshShell.Exec("svn propget svn:ignore " + dirname); - var re = /^(config\.nice.*)|(\*)$/i; - - while (!e.StdOut.atEndOfStream) { - l = e.StdOut.ReadLine(); - if (l.length == 0 || re.test(l)) { - continue; - } - rm_r(dirname + l); - } - -} - -find_ignore("."); From 00c362c1f6ca888f64902c87c10da0d77ec0766c Mon Sep 17 00:00:00 2001 From: Sobak Date: Sat, 10 May 2014 13:30:54 +0200 Subject: [PATCH 32/77] Removed another cvsclean file --- ext/mbstring/libmbfl/cvsclean | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100755 ext/mbstring/libmbfl/cvsclean diff --git a/ext/mbstring/libmbfl/cvsclean b/ext/mbstring/libmbfl/cvsclean deleted file mode 100755 index 60ae246a50e..00000000000 --- a/ext/mbstring/libmbfl/cvsclean +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh -function cvsclean_sub() { - prev_pwd=`pwd` - cd $1 - cat .cvsignore | while read fname; do - rm -r -f $fname - done - cd "$prev_pwd" -} - -cvsclean_sub . -cvsclean_sub mbfl -cvsclean_sub filters -cvsclean_sub nls From aebb23e4dbfd9eee3f0ace6e37c876684aa62b20 Mon Sep 17 00:00:00 2001 From: Boro Sitnikovski Date: Thu, 26 Sep 2013 02:03:48 +0200 Subject: [PATCH 33/77] Bug 49898 __getCookies() method implementation --- ext/soap/soap.c | 23 +++++++++++++++++++++++ ext/soap/tests/bug49898.phpt | 14 ++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 ext/soap/tests/bug49898.phpt diff --git a/ext/soap/soap.c b/ext/soap/soap.c index ca7f206bdd0..eaa57d90328 100644 --- a/ext/soap/soap.c +++ b/ext/soap/soap.c @@ -225,6 +225,7 @@ PHP_METHOD(SoapClient, __getFunctions); PHP_METHOD(SoapClient, __getTypes); PHP_METHOD(SoapClient, __doRequest); PHP_METHOD(SoapClient, __setCookie); +PHP_METHOD(SoapClient, __getCookies); PHP_METHOD(SoapClient, __setLocation); PHP_METHOD(SoapClient, __setSoapHeaders); @@ -368,6 +369,9 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_soapclient___setcookie, 0, 0, 1) ZEND_ARG_INFO(0, value) ZEND_END_ARG_INFO() +ZEND_BEGIN_ARG_INFO(arginfo_soapclient___getcookies, 0) +ZEND_END_ARG_INFO() + ZEND_BEGIN_ARG_INFO_EX(arginfo_soapclient___setsoapheaders, 0, 0, 1) ZEND_ARG_INFO(0, soapheaders) ZEND_END_ARG_INFO() @@ -422,6 +426,7 @@ static const zend_function_entry soap_client_functions[] = { PHP_ME(SoapClient, __getTypes, arginfo_soapclient___gettypes, 0) PHP_ME(SoapClient, __doRequest, arginfo_soapclient___dorequest, 0) PHP_ME(SoapClient, __setCookie, arginfo_soapclient___setcookie, 0) + PHP_ME(SoapClient, __getCookies, arginfo_soapclient___getcookies, 0) PHP_ME(SoapClient, __setLocation, arginfo_soapclient___setlocation, 0) PHP_ME(SoapClient, __setSoapHeaders, arginfo_soapclient___setsoapheaders, 0) PHP_FE_END @@ -3132,6 +3137,24 @@ PHP_METHOD(SoapClient, __setCookie) } /* }}} */ +/* {{{ proto array SoapClient::__getCookies ( void ) + Returns list of cookies */ +PHP_METHOD(SoapClient, __getCookies) +{ + zval **cookies, *tmp; + + if (zend_parse_parameters_none() == FAILURE) { + return; + } + + array_init(return_value); + + if (zend_hash_find(Z_OBJPROP_P(this_ptr), "_cookies", sizeof("_cookies"), (void **)&cookies) != FAILURE) { + zend_hash_copy(Z_ARRVAL_P(return_value), Z_ARRVAL_P(*cookies), (copy_ctor_func_t) zval_add_ref, (void *)&tmp, sizeof(zval*)); + } +} +/* }}} */ + /* {{{ proto void SoapClient::__setSoapHeaders(array SoapHeaders) Sets SOAP headers for subsequent calls (replaces any previous values). diff --git a/ext/soap/tests/bug49898.phpt b/ext/soap/tests/bug49898.phpt new file mode 100644 index 00000000000..eea4ea490a9 --- /dev/null +++ b/ext/soap/tests/bug49898.phpt @@ -0,0 +1,14 @@ +--TEST-- +Test for bug #49898: SoapClient::__getCookies() implementation +--CREDITS-- +Boro Sitnikovski +--SKIPIF-- + +--FILE-- + 'mo:http://www.w3.org/', 'location' => 'http://some.url')); +$client->__setCookie("CookieTest", "HelloWorld"); +var_dump($client->__getCookies()['CookieTest'][0]); +?> +--EXPECT-- +string(10) "HelloWorld" From 9b5d56fd6117ea62fb86c968b0cce2f7c738f6b4 Mon Sep 17 00:00:00 2001 From: Stanislav Malyshev Date: Sun, 8 Jun 2014 19:38:07 -0700 Subject: [PATCH 34/77] add news --- NEWS | 3 +++ UPGRADING | 2 ++ 2 files changed, 5 insertions(+) diff --git a/NEWS b/NEWS index f98155f321f..512aba80246 100644 --- a/NEWS +++ b/NEWS @@ -25,6 +25,9 @@ PHP NEWS . Fixed bug #66636 (openssl_x509_parse warning with V_ASN1_GENERALIZEDTIME). (Paul Oehler) +- SOAP: + . Implemented FR #49898 (Add SoapClient::__getCookies()). (Boro Sitnikovski) + - SPL: . Fixed bug #67359 (Segfault in recursiveDirectoryIterator). (Laruence) . Fixed bug #67360 (Missing element after ArrayObject::getIterator). (Adam) diff --git a/UPGRADING b/UPGRADING index 74f59e61362..80b6fb1aa62 100644 --- a/UPGRADING +++ b/UPGRADING @@ -373,6 +373,8 @@ PHP 5.4 UPGRADE NOTES - Added iterator support in MySQLi. mysqli_result implements Traversable. +- Since 5.4.30, SOAPClient has __getCookies() method. + ============================== 6. Changes to existing methods ============================== From 706324bf481a0be2f1e713e96c4506fc09162c92 Mon Sep 17 00:00:00 2001 From: Stanislav Malyshev Date: Sun, 8 Jun 2014 19:47:14 -0700 Subject: [PATCH 35/77] update news --- NEWS | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index f65f1699edd..69e5ecee304 100644 --- a/NEWS +++ b/NEWS @@ -3,19 +3,23 @@ PHP NEWS ?? ??? 2014, PHP 5.6.0 Release Candidate 1 - Core: + . Implemented FR #64744 (Differentiate between member function call on a null + and non-null, non-objects). (Boro Sitnikovski) . Fixed bug #66622 (Closures do not correctly capture the late bound class (static::) in some cases). (Levi Morrison) . Fixed bug #67390 (insecure temporary file use in the configure script). (Remi) (CVE-2014-3981) . Fixed bug #67392 (dtrace breaks argument unpack). (Nikita) - - OpenSSL: . Fixed bug #65698 (certificates validity parsing does not work past 2050). (Paul Oehler) . Fixed bug #66636 (openssl_x509_parse warning with V_ASN1_GENERALIZEDTIME). (Paul Oehler) +- SOAP: + . Implemented FR #49898 (Add SoapClient::__getCookies()). (Boro Sitnikovski) + - Tokenizer: . Fixed bug #67395 (token_name() does not return name for T_POW and T_POW_EQUAL token). (Ferenc) From 5c8c57aa6c340215961ac219f8d7d1c15be19566 Mon Sep 17 00:00:00 2001 From: Matteo Beccati Date: Wed, 4 Jun 2014 13:26:24 +0200 Subject: [PATCH 36/77] Fixed DOM tests when using libxml2 versions patched against CVE-2014-0191 DOMDocument::substituteEntities needs to be set to true in order for external entities to be parsed. --- ext/dom/tests/DOMDocument_validate_external_dtd.phpt | 1 + ext/dom/tests/bug67081.phpt | 4 ++++ .../tests/libxml_set_external_entity_loader_variation1.phpt | 1 + 3 files changed, 6 insertions(+) diff --git a/ext/dom/tests/DOMDocument_validate_external_dtd.phpt b/ext/dom/tests/DOMDocument_validate_external_dtd.phpt index 51a044c54a6..dd4ec960d28 100644 --- a/ext/dom/tests/DOMDocument_validate_external_dtd.phpt +++ b/ext/dom/tests/DOMDocument_validate_external_dtd.phpt @@ -12,6 +12,7 @@ require_once dirname(__FILE__) .'/skipif.inc'; // reusing existing xml: http://cvs.php.net/viewvc.cgi/php-src/ext/dom/tests/dom.xml?view=co&content-type=text%2Fplain // reusing existing dtd: http://cvs.php.net/viewvc.cgi/php-src/ext/dom/tests/dom.ent?view=co&content-type=text%2Fplain $dom = new DOMDocument('1.0'); +$dom->substituteEntities = true; $dom->load(dirname(__FILE__).'/dom.xml'); var_dump($dom->validate()); ?> diff --git a/ext/dom/tests/bug67081.phpt b/ext/dom/tests/bug67081.phpt index 56c2c8e58b5..c6dc007d43e 100644 --- a/ext/dom/tests/bug67081.phpt +++ b/ext/dom/tests/bug67081.phpt @@ -7,18 +7,22 @@ require_once('skipif.inc'); --FILE-- substituteEntities = true; $domDocument->load(dirname(__FILE__) . DIRECTORY_SEPARATOR . "bug67081_0.xml"); var_dump($domDocument->doctype->internalSubset); $domDocument = new DOMDocument(); + $domDocument->substituteEntities = true; $domDocument->load(dirname(__FILE__) . DIRECTORY_SEPARATOR . "bug67081_1.xml"); var_dump($domDocument->doctype->internalSubset); $domDocument = new DOMDocument(); + $domDocument->substituteEntities = true; $domDocument->load(dirname(__FILE__) . DIRECTORY_SEPARATOR . "bug67081_2.xml"); var_dump($domDocument->doctype->internalSubset); $domDocument = new DOMDocument(); + $domDocument->substituteEntities = true; $domDocument->load(dirname(__FILE__) . DIRECTORY_SEPARATOR . "dom.xml"); var_dump($domDocument->doctype->internalSubset); ?> diff --git a/ext/libxml/tests/libxml_set_external_entity_loader_variation1.phpt b/ext/libxml/tests/libxml_set_external_entity_loader_variation1.phpt index c9c45940b9e..95819270434 100644 --- a/ext/libxml/tests/libxml_set_external_entity_loader_variation1.phpt +++ b/ext/libxml/tests/libxml_set_external_entity_loader_variation1.phpt @@ -37,6 +37,7 @@ libxml_set_external_entity_loader( ); $dd = new DOMDocument; +$dd->substituteEntities = true; $dd->resolveExternals = true; $r = $dd->loadXML($xml); var_dump($dd->validate()); From 62857998c5f69aee1249db870b0fb08af9012fb9 Mon Sep 17 00:00:00 2001 From: Stanislav Malyshev Date: Sun, 8 Jun 2014 23:00:38 -0700 Subject: [PATCH 37/77] Fixed bug #67399 (putenv with empty variable may lead to crash) --- NEWS | 1 + ext/standard/basic_functions.c | 145 +++++++++--------- .../tests/general_functions/putenv.phpt | 9 ++ 3 files changed, 82 insertions(+), 73 deletions(-) diff --git a/NEWS b/NEWS index 512aba80246..0c95f64ac03 100644 --- a/NEWS +++ b/NEWS @@ -8,6 +8,7 @@ PHP NEWS (static::) in some cases). (Levi Morrison) . Fixed bug #67390 (insecure temporary file use in the configure script). (Remi) (CVE-2014-3981) + . Fixed bug #67399 (putenv with empty variable may lead to crash). (Stas) - Date: . Fixed bug #67308 (Serialize of DateTime truncates fractions of second). diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index c01365589e5..4d4354d4ad6 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -4021,92 +4021,91 @@ PHP_FUNCTION(putenv) { char *setting; int setting_len; + char *p, **env; + putenv_entry pe; +#ifdef PHP_WIN32 + char *value = NULL; + int equals = 0; + int error_code; +#endif if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &setting, &setting_len) == FAILURE) { return; } + + if(setting_len == 0 || setting[0] == '=') { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid parameter syntax"); + RETURN_FALSE; + } - if (setting_len) { - char *p, **env; - putenv_entry pe; + pe.putenv_string = estrndup(setting, setting_len); + pe.key = estrndup(setting, setting_len); + if ((p = strchr(pe.key, '='))) { /* nullify the '=' if there is one */ + *p = '\0'; #ifdef PHP_WIN32 - char *value = NULL; - int equals = 0; - int error_code; + equals = 1; #endif + } - pe.putenv_string = estrndup(setting, setting_len); - pe.key = estrndup(setting, setting_len); - if ((p = strchr(pe.key, '='))) { /* nullify the '=' if there is one */ - *p = '\0'; + pe.key_len = strlen(pe.key); #ifdef PHP_WIN32 - equals = 1; -#endif - } - - pe.key_len = strlen(pe.key); -#ifdef PHP_WIN32 - if (equals) { - if (pe.key_len < setting_len - 1) { - value = p + 1; - } else { - /* empty string*/ - value = p; - } - } -#endif - - zend_hash_del(&BG(putenv_ht), pe.key, pe.key_len+1); - - /* find previous value */ - pe.previous_value = NULL; - for (env = environ; env != NULL && *env != NULL; env++) { - if (!strncmp(*env, pe.key, pe.key_len) && (*env)[pe.key_len] == '=') { /* found it */ -#if defined(PHP_WIN32) - /* must copy previous value because MSVCRT's putenv can free the string without notice */ - pe.previous_value = estrdup(*env); -#else - pe.previous_value = *env; -#endif - break; - } - } - -#if HAVE_UNSETENV - if (!p) { /* no '=' means we want to unset it */ - unsetenv(pe.putenv_string); - } - if (!p || putenv(pe.putenv_string) == 0) { /* success */ -#else -# ifndef PHP_WIN32 - if (putenv(pe.putenv_string) == 0) { /* success */ -# else - error_code = SetEnvironmentVariable(pe.key, value); -# if _MSC_VER < 1500 - /* Yet another VC6 bug, unset may return env not found */ - if (error_code != 0 || - (error_code == 0 && GetLastError() == ERROR_ENVVAR_NOT_FOUND)) { -# else - if (error_code != 0) { /* success */ -# endif -# endif -#endif - zend_hash_add(&BG(putenv_ht), pe.key, pe.key_len + 1, (void **) &pe, sizeof(putenv_entry), NULL); -#ifdef HAVE_TZSET - if (!strncmp(pe.key, "TZ", pe.key_len)) { - tzset(); - } -#endif - RETURN_TRUE; + if (equals) { + if (pe.key_len < setting_len - 1) { + value = p + 1; } else { - efree(pe.putenv_string); - efree(pe.key); - RETURN_FALSE; + /* empty string*/ + value = p; + } + } +#endif + + zend_hash_del(&BG(putenv_ht), pe.key, pe.key_len+1); + + /* find previous value */ + pe.previous_value = NULL; + for (env = environ; env != NULL && *env != NULL; env++) { + if (!strncmp(*env, pe.key, pe.key_len) && (*env)[pe.key_len] == '=') { /* found it */ +#if defined(PHP_WIN32) + /* must copy previous value because MSVCRT's putenv can free the string without notice */ + pe.previous_value = estrdup(*env); +#else + pe.previous_value = *env; +#endif + break; } } - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid parameter syntax"); - RETURN_FALSE; +#if HAVE_UNSETENV + if (!p) { /* no '=' means we want to unset it */ + unsetenv(pe.putenv_string); + } + if (!p || putenv(pe.putenv_string) == 0) { /* success */ +#else +# ifndef PHP_WIN32 + if (putenv(pe.putenv_string) == 0) { /* success */ +# else + error_code = SetEnvironmentVariable(pe.key, value); +# if _MSC_VER < 1500 + /* Yet another VC6 bug, unset may return env not found */ + if (error_code != 0 || + (error_code == 0 && GetLastError() == ERROR_ENVVAR_NOT_FOUND)) { +# else + if (error_code != 0) { /* success */ +# endif +# endif +#endif + zend_hash_add(&BG(putenv_ht), pe.key, pe.key_len + 1, (void **) &pe, sizeof(putenv_entry), NULL); +#ifdef HAVE_TZSET + if (!strncmp(pe.key, "TZ", pe.key_len)) { + tzset(); + } +#endif + RETURN_TRUE; + } else { + efree(pe.putenv_string); + efree(pe.key); + RETURN_FALSE; + } } /* }}} */ #endif diff --git a/ext/standard/tests/general_functions/putenv.phpt b/ext/standard/tests/general_functions/putenv.phpt index afe1badce48..254207320be 100644 --- a/ext/standard/tests/general_functions/putenv.phpt +++ b/ext/standard/tests/general_functions/putenv.phpt @@ -15,6 +15,9 @@ var_dump(getenv($var_name)); var_dump(putenv($var_name)); var_dump(getenv($var_name)); +var_dump(putenv("=123")); +var_dump(putenv("")); + echo "Done\n"; ?> --EXPECTF-- @@ -25,4 +28,10 @@ bool(true) string(0) "" bool(true) bool(false) + +Warning: putenv(): Invalid parameter syntax in %s on line %d +bool(false) + +Warning: putenv(): Invalid parameter syntax in %s on line %d +bool(false) Done From 4b0b03267636fb86ac19f4f0a48c55d08eb1be94 Mon Sep 17 00:00:00 2001 From: Stanislav Malyshev Date: Sun, 8 Jun 2014 23:00:38 -0700 Subject: [PATCH 38/77] Fixed bug #67399 (putenv with empty variable may lead to crash) --- NEWS | 1 + ext/standard/basic_functions.c | 145 +++++++++--------- .../tests/general_functions/putenv.phpt | 9 ++ 3 files changed, 82 insertions(+), 73 deletions(-) diff --git a/NEWS b/NEWS index e4834d46dc5..8aa05beaf6b 100644 --- a/NEWS +++ b/NEWS @@ -8,6 +8,7 @@ PHP NEWS (static::) in some cases). (Levi Morrison) . Fixed bug #67390 (insecure temporary file use in the configure script). (Remi) (CVE-2014-3981) + . Fixed bug #67399 (putenv with empty variable may lead to crash). (Stas) - Date: . Fixed bug #67308 (Serialize of DateTime truncates fractions of second). diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index e22725bdb0f..d23c050ac4a 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -4073,92 +4073,91 @@ PHP_FUNCTION(putenv) { char *setting; int setting_len; + char *p, **env; + putenv_entry pe; +#ifdef PHP_WIN32 + char *value = NULL; + int equals = 0; + int error_code; +#endif if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &setting, &setting_len) == FAILURE) { return; } + + if(setting_len == 0 || setting[0] == '=') { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid parameter syntax"); + RETURN_FALSE; + } - if (setting_len) { - char *p, **env; - putenv_entry pe; + pe.putenv_string = estrndup(setting, setting_len); + pe.key = estrndup(setting, setting_len); + if ((p = strchr(pe.key, '='))) { /* nullify the '=' if there is one */ + *p = '\0'; #ifdef PHP_WIN32 - char *value = NULL; - int equals = 0; - int error_code; + equals = 1; #endif + } - pe.putenv_string = estrndup(setting, setting_len); - pe.key = estrndup(setting, setting_len); - if ((p = strchr(pe.key, '='))) { /* nullify the '=' if there is one */ - *p = '\0'; + pe.key_len = strlen(pe.key); #ifdef PHP_WIN32 - equals = 1; -#endif - } - - pe.key_len = strlen(pe.key); -#ifdef PHP_WIN32 - if (equals) { - if (pe.key_len < setting_len - 1) { - value = p + 1; - } else { - /* empty string*/ - value = p; - } - } -#endif - - zend_hash_del(&BG(putenv_ht), pe.key, pe.key_len+1); - - /* find previous value */ - pe.previous_value = NULL; - for (env = environ; env != NULL && *env != NULL; env++) { - if (!strncmp(*env, pe.key, pe.key_len) && (*env)[pe.key_len] == '=') { /* found it */ -#if defined(PHP_WIN32) - /* must copy previous value because MSVCRT's putenv can free the string without notice */ - pe.previous_value = estrdup(*env); -#else - pe.previous_value = *env; -#endif - break; - } - } - -#if HAVE_UNSETENV - if (!p) { /* no '=' means we want to unset it */ - unsetenv(pe.putenv_string); - } - if (!p || putenv(pe.putenv_string) == 0) { /* success */ -#else -# ifndef PHP_WIN32 - if (putenv(pe.putenv_string) == 0) { /* success */ -# else - error_code = SetEnvironmentVariable(pe.key, value); -# if _MSC_VER < 1500 - /* Yet another VC6 bug, unset may return env not found */ - if (error_code != 0 || - (error_code == 0 && GetLastError() == ERROR_ENVVAR_NOT_FOUND)) { -# else - if (error_code != 0) { /* success */ -# endif -# endif -#endif - zend_hash_add(&BG(putenv_ht), pe.key, pe.key_len + 1, (void **) &pe, sizeof(putenv_entry), NULL); -#ifdef HAVE_TZSET - if (!strncmp(pe.key, "TZ", pe.key_len)) { - tzset(); - } -#endif - RETURN_TRUE; + if (equals) { + if (pe.key_len < setting_len - 1) { + value = p + 1; } else { - efree(pe.putenv_string); - efree(pe.key); - RETURN_FALSE; + /* empty string*/ + value = p; + } + } +#endif + + zend_hash_del(&BG(putenv_ht), pe.key, pe.key_len+1); + + /* find previous value */ + pe.previous_value = NULL; + for (env = environ; env != NULL && *env != NULL; env++) { + if (!strncmp(*env, pe.key, pe.key_len) && (*env)[pe.key_len] == '=') { /* found it */ +#if defined(PHP_WIN32) + /* must copy previous value because MSVCRT's putenv can free the string without notice */ + pe.previous_value = estrdup(*env); +#else + pe.previous_value = *env; +#endif + break; } } - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid parameter syntax"); - RETURN_FALSE; +#if HAVE_UNSETENV + if (!p) { /* no '=' means we want to unset it */ + unsetenv(pe.putenv_string); + } + if (!p || putenv(pe.putenv_string) == 0) { /* success */ +#else +# ifndef PHP_WIN32 + if (putenv(pe.putenv_string) == 0) { /* success */ +# else + error_code = SetEnvironmentVariable(pe.key, value); +# if _MSC_VER < 1500 + /* Yet another VC6 bug, unset may return env not found */ + if (error_code != 0 || + (error_code == 0 && GetLastError() == ERROR_ENVVAR_NOT_FOUND)) { +# else + if (error_code != 0) { /* success */ +# endif +# endif +#endif + zend_hash_add(&BG(putenv_ht), pe.key, pe.key_len + 1, (void **) &pe, sizeof(putenv_entry), NULL); +#ifdef HAVE_TZSET + if (!strncmp(pe.key, "TZ", pe.key_len)) { + tzset(); + } +#endif + RETURN_TRUE; + } else { + efree(pe.putenv_string); + efree(pe.key); + RETURN_FALSE; + } } /* }}} */ #endif diff --git a/ext/standard/tests/general_functions/putenv.phpt b/ext/standard/tests/general_functions/putenv.phpt index afe1badce48..254207320be 100644 --- a/ext/standard/tests/general_functions/putenv.phpt +++ b/ext/standard/tests/general_functions/putenv.phpt @@ -15,6 +15,9 @@ var_dump(getenv($var_name)); var_dump(putenv($var_name)); var_dump(getenv($var_name)); +var_dump(putenv("=123")); +var_dump(putenv("")); + echo "Done\n"; ?> --EXPECTF-- @@ -25,4 +28,10 @@ bool(true) string(0) "" bool(true) bool(false) + +Warning: putenv(): Invalid parameter syntax in %s on line %d +bool(false) + +Warning: putenv(): Invalid parameter syntax in %s on line %d +bool(false) Done From 336b5f59b6c4ff023f5e79a39eabd284ac7f1e66 Mon Sep 17 00:00:00 2001 From: Stanislav Malyshev Date: Sun, 8 Jun 2014 23:00:38 -0700 Subject: [PATCH 39/77] Fixed bug #67399 (putenv with empty variable may lead to crash) --- ext/standard/basic_functions.c | 145 +++++++++--------- .../tests/general_functions/putenv.phpt | 9 ++ 2 files changed, 81 insertions(+), 73 deletions(-) diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index e525ff2a80e..3baa9f43b03 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -4043,92 +4043,91 @@ PHP_FUNCTION(putenv) { char *setting; int setting_len; + char *p, **env; + putenv_entry pe; +#ifdef PHP_WIN32 + char *value = NULL; + int equals = 0; + int error_code; +#endif if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &setting, &setting_len) == FAILURE) { return; } + + if(setting_len == 0 || setting[0] == '=') { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid parameter syntax"); + RETURN_FALSE; + } - if (setting_len) { - char *p, **env; - putenv_entry pe; + pe.putenv_string = estrndup(setting, setting_len); + pe.key = estrndup(setting, setting_len); + if ((p = strchr(pe.key, '='))) { /* nullify the '=' if there is one */ + *p = '\0'; #ifdef PHP_WIN32 - char *value = NULL; - int equals = 0; - int error_code; + equals = 1; #endif + } - pe.putenv_string = estrndup(setting, setting_len); - pe.key = estrndup(setting, setting_len); - if ((p = strchr(pe.key, '='))) { /* nullify the '=' if there is one */ - *p = '\0'; + pe.key_len = strlen(pe.key); #ifdef PHP_WIN32 - equals = 1; -#endif - } - - pe.key_len = strlen(pe.key); -#ifdef PHP_WIN32 - if (equals) { - if (pe.key_len < setting_len - 1) { - value = p + 1; - } else { - /* empty string*/ - value = p; - } - } -#endif - - zend_hash_del(&BG(putenv_ht), pe.key, pe.key_len+1); - - /* find previous value */ - pe.previous_value = NULL; - for (env = environ; env != NULL && *env != NULL; env++) { - if (!strncmp(*env, pe.key, pe.key_len) && (*env)[pe.key_len] == '=') { /* found it */ -#if defined(PHP_WIN32) - /* must copy previous value because MSVCRT's putenv can free the string without notice */ - pe.previous_value = estrdup(*env); -#else - pe.previous_value = *env; -#endif - break; - } - } - -#if HAVE_UNSETENV - if (!p) { /* no '=' means we want to unset it */ - unsetenv(pe.putenv_string); - } - if (!p || putenv(pe.putenv_string) == 0) { /* success */ -#else -# ifndef PHP_WIN32 - if (putenv(pe.putenv_string) == 0) { /* success */ -# else - error_code = SetEnvironmentVariable(pe.key, value); -# if _MSC_VER < 1500 - /* Yet another VC6 bug, unset may return env not found */ - if (error_code != 0 || - (error_code == 0 && GetLastError() == ERROR_ENVVAR_NOT_FOUND)) { -# else - if (error_code != 0) { /* success */ -# endif -# endif -#endif - zend_hash_add(&BG(putenv_ht), pe.key, pe.key_len + 1, (void **) &pe, sizeof(putenv_entry), NULL); -#ifdef HAVE_TZSET - if (!strncmp(pe.key, "TZ", pe.key_len)) { - tzset(); - } -#endif - RETURN_TRUE; + if (equals) { + if (pe.key_len < setting_len - 1) { + value = p + 1; } else { - efree(pe.putenv_string); - efree(pe.key); - RETURN_FALSE; + /* empty string*/ + value = p; + } + } +#endif + + zend_hash_del(&BG(putenv_ht), pe.key, pe.key_len+1); + + /* find previous value */ + pe.previous_value = NULL; + for (env = environ; env != NULL && *env != NULL; env++) { + if (!strncmp(*env, pe.key, pe.key_len) && (*env)[pe.key_len] == '=') { /* found it */ +#if defined(PHP_WIN32) + /* must copy previous value because MSVCRT's putenv can free the string without notice */ + pe.previous_value = estrdup(*env); +#else + pe.previous_value = *env; +#endif + break; } } - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid parameter syntax"); - RETURN_FALSE; +#if HAVE_UNSETENV + if (!p) { /* no '=' means we want to unset it */ + unsetenv(pe.putenv_string); + } + if (!p || putenv(pe.putenv_string) == 0) { /* success */ +#else +# ifndef PHP_WIN32 + if (putenv(pe.putenv_string) == 0) { /* success */ +# else + error_code = SetEnvironmentVariable(pe.key, value); +# if _MSC_VER < 1500 + /* Yet another VC6 bug, unset may return env not found */ + if (error_code != 0 || + (error_code == 0 && GetLastError() == ERROR_ENVVAR_NOT_FOUND)) { +# else + if (error_code != 0) { /* success */ +# endif +# endif +#endif + zend_hash_add(&BG(putenv_ht), pe.key, pe.key_len + 1, (void **) &pe, sizeof(putenv_entry), NULL); +#ifdef HAVE_TZSET + if (!strncmp(pe.key, "TZ", pe.key_len)) { + tzset(); + } +#endif + RETURN_TRUE; + } else { + efree(pe.putenv_string); + efree(pe.key); + RETURN_FALSE; + } } /* }}} */ #endif diff --git a/ext/standard/tests/general_functions/putenv.phpt b/ext/standard/tests/general_functions/putenv.phpt index afe1badce48..254207320be 100644 --- a/ext/standard/tests/general_functions/putenv.phpt +++ b/ext/standard/tests/general_functions/putenv.phpt @@ -15,6 +15,9 @@ var_dump(getenv($var_name)); var_dump(putenv($var_name)); var_dump(getenv($var_name)); +var_dump(putenv("=123")); +var_dump(putenv("")); + echo "Done\n"; ?> --EXPECTF-- @@ -25,4 +28,10 @@ bool(true) string(0) "" bool(true) bool(false) + +Warning: putenv(): Invalid parameter syntax in %s on line %d +bool(false) + +Warning: putenv(): Invalid parameter syntax in %s on line %d +bool(false) Done From b060880c8747a8234c2334691dfe04a60b705a15 Mon Sep 17 00:00:00 2001 From: Stanislav Malyshev Date: Sun, 8 Jun 2014 23:00:38 -0700 Subject: [PATCH 40/77] Fixed bug #67399 (putenv with empty variable may lead to crash) --- ext/standard/basic_functions.c | 145 +++++++++--------- .../tests/general_functions/putenv.phpt | 9 ++ 2 files changed, 81 insertions(+), 73 deletions(-) diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index de3719e1e93..189281bac62 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -4029,92 +4029,91 @@ PHP_FUNCTION(putenv) { char *setting; int setting_len; + char *p, **env; + putenv_entry pe; +#ifdef PHP_WIN32 + char *value = NULL; + int equals = 0; + int error_code; +#endif if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &setting, &setting_len) == FAILURE) { return; } + + if(setting_len == 0 || setting[0] == '=') { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid parameter syntax"); + RETURN_FALSE; + } - if (setting_len) { - char *p, **env; - putenv_entry pe; + pe.putenv_string = estrndup(setting, setting_len); + pe.key = estrndup(setting, setting_len); + if ((p = strchr(pe.key, '='))) { /* nullify the '=' if there is one */ + *p = '\0'; #ifdef PHP_WIN32 - char *value = NULL; - int equals = 0; - int error_code; + equals = 1; #endif + } - pe.putenv_string = estrndup(setting, setting_len); - pe.key = estrndup(setting, setting_len); - if ((p = strchr(pe.key, '='))) { /* nullify the '=' if there is one */ - *p = '\0'; + pe.key_len = strlen(pe.key); #ifdef PHP_WIN32 - equals = 1; -#endif - } - - pe.key_len = strlen(pe.key); -#ifdef PHP_WIN32 - if (equals) { - if (pe.key_len < setting_len - 1) { - value = p + 1; - } else { - /* empty string*/ - value = p; - } - } -#endif - - zend_hash_del(&BG(putenv_ht), pe.key, pe.key_len+1); - - /* find previous value */ - pe.previous_value = NULL; - for (env = environ; env != NULL && *env != NULL; env++) { - if (!strncmp(*env, pe.key, pe.key_len) && (*env)[pe.key_len] == '=') { /* found it */ -#if defined(PHP_WIN32) - /* must copy previous value because MSVCRT's putenv can free the string without notice */ - pe.previous_value = estrdup(*env); -#else - pe.previous_value = *env; -#endif - break; - } - } - -#if HAVE_UNSETENV - if (!p) { /* no '=' means we want to unset it */ - unsetenv(pe.putenv_string); - } - if (!p || putenv(pe.putenv_string) == 0) { /* success */ -#else -# ifndef PHP_WIN32 - if (putenv(pe.putenv_string) == 0) { /* success */ -# else - error_code = SetEnvironmentVariable(pe.key, value); -# if _MSC_VER < 1500 - /* Yet another VC6 bug, unset may return env not found */ - if (error_code != 0 || - (error_code == 0 && GetLastError() == ERROR_ENVVAR_NOT_FOUND)) { -# else - if (error_code != 0) { /* success */ -# endif -# endif -#endif - zend_hash_add(&BG(putenv_ht), pe.key, pe.key_len + 1, (void **) &pe, sizeof(putenv_entry), NULL); -#ifdef HAVE_TZSET - if (!strncmp(pe.key, "TZ", pe.key_len)) { - tzset(); - } -#endif - RETURN_TRUE; + if (equals) { + if (pe.key_len < setting_len - 1) { + value = p + 1; } else { - efree(pe.putenv_string); - efree(pe.key); - RETURN_FALSE; + /* empty string*/ + value = p; + } + } +#endif + + zend_hash_del(&BG(putenv_ht), pe.key, pe.key_len+1); + + /* find previous value */ + pe.previous_value = NULL; + for (env = environ; env != NULL && *env != NULL; env++) { + if (!strncmp(*env, pe.key, pe.key_len) && (*env)[pe.key_len] == '=') { /* found it */ +#if defined(PHP_WIN32) + /* must copy previous value because MSVCRT's putenv can free the string without notice */ + pe.previous_value = estrdup(*env); +#else + pe.previous_value = *env; +#endif + break; } } - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid parameter syntax"); - RETURN_FALSE; +#if HAVE_UNSETENV + if (!p) { /* no '=' means we want to unset it */ + unsetenv(pe.putenv_string); + } + if (!p || putenv(pe.putenv_string) == 0) { /* success */ +#else +# ifndef PHP_WIN32 + if (putenv(pe.putenv_string) == 0) { /* success */ +# else + error_code = SetEnvironmentVariable(pe.key, value); +# if _MSC_VER < 1500 + /* Yet another VC6 bug, unset may return env not found */ + if (error_code != 0 || + (error_code == 0 && GetLastError() == ERROR_ENVVAR_NOT_FOUND)) { +# else + if (error_code != 0) { /* success */ +# endif +# endif +#endif + zend_hash_add(&BG(putenv_ht), pe.key, pe.key_len + 1, (void **) &pe, sizeof(putenv_entry), NULL); +#ifdef HAVE_TZSET + if (!strncmp(pe.key, "TZ", pe.key_len)) { + tzset(); + } +#endif + RETURN_TRUE; + } else { + efree(pe.putenv_string); + efree(pe.key); + RETURN_FALSE; + } } /* }}} */ #endif diff --git a/ext/standard/tests/general_functions/putenv.phpt b/ext/standard/tests/general_functions/putenv.phpt index afe1badce48..254207320be 100644 --- a/ext/standard/tests/general_functions/putenv.phpt +++ b/ext/standard/tests/general_functions/putenv.phpt @@ -15,6 +15,9 @@ var_dump(getenv($var_name)); var_dump(putenv($var_name)); var_dump(getenv($var_name)); +var_dump(putenv("=123")); +var_dump(putenv("")); + echo "Done\n"; ?> --EXPECTF-- @@ -25,4 +28,10 @@ bool(true) string(0) "" bool(true) bool(false) + +Warning: putenv(): Invalid parameter syntax in %s on line %d +bool(false) + +Warning: putenv(): Invalid parameter syntax in %s on line %d +bool(false) Done From 158b03fdef46458604d9ada7560f062bd36b8ef6 Mon Sep 17 00:00:00 2001 From: Bob Weinand Date: Mon, 9 Jun 2014 09:49:21 +0200 Subject: [PATCH 41/77] Finish fixing phpdbg on ZTS build --- phpdbg_lexer.c | 87 +++++++++++++++++++++++++++++--------------------- phpdbg_lexer.l | 2 +- 2 files changed, 51 insertions(+), 38 deletions(-) diff --git a/phpdbg_lexer.c b/phpdbg_lexer.c index 97fd18e7b13..420dcac042d 100644 --- a/phpdbg_lexer.c +++ b/phpdbg_lexer.c @@ -239,7 +239,7 @@ yy19: yyc_NORMAL: { static const unsigned char yybm[] = { - 16, 16, 16, 16, 16, 16, 16, 16, + 0, 16, 16, 16, 16, 16, 16, 16, 16, 8, 8, 16, 16, 8, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, @@ -307,7 +307,7 @@ yyc_NORMAL: if (yych <= 'e') goto yy40; if (yych <= 'f') goto yy41; if (yych <= 'h') goto yy32; - goto yy31; + goto yy30; } } else { if (yych <= 's') { @@ -351,20 +351,26 @@ yy27: if (yybm[0+(yych = *YYCURSOR)] & 8) { goto yy24; } +yy28: YYDEBUG(28, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; #line 68 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { return 0; } -#line 361 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 362 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy29: YYDEBUG(29, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - goto yy33; + yych = *++YYCURSOR; + goto yy28; yy30: YYDEBUG(30, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'f') goto yy94; + goto yy33; +yy31: + YYDEBUG(31, *YYCURSOR); yyleng = (size_t) YYCURSOR - (size_t) yytext; #line 125 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { @@ -373,13 +379,7 @@ yy30: yylval->len = yyleng; return T_ID; } -#line 377 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" -yy31: - YYDEBUG(31, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if (yych == 'f') goto yy94; - goto yy33; +#line 383 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy32: YYDEBUG(32, *YYCURSOR); yyaccept = 0; @@ -391,7 +391,7 @@ yy33: if (yybm[0+yych] & 16) { goto yy32; } - if (yych <= '9') goto yy30; + if (yych <= '9') goto yy31; goto yy54; yy34: YYDEBUG(34, *YYCURSOR); @@ -405,6 +405,7 @@ yy34: } if (yych <= 0x1F) { if (yych <= '\n') { + if (yych <= 0x00) goto yy36; if (yych <= 0x08) goto yy32; } else { if (yych != '\r') goto yy32; @@ -427,7 +428,7 @@ yy36: yylval->num = atoi(yytext); return T_DIGITS; } -#line 431 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 432 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy37: YYDEBUG(37, *YYCURSOR); yyaccept = 1; @@ -437,6 +438,7 @@ yy37: } if (yych <= 0x1F) { if (yych <= '\n') { + if (yych <= 0x00) goto yy36; if (yych <= 0x08) goto yy33; goto yy36; } else { @@ -517,7 +519,7 @@ yy47: { return T_POUND; } -#line 521 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 523 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy49: YYDEBUG(49, *YYCURSOR); ++YYCURSOR; @@ -528,7 +530,7 @@ yy49: { return T_COLON; } -#line 532 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 534 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy51: YYDEBUG(51, *YYCURSOR); ++YYCURSOR; @@ -538,7 +540,7 @@ yy51: { return T_DCOLON; } -#line 542 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 544 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy53: YYDEBUG(53, *YYCURSOR); yyaccept = 0; @@ -555,7 +557,7 @@ yy55: if (yyaccept <= 3) { if (yyaccept <= 1) { if (yyaccept <= 0) { - goto yy30; + goto yy31; } else { goto yy36; } @@ -592,7 +594,7 @@ yy56: yylval->len = yyleng; return T_PROTO; } -#line 596 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 598 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy59: YYDEBUG(59, *YYCURSOR); yyaccept = 0; @@ -622,6 +624,7 @@ yy62: } if (yych <= 0x1F) { if (yych <= '\n') { + if (yych <= 0x00) goto yy64; if (yych <= 0x08) goto yy32; } else { if (yych != '\r') goto yy32; @@ -645,7 +648,7 @@ yy64: yylval->len = yyleng; return T_OPCODE; } -#line 649 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 652 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy65: YYDEBUG(65, *YYCURSOR); yyaccept = 0; @@ -656,9 +659,12 @@ yy66: yyaccept = 3; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '\r') { - if (yych <= 0x08) goto yy33; - if (yych <= '\n') goto yy67; - if (yych <= '\f') goto yy33; + if (yych <= 0x08) { + if (yych >= 0x01) goto yy33; + } else { + if (yych <= '\n') goto yy67; + if (yych <= '\f') goto yy33; + } } else { if (yych <= ' ') { if (yych <= 0x1F) goto yy33; @@ -675,7 +681,7 @@ yy67: yylval->num = 1; return T_TRUTHY; } -#line 679 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 685 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy68: YYDEBUG(68, *YYCURSOR); yyaccept = 0; @@ -696,9 +702,12 @@ yy71: yyaccept = 4; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '\r') { - if (yych <= 0x08) goto yy33; - if (yych <= '\n') goto yy72; - if (yych <= '\f') goto yy33; + if (yych <= 0x08) { + if (yych >= 0x01) goto yy33; + } else { + if (yych <= '\n') goto yy72; + if (yych <= '\f') goto yy33; + } } else { if (yych <= ' ') { if (yych <= 0x1F) goto yy33; @@ -715,7 +724,7 @@ yy72: yylval->num = 0; return T_FALSY; } -#line 719 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 728 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy73: YYDEBUG(73, *YYCURSOR); yyaccept = 0; @@ -812,6 +821,7 @@ yy91: } if (yych <= 0x1F) { if (yych <= '\n') { + if (yych <= 0x00) goto yy93; if (yych <= 0x08) goto yy32; } else { if (yych != '\r') goto yy32; @@ -834,15 +844,18 @@ yy93: yylval->addr = strtoul(yytext, 0, 16); return T_ADDR; } -#line 838 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 848 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy94: YYDEBUG(94, *YYCURSOR); yyaccept = 6; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '\r') { - if (yych <= 0x08) goto yy33; - if (yych <= '\n') goto yy95; - if (yych <= '\f') goto yy33; + if (yych <= 0x08) { + if (yych >= 0x01) goto yy33; + } else { + if (yych <= '\n') goto yy95; + if (yych <= '\f') goto yy33; + } } else { if (yych <= ' ') { if (yych <= 0x1F) goto yy33; @@ -859,7 +872,7 @@ yy95: phpdbg_init_param(yylval, EMPTY_PARAM); return T_IF; } -#line 863 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 876 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" } /* *********************************** */ yyc_RAW: @@ -929,7 +942,7 @@ yy100: yylval->len = yyleng; return T_INPUT; } -#line 933 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 946 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy101: YYDEBUG(101, *YYCURSOR); ++YYCURSOR; @@ -943,7 +956,7 @@ yy102: { return 0; } -#line 947 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 960 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" yy103: YYDEBUG(103, *YYCURSOR); yych = *++YYCURSOR; @@ -975,7 +988,7 @@ yy106: goto restart; } -#line 979 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +#line 992 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" } } #line 168 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" diff --git a/phpdbg_lexer.l b/phpdbg_lexer.l index cb8bd9b18d8..4d9c837f1e4 100644 --- a/phpdbg_lexer.l +++ b/phpdbg_lexer.l @@ -58,7 +58,7 @@ T_RUN "run" T_RUN_SHORT "r" WS [ \r\n\t]+ DIGITS [0-9\.]+ -ID [^ \r\n\t:#]+ +ID [^ \r\n\t:#\000]+ ADDR [0][x][a-fA-F0-9]+ OPCODE (ZEND_|zend_)([A-Za-z])+ INPUT [^\n\000]+ From 5ec5c80dc4431baed0dc828ab1b20d3fd45cd1b3 Mon Sep 17 00:00:00 2001 From: Ferenc Kovacs Date: Mon, 9 Jun 2014 15:30:09 +0200 Subject: [PATCH 42/77] enable phpdbg for the travis build, and also run the testsuite for it --- .travis.yml | 4 +++- travis/compile.sh | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5b49434cc83..8c72df91805 100644 --- a/.travis.yml +++ b/.travis.yml @@ -32,4 +32,6 @@ before_script: - . ./travis/ext/pdo_pgsql/setup.sh # Run PHPs run-tests.php -script: ./sapi/cli/php run-tests.php -p `pwd`/sapi/cli/php -g "FAIL,XFAIL,BORK,WARN,LEAK,SKIP" --show-diff --set-timeout 120 +script: + - ./sapi/cli/php run-tests.php -p `pwd`/sapi/cli/php -g "FAIL,XFAIL,BORK,WARN,LEAK,SKIP" --show-diff --set-timeout 120 + - ./sapi/cli/php sapi/phpdbg/tests/run-tests.php -diff2stdout --phpdbg sapi/phpdbg/phpdbg diff --git a/travis/compile.sh b/travis/compile.sh index 899fb5a3351..6ad3bfc3967 100755 --- a/travis/compile.sh +++ b/travis/compile.sh @@ -47,5 +47,6 @@ $TS \ --with-bz2 \ --with-openssl \ --with-gmp \ ---enable-bcmath +--enable-bcmath \ +--enable-phpdbg make --quiet From 58c6a08e00d4a8c99123cfb36f3a399a9b352d24 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Tue, 10 Jun 2014 10:28:34 +0200 Subject: [PATCH 43/77] Fixed bug #67406 built-in web-server segfaults on startup Reproduce on aarch64. From select man page: "select() may update the timeout argument to indicate how much time was left." So "const" is not ok. --- sapi/cli/php_cli_server.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sapi/cli/php_cli_server.c b/sapi/cli/php_cli_server.c index e838d30558b..3fd24ea1237 100644 --- a/sapi/cli/php_cli_server.c +++ b/sapi/cli/php_cli_server.c @@ -768,11 +768,11 @@ static void php_cli_server_poller_remove(php_cli_server_poller *poller, int mode #endif } /* }}} */ -static int php_cli_server_poller_poll(php_cli_server_poller *poller, const struct timeval *tv) /* {{{ */ +static int php_cli_server_poller_poll(php_cli_server_poller *poller, struct timeval *tv) /* {{{ */ { memmove(&poller->active.rfds, &poller->rfds, sizeof(poller->rfds)); memmove(&poller->active.wfds, &poller->wfds, sizeof(poller->wfds)); - return php_select(poller->max_fd + 1, &poller->active.rfds, &poller->active.wfds, NULL, (struct timeval *)tv); + return php_select(poller->max_fd + 1, &poller->active.rfds, &poller->active.wfds, NULL, tv); } /* }}} */ static int php_cli_server_poller_iter_on_active(php_cli_server_poller *poller, void *opaque, int(*callback)(void *, int fd, int events)) /* {{{ */ @@ -2349,7 +2349,7 @@ static int php_cli_server_do_event_loop(php_cli_server *server TSRMLS_DC) /* {{{ { int retval = SUCCESS; while (server->is_running) { - static const struct timeval tv = { 1, 0 }; + struct timeval tv = { 1, 0 }; int n = php_cli_server_poller_poll(&server->poller, &tv); if (n > 0) { php_cli_server_do_event_for_each_fd(server, From 949cab09f24abb80b8585af744bd964dc17f7401 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Tue, 10 Jun 2014 10:31:17 +0200 Subject: [PATCH 44/77] NEWS --- NEWS | 3 +++ 1 file changed, 3 insertions(+) diff --git a/NEWS b/NEWS index 0c95f64ac03..e65c6dc3f30 100644 --- a/NEWS +++ b/NEWS @@ -10,6 +10,9 @@ PHP NEWS (Remi) (CVE-2014-3981) . Fixed bug #67399 (putenv with empty variable may lead to crash). (Stas) +- CLI server: + . Fixed Bug #67406i (built-in web-server segfaults on startup). (Remi) + - Date: . Fixed bug #67308 (Serialize of DateTime truncates fractions of second). (Adam) From 95fcf868d3b71be3e370ee9f27aa4c120109e7ca Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Tue, 10 Jun 2014 10:32:15 +0200 Subject: [PATCH 45/77] NEWS --- NEWS | 3 +++ 1 file changed, 3 insertions(+) diff --git a/NEWS b/NEWS index 8aa05beaf6b..2ba1852a411 100644 --- a/NEWS +++ b/NEWS @@ -10,6 +10,9 @@ PHP NEWS (Remi) (CVE-2014-3981) . Fixed bug #67399 (putenv with empty variable may lead to crash). (Stas) +- CLI server: + . Fixed Bug #67406i (built-in web-server segfaults on startup). (Remi) + - Date: . Fixed bug #67308 (Serialize of DateTime truncates fractions of second). (Adam) From e77659a8c87272e5061738a31430d2111482c426 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Tue, 10 Jun 2014 14:02:36 +0200 Subject: [PATCH 46/77] Fixed Bug #67410 fileinfo: mconvert incorrect handling of truncated pascal string size Upstream https://github.com/file/file/commit/27a14bc7ba285a0a5ebfdb55e54001aa11932b08 --- ext/fileinfo/libmagic/softmagic.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/ext/fileinfo/libmagic/softmagic.c b/ext/fileinfo/libmagic/softmagic.c index 21fea6b7264..01e49778bf4 100644 --- a/ext/fileinfo/libmagic/softmagic.c +++ b/ext/fileinfo/libmagic/softmagic.c @@ -881,10 +881,18 @@ mconvert(struct magic_set *ms, struct magic *m, int flip) return 1; } case FILE_PSTRING: { - char *ptr1 = p->s, *ptr2 = ptr1 + file_pstring_length_size(m); + size_t sz = file_pstring_length_size(m); + char *ptr1 = p->s, *ptr2 = ptr1 + sz; size_t len = file_pstring_get_length(m, ptr1); - if (len >= sizeof(p->s)) - len = sizeof(p->s) - 1; + if (len >= sizeof(p->s)) { + /* + * The size of the pascal string length (sz) + * is 1, 2, or 4. We need at least 1 byte for NUL + * termination, but we've already truncated the + * string by p->s, so we need to deduct sz. + */ + len = sizeof(p->s) - sz; + } while (len--) *ptr1++ = *ptr2++; *ptr1 = '\0'; From d02aa440909b7a20098ccc9d3820629a36037596 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Tue, 10 Jun 2014 14:04:27 +0200 Subject: [PATCH 47/77] NEWS --- NEWS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NEWS b/NEWS index e65c6dc3f30..1147bf66a0a 100644 --- a/NEWS +++ b/NEWS @@ -22,6 +22,8 @@ PHP NEWS - Fileinfo: . Fixed bug #67326 (fileinfo: cdf_read_short_sector insufficient boundary check). + . Fixed bug #67410 (fileinfo: mconvert incorrect handling of truncated pascal + string size). (Francisco Alonso, Remi) - OpenSSL: . Fixed bug #65698 (certificates validity parsing does not work past 2050). From da399ce6a8ebea05e80de6c176f479ef5a6961c8 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Tue, 10 Jun 2014 14:04:52 +0200 Subject: [PATCH 48/77] NEWS --- NEWS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NEWS b/NEWS index 2ba1852a411..7b983b4cc3f 100644 --- a/NEWS +++ b/NEWS @@ -21,6 +21,8 @@ PHP NEWS - Fileinfo: . Fixed bug #67326 (fileinfo: cdf_read_short_sector insufficient boundary check). + . Fixed bug #67410 (fileinfo: mconvert incorrect handling of truncated pascal + string size). (Francisco Alonso, Remi) - OPCache: . Fixed issue #183 (TMP_VAR is not only used once). (Dmitry, Laruence) From 7f8fa470f175fc46941d980b140f98d880200e4d Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Tue, 10 Jun 2014 14:05:34 +0200 Subject: [PATCH 49/77] NEWS --- NEWS | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/NEWS b/NEWS index 69e5ecee304..ab0e5cf25a4 100644 --- a/NEWS +++ b/NEWS @@ -11,6 +11,10 @@ PHP NEWS (Remi) (CVE-2014-3981) . Fixed bug #67392 (dtrace breaks argument unpack). (Nikita) +- Fileinfo: + . Fixed bug #67410 (fileinfo: mconvert incorrect handling of truncated pascal + string size). (Francisco Alonso, Remi) + - OpenSSL: . Fixed bug #65698 (certificates validity parsing does not work past 2050). (Paul Oehler) From 5c9f96799961818944d43b22c241cc56c215c2e4 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Tue, 10 Jun 2014 14:13:14 +0200 Subject: [PATCH 50/77] Fixed Bug #67411 fileinfo: cdf_check_stream_offset insufficient boundary check Upstream: https://github.com/file/file/commit/36fadd29849b8087af9f4586f89dbf74ea45be67 --- ext/fileinfo/libmagic/cdf.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ext/fileinfo/libmagic/cdf.c b/ext/fileinfo/libmagic/cdf.c index 16649f193fb..c9a5d50a35b 100644 --- a/ext/fileinfo/libmagic/cdf.c +++ b/ext/fileinfo/libmagic/cdf.c @@ -277,13 +277,15 @@ cdf_check_stream_offset(const cdf_stream_t *sst, const cdf_header_t *h, { const char *b = (const char *)sst->sst_tab; const char *e = ((const char *)p) + tail; + size_t ss = sst->sst_dirlen < h->h_min_size_standard_stream ? + CDF_SHORT_SEC_SIZE(h) : CDF_SEC_SIZE(h); (void)&line; - if (e >= b && (size_t)(e - b) <= CDF_SEC_SIZE(h) * sst->sst_len) + if (e >= b && (size_t)(e - b) <= ss * sst->sst_len) return 0; DPRINTF(("%d: offset begin %p < end %p || %" SIZE_T_FORMAT "u" " > %" SIZE_T_FORMAT "u [%" SIZE_T_FORMAT "u %" SIZE_T_FORMAT "u]\n", line, b, e, (size_t)(e - b), - CDF_SEC_SIZE(h) * sst->sst_len, CDF_SEC_SIZE(h), sst->sst_len)); + ss * sst->sst_len, ss, sst->sst_len)); errno = EFTYPE; return -1; } From 2b33a41162a729b3b680fa2015efe11f15cc3114 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Tue, 10 Jun 2014 14:16:00 +0200 Subject: [PATCH 51/77] NEWS --- NEWS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NEWS b/NEWS index 1147bf66a0a..325709912d4 100644 --- a/NEWS +++ b/NEWS @@ -24,6 +24,8 @@ PHP NEWS check). . Fixed bug #67410 (fileinfo: mconvert incorrect handling of truncated pascal string size). (Francisco Alonso, Remi) + . Fixed bug #67411 (fileinfo: cdf_check_stream_offset insufficient boundary + check). (Francisco Alonso, Remi) - OpenSSL: . Fixed bug #65698 (certificates validity parsing does not work past 2050). From 9d0ca077eea762e9d89523ec33c903525b39e16d Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Tue, 10 Jun 2014 14:16:32 +0200 Subject: [PATCH 52/77] NEWS --- NEWS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NEWS b/NEWS index 7b983b4cc3f..02f858ee71c 100644 --- a/NEWS +++ b/NEWS @@ -23,6 +23,8 @@ PHP NEWS . Fixed bug #67326 (fileinfo: cdf_read_short_sector insufficient boundary check). . Fixed bug #67410 (fileinfo: mconvert incorrect handling of truncated pascal string size). (Francisco Alonso, Remi) + . Fixed bug #67411 (fileinfo: cdf_check_stream_offset insufficient boundary + check). (Francisco Alonso, Remi) - OPCache: . Fixed issue #183 (TMP_VAR is not only used once). (Dmitry, Laruence) From b999947dcd698852eca474b5306ce18cea63226d Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Tue, 10 Jun 2014 14:16:58 +0200 Subject: [PATCH 53/77] NEWS --- NEWS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NEWS b/NEWS index ab0e5cf25a4..addf7f5ada5 100644 --- a/NEWS +++ b/NEWS @@ -14,6 +14,8 @@ PHP NEWS - Fileinfo: . Fixed bug #67410 (fileinfo: mconvert incorrect handling of truncated pascal string size). (Francisco Alonso, Remi) + . Fixed bug #67411 (fileinfo: cdf_check_stream_offset insufficient boundary + check). (Francisco Alonso, Remi) - OpenSSL: . Fixed bug #65698 (certificates validity parsing does not work past 2050). From 40ef6e07e0b2cdced57c506e08cf18f47122292d Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Tue, 10 Jun 2014 14:22:04 +0200 Subject: [PATCH 54/77] Bug #67412 fileinfo: cdf_count_chain insufficient boundary check Upstream: https://github.com/file/file/commit/40bade80cbe2af1d0b2cd0420cebd5d5905a2382 --- ext/fileinfo/libmagic/cdf.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/ext/fileinfo/libmagic/cdf.c b/ext/fileinfo/libmagic/cdf.c index c9a5d50a35b..ee467a6671e 100644 --- a/ext/fileinfo/libmagic/cdf.c +++ b/ext/fileinfo/libmagic/cdf.c @@ -470,7 +470,8 @@ size_t cdf_count_chain(const cdf_sat_t *sat, cdf_secid_t sid, size_t size) { size_t i, j; - cdf_secid_t maxsector = (cdf_secid_t)(sat->sat_len * size); + cdf_secid_t maxsector = (cdf_secid_t)((sat->sat_len * size) + / sizeof(maxsector)); DPRINTF(("Chain:")); for (j = i = 0; sid >= 0; i++, j++) { @@ -480,8 +481,8 @@ cdf_count_chain(const cdf_sat_t *sat, cdf_secid_t sid, size_t size) errno = EFTYPE; return (size_t)-1; } - if (sid > maxsector) { - DPRINTF(("Sector %d > %d\n", sid, maxsector)); + if (sid >= maxsector) { + DPRINTF(("Sector %d >= %d\n", sid, maxsector)); errno = EFTYPE; return (size_t)-1; } From da5d40bae6505364c3604385a2b6ae4e27a4a5d6 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Tue, 10 Jun 2014 14:23:31 +0200 Subject: [PATCH 55/77] NEWS --- NEWS | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index 325709912d4..f429d680ed3 100644 --- a/NEWS +++ b/NEWS @@ -23,9 +23,11 @@ PHP NEWS . Fixed bug #67326 (fileinfo: cdf_read_short_sector insufficient boundary check). . Fixed bug #67410 (fileinfo: mconvert incorrect handling of truncated pascal - string size). (Francisco Alonso, Remi) + string size). (Francisco Alonso, Jan Kaluza, Remi) . Fixed bug #67411 (fileinfo: cdf_check_stream_offset insufficient boundary - check). (Francisco Alonso, Remi) + check). (Francisco Alonso, Jan Kaluza, Remi) + . Fixed bug #67412 (fileinfo: cdf_count_chain insufficient boundary check). + ((Francisco Alonso, Jan Kaluza, Remi) - OpenSSL: . Fixed bug #65698 (certificates validity parsing does not work past 2050). From 20b03c84ec0d66a017a06f3c1fcbf8ffdf62c1a7 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Tue, 10 Jun 2014 14:24:00 +0200 Subject: [PATCH 56/77] NEWS --- NEWS | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index 02f858ee71c..52eec6b657c 100644 --- a/NEWS +++ b/NEWS @@ -22,9 +22,11 @@ PHP NEWS - Fileinfo: . Fixed bug #67326 (fileinfo: cdf_read_short_sector insufficient boundary check). . Fixed bug #67410 (fileinfo: mconvert incorrect handling of truncated pascal - string size). (Francisco Alonso, Remi) + string size). (Francisco Alonso, Jan Kaluza, Remi) . Fixed bug #67411 (fileinfo: cdf_check_stream_offset insufficient boundary - check). (Francisco Alonso, Remi) + check). (Francisco Alonso, Jan Kaluza, Remi) + . Fixed bug #67412 (fileinfo: cdf_count_chain insufficient boundary check). + ((Francisco Alonso, Jan Kaluza, Remi) - OPCache: . Fixed issue #183 (TMP_VAR is not only used once). (Dmitry, Laruence) From fde5790fd61b5788139df9f052f109139d7d6416 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Tue, 10 Jun 2014 14:24:22 +0200 Subject: [PATCH 57/77] NEWS --- NEWS | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index addf7f5ada5..6c082f2fbfa 100644 --- a/NEWS +++ b/NEWS @@ -13,9 +13,11 @@ PHP NEWS - Fileinfo: . Fixed bug #67410 (fileinfo: mconvert incorrect handling of truncated pascal - string size). (Francisco Alonso, Remi) + string size). (Francisco Alonso, Jan Kaluza, Remi) . Fixed bug #67411 (fileinfo: cdf_check_stream_offset insufficient boundary - check). (Francisco Alonso, Remi) + check). (Francisco Alonso, Jan Kaluza, Remi) + . Fixed bug #67412 (fileinfo: cdf_count_chain insufficient boundary check). + ((Francisco Alonso, Jan Kaluza, Remi) - OpenSSL: . Fixed bug #65698 (certificates validity parsing does not work past 2050). From 25b1dc917a53787dbb2532721ca22f3f36eb13c0 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Tue, 10 Jun 2014 14:33:37 +0200 Subject: [PATCH 58/77] Fixed Bug #67413 fileinfo: cdf_read_property_info insufficient boundary chec Upstream: https://github.com/file/file/commit/93e063ee374b6a75729df9e7201fb511e47e259d Adapted for C standard. --- ext/fileinfo/libmagic/cdf.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ext/fileinfo/libmagic/cdf.c b/ext/fileinfo/libmagic/cdf.c index ee467a6671e..429f3b952f6 100644 --- a/ext/fileinfo/libmagic/cdf.c +++ b/ext/fileinfo/libmagic/cdf.c @@ -812,7 +812,11 @@ cdf_read_property_info(const cdf_stream_t *sst, const cdf_header_t *h, if (cdf_check_stream_offset(sst, h, e, 0, __LINE__) == -1) goto out; for (i = 0; i < sh.sh_properties; i++) { - size_t ofs = CDF_GETUINT32(p, (i << 1) + 1); + size_t ofs, tail = (i << 1) + 1; + if (cdf_check_stream_offset(sst, h, p, tail * sizeof(uint32_t), + __LINE__) == -1) + goto out; + ofs = CDF_GETUINT32(p, tail); q = (const uint8_t *)(const void *) ((const char *)(const void *)p + ofs - 2 * sizeof(uint32_t)); From 6256b79a3531bd9f0f57c09526a5fd033e418c60 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Tue, 10 Jun 2014 14:35:14 +0200 Subject: [PATCH 59/77] NEWS --- NEWS | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index f429d680ed3..e8465491038 100644 --- a/NEWS +++ b/NEWS @@ -27,7 +27,9 @@ PHP NEWS . Fixed bug #67411 (fileinfo: cdf_check_stream_offset insufficient boundary check). (Francisco Alonso, Jan Kaluza, Remi) . Fixed bug #67412 (fileinfo: cdf_count_chain insufficient boundary check). - ((Francisco Alonso, Jan Kaluza, Remi) + (Francisco Alonso, Jan Kaluza, Remi) + . Fixed bug #67413 (fileinfo: cdf_read_property_info insufficient boundary + check). (Francisco Alonso, Jan Kaluza, Remi) - OpenSSL: . Fixed bug #65698 (certificates validity parsing does not work past 2050). From a4d709afe2b5345c54c04b095ad8c3fa8afe8b27 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Tue, 10 Jun 2014 14:35:57 +0200 Subject: [PATCH 60/77] NEWS --- NEWS | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 52eec6b657c..a2e33c343a4 100644 --- a/NEWS +++ b/NEWS @@ -26,7 +26,10 @@ PHP NEWS . Fixed bug #67411 (fileinfo: cdf_check_stream_offset insufficient boundary check). (Francisco Alonso, Jan Kaluza, Remi) . Fixed bug #67412 (fileinfo: cdf_count_chain insufficient boundary check). - ((Francisco Alonso, Jan Kaluza, Remi) + (Francisco Alonso, Jan Kaluza, Remi) + . Fixed bug #67413 (fileinfo: cdf_read_property_info insufficient boundary + check). (Francisco Alonso, Jan Kaluza, Remi) + - OPCache: . Fixed issue #183 (TMP_VAR is not only used once). (Dmitry, Laruence) From e72ab7919678d4f0913204f25fc93166ddb69cf4 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Tue, 10 Jun 2014 14:36:31 +0200 Subject: [PATCH 61/77] NEWS --- NEWS | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 6c082f2fbfa..47122c511b7 100644 --- a/NEWS +++ b/NEWS @@ -17,7 +17,9 @@ PHP NEWS . Fixed bug #67411 (fileinfo: cdf_check_stream_offset insufficient boundary check). (Francisco Alonso, Jan Kaluza, Remi) . Fixed bug #67412 (fileinfo: cdf_count_chain insufficient boundary check). - ((Francisco Alonso, Jan Kaluza, Remi) + (Francisco Alonso, Jan Kaluza, Remi) + . Fixed bug #67413 (fileinfo: cdf_read_property_info insufficient boundary + check). (Francisco Alonso, Jan Kaluza, Remi) - OpenSSL: . Fixed bug #65698 (certificates validity parsing does not work past 2050). From e8699d75da9d3b0cc16b9454f12928defb6e72fc Mon Sep 17 00:00:00 2001 From: Xinchen Hui Date: Tue, 10 Jun 2014 21:56:30 +0800 Subject: [PATCH 62/77] Remove unused included file --- Zend/zend_execute_API.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index 45ad5c38bfc..e100484f6f4 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -448,8 +448,6 @@ ZEND_API int zend_is_true(zval *op) /* {{{ */ } /* }}} */ -#include "../TSRM/tsrm_strtok_r.h" - #define IS_VISITED_CONSTANT IS_CONSTANT_INDEX #define IS_CONSTANT_VISITED(p) (Z_TYPE_P(p) & IS_VISITED_CONSTANT) #define Z_REAL_TYPE_P(p) (Z_TYPE_P(p) & ~IS_VISITED_CONSTANT) From ac6c86b7dcfcbcb21b45da32ecffcaf28f50fa39 Mon Sep 17 00:00:00 2001 From: Stanislav Malyshev Date: Tue, 10 Jun 2014 14:25:49 -0700 Subject: [PATCH 63/77] fix test --- ext/date/tests/bug67118.phpt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/date/tests/bug67118.phpt b/ext/date/tests/bug67118.phpt index 2aa8c1d8285..19b5914aa3b 100644 --- a/ext/date/tests/bug67118.phpt +++ b/ext/date/tests/bug67118.phpt @@ -23,4 +23,4 @@ class mydt extends datetime new mydt("Funktionsansvarig rådgivning och juridik", "UTC"); ?> --EXPECTF-- -Fatal error: Call to a member function format() on a non-object in %sbug67118.php on line %d +Fatal error: Call to a member function format() on null in %sbug67118.php on line %d From faa34f24e360a1a23e882ce22b53bb30ae5cfeab Mon Sep 17 00:00:00 2001 From: Adam Harvey Date: Tue, 10 Jun 2014 23:56:53 +0000 Subject: [PATCH 64/77] Replace the CLI server's linear search for extensions with a hash table. This doesn't make a statistically significant performance impact either way today, but gives us more scope to grow the MIME type list. --- sapi/cli/php_cli_server.c | 42 +++++++++++++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/sapi/cli/php_cli_server.c b/sapi/cli/php_cli_server.c index 20416244d23..79a77743e14 100644 --- a/sapi/cli/php_cli_server.c +++ b/sapi/cli/php_cli_server.c @@ -194,6 +194,7 @@ typedef struct php_cli_server { size_t router_len; socklen_t socklen; HashTable clients; + HashTable extension_mime_types; } php_cli_server; typedef struct php_cli_server_http_response_status_code_pair { @@ -463,15 +464,14 @@ static void append_essential_headers(smart_str* buffer, php_cli_server_client *c smart_str_appendl_ex(buffer, "Connection: close\r\n", sizeof("Connection: close\r\n") - 1, persistent); } /* }}} */ -static const char *get_mime_type(const char *ext, size_t ext_len) /* {{{ */ +static const char *get_mime_type(const php_cli_server *server, const char *ext, size_t ext_len) /* {{{ */ { - php_cli_server_ext_mime_type_pair *pair; - for (pair = mime_type_map; pair->ext; pair++) { - size_t len = strlen(pair->ext); - if (len == ext_len && memcmp(pair->ext, ext, len) == 0) { - return pair->mime_type; - } + char *mime_type = NULL; + + if (zend_hash_find(&server->extension_mime_types, ext, ext_len + 1, (void **) &mime_type) == SUCCESS) { + return mime_type; } + return NULL; } /* }}} */ @@ -2042,7 +2042,7 @@ static int php_cli_server_begin_send_static(php_cli_server *server, php_cli_serv { php_cli_server_chunk *chunk; smart_str buffer = { 0 }; - const char *mime_type = get_mime_type(client->request.ext, client->request.ext_len); + const char *mime_type = get_mime_type(server, client->request.ext, client->request.ext_len); if (!mime_type) { mime_type = "application/octet-stream"; } @@ -2202,9 +2202,30 @@ static int php_cli_server_dispatch(php_cli_server *server, php_cli_server_client } /* }}} */ +static int php_cli_server_mime_type_ctor(php_cli_server *server, const php_cli_server_ext_mime_type_pair *mime_type_map) /* {{{ */ +{ + const php_cli_server_ext_mime_type_pair *pair; + + if (zend_hash_init(&server->extension_mime_types, 0, NULL, NULL, 1) != SUCCESS) { + return FAILURE; + } + + for (pair = mime_type_map; pair->ext; pair++) { + size_t ext_len = 0, mime_type_len = 0; + + ext_len = strlen(pair->ext); + mime_type_len = strlen(pair->mime_type); + + zend_hash_add(&server->extension_mime_types, pair->ext, ext_len + 1, (void *) pair->mime_type, mime_type_len + 1, NULL); + } + + return SUCCESS; +} /* }}} */ + static void php_cli_server_dtor(php_cli_server *server TSRMLS_DC) /* {{{ */ { zend_hash_destroy(&server->clients); + zend_hash_destroy(&server->extension_mime_types); if (server->server_sock >= 0) { closesocket(server->server_sock); } @@ -2322,6 +2343,11 @@ static int php_cli_server_ctor(php_cli_server *server, const char *addr, const c server->router_len = 0; } + if (php_cli_server_mime_type_ctor(server, mime_type_map) == FAILURE) { + retval = FAILURE; + goto out; + } + server->is_running = 1; out: if (retval != SUCCESS) { From 8c59ae345eebc3f05c72485c3a64cef1fe712ef6 Mon Sep 17 00:00:00 2001 From: Adam Harvey Date: Wed, 11 Jun 2014 00:18:33 +0000 Subject: [PATCH 65/77] Move the mime type map out of php_cli_server.c for easier generation. --- sapi/cli/mime_type_map.h | 97 +++++++++++++++++++++++++++++++++++++++ sapi/cli/php_cli_server.c | 64 +------------------------- 2 files changed, 98 insertions(+), 63 deletions(-) create mode 100644 sapi/cli/mime_type_map.h diff --git a/sapi/cli/mime_type_map.h b/sapi/cli/mime_type_map.h new file mode 100644 index 00000000000..0a0d01a5642 --- /dev/null +++ b/sapi/cli/mime_type_map.h @@ -0,0 +1,97 @@ +/* + +----------------------------------------------------------------------+ + | PHP Version 5 | + +----------------------------------------------------------------------+ + | Copyright (c) 1997-2014 The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.php.net/license/3_01.txt | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Author: Moriyoshi Koizumi | + +----------------------------------------------------------------------+ +*/ + +/* This is a generated file. Rather than modifying it, please run + * "php generate_mime_type_map.php > mime_type_map.h" to regenerate the file. */ + +#ifndef PHP_CLI_SERVER_MIME_TYPE_MAP_H +#define PHP_CLI_SERVER_MIME_TYPE_MAP_H + +typedef struct php_cli_server_ext_mime_type_pair { + const char *ext; + const char *mime_type; +} php_cli_server_ext_mime_type_pair; + +static php_cli_server_ext_mime_type_pair mime_type_map[] = { + { "html", "text/html" }, + { "htm", "text/html" }, + { "js", "text/javascript" }, + { "css", "text/css" }, + { "gif", "image/gif" }, + { "jpg", "image/jpeg" }, + { "jpeg", "image/jpeg" }, + { "jpe", "image/jpeg" }, + { "pdf", "application/pdf" }, + { "png", "image/png" }, + { "svg", "image/svg+xml" }, + { "txt", "text/plain" }, + { "webm", "video/webm" }, + { "ogv", "video/ogg" }, + { "ogg", "audio/ogg" }, + { "3gp", "video/3gpp" }, /* This is standard video format used for MMS in phones */ + { "apk", "application/vnd.android.package-archive" }, + { "avi", "video/x-msvideo" }, + { "bmp", "image/x-ms-bmp" }, + { "csv", "text/comma-separated-values" }, + { "doc", "application/msword" }, + { "docx", "application/msword" }, + { "flac", "audio/flac" }, + { "gz", "application/x-gzip" }, + { "gzip", "application/x-gzip" }, + { "ics", "text/calendar" }, + { "kml", "application/vnd.google-earth.kml+xml" }, + { "kmz", "application/vnd.google-earth.kmz" }, + { "m4a", "audio/mp4" }, + { "mp3", "audio/mpeg" }, + { "mp4", "video/mp4" }, + { "mpg", "video/mpeg" }, + { "mpeg", "video/mpeg" }, + { "mov", "video/quicktime" }, + { "odp", "application/vnd.oasis.opendocument.presentation" }, + { "ods", "application/vnd.oasis.opendocument.spreadsheet" }, + { "odt", "application/vnd.oasis.opendocument.text" }, + { "oga", "audio/ogg" }, + { "pdf", "application/pdf" }, + { "pptx", "application/vnd.ms-powerpoint" }, + { "pps", "application/vnd.ms-powerpoint" }, + { "qt", "video/quicktime" }, + { "swf", "application/x-shockwave-flash" }, + { "tar", "application/x-tar" }, + { "text", "text/plain" }, + { "tif", "image/tiff" }, + { "wav", "audio/wav" }, + { "wmv", "video/x-ms-wmv" }, + { "xls", "application/vnd.ms-excel" }, + { "xlsx", "application/vnd.ms-excel" }, + { "zip", "application/x-zip-compressed" }, + { "xml", "application/xml" }, + { "xsl", "application/xml" }, + { "xsd", "application/xml" }, + { NULL, NULL } +}; + +#endif /* PHP_CLI_SERVER_MIME_TYPE_MAP_H */ + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + * vim600: noet sw=4 ts=4 fdm=marker + * vim<600: noet sw=4 ts=4 + */ diff --git a/sapi/cli/php_cli_server.c b/sapi/cli/php_cli_server.c index 79a77743e14..0caa45c16c0 100644 --- a/sapi/cli/php_cli_server.c +++ b/sapi/cli/php_cli_server.c @@ -104,6 +104,7 @@ #include "php_http_parser.h" #include "php_cli_server.h" +#include "mime_type_map.h" #include "php_cli_process_title.h" @@ -202,11 +203,6 @@ typedef struct php_cli_server_http_response_status_code_pair { const char *str; } php_cli_server_http_response_status_code_pair; -typedef struct php_cli_server_ext_mime_type_pair { - const char *ext; - const char *mime_type; -} php_cli_server_ext_mime_type_pair; - static php_cli_server_http_response_status_code_pair status_map[] = { { 100, "Continue" }, { 101, "Switching Protocols" }, @@ -261,64 +257,6 @@ static php_cli_server_http_response_status_code_pair template_map[] = { { 501, "

%s

Request method not supported.

" } }; -static php_cli_server_ext_mime_type_pair mime_type_map[] = { - { "html", "text/html" }, - { "htm", "text/html" }, - { "js", "text/javascript" }, - { "css", "text/css" }, - { "gif", "image/gif" }, - { "jpg", "image/jpeg" }, - { "jpeg", "image/jpeg" }, - { "jpe", "image/jpeg" }, - { "pdf", "application/pdf" }, - { "png", "image/png" }, - { "svg", "image/svg+xml" }, - { "txt", "text/plain" }, - { "webm", "video/webm" }, - { "ogv", "video/ogg" }, - { "ogg", "audio/ogg" }, - { "3gp", "video/3gpp" }, /* This is standard video format used for MMS in phones */ - { "apk", "application/vnd.android.package-archive" }, - { "avi", "video/x-msvideo" }, - { "bmp", "image/x-ms-bmp" }, - { "csv", "text/comma-separated-values" }, - { "doc", "application/msword" }, - { "docx", "application/msword" }, - { "flac", "audio/flac" }, - { "gz", "application/x-gzip" }, - { "gzip", "application/x-gzip" }, - { "ics", "text/calendar" }, - { "kml", "application/vnd.google-earth.kml+xml" }, - { "kmz", "application/vnd.google-earth.kmz" }, - { "m4a", "audio/mp4" }, - { "mp3", "audio/mpeg" }, - { "mp4", "video/mp4" }, - { "mpg", "video/mpeg" }, - { "mpeg", "video/mpeg" }, - { "mov", "video/quicktime" }, - { "odp", "application/vnd.oasis.opendocument.presentation" }, - { "ods", "application/vnd.oasis.opendocument.spreadsheet" }, - { "odt", "application/vnd.oasis.opendocument.text" }, - { "oga", "audio/ogg" }, - { "pdf", "application/pdf" }, - { "pptx", "application/vnd.ms-powerpoint" }, - { "pps", "application/vnd.ms-powerpoint" }, - { "qt", "video/quicktime" }, - { "swf", "application/x-shockwave-flash" }, - { "tar", "application/x-tar" }, - { "text", "text/plain" }, - { "tif", "image/tiff" }, - { "wav", "audio/wav" }, - { "wmv", "video/x-ms-wmv" }, - { "xls", "application/vnd.ms-excel" }, - { "xlsx", "application/vnd.ms-excel" }, - { "zip", "application/x-zip-compressed" }, - { "xml", "application/xml" }, - { "xsl", "application/xml" }, - { "xsd", "application/xml" }, - { NULL, NULL } -}; - static int php_cli_output_is_tty = OUTPUT_NOT_CHECKED; static size_t php_cli_server_client_send_through(php_cli_server_client *client, const char *str, size_t str_len); From c12f832479a1722f103a7fd282f77f389702b5bf Mon Sep 17 00:00:00 2001 From: Adam Harvey Date: Wed, 11 Jun 2014 00:19:49 +0000 Subject: [PATCH 66/77] Add a mime type map generation script and update the header. --- sapi/cli/generate_mime_type_map.php | 76 ++ sapi/cli/mime_type_map.h | 1023 +++++++++++++++++++++++++-- 2 files changed, 1051 insertions(+), 48 deletions(-) create mode 100644 sapi/cli/generate_mime_type_map.php diff --git a/sapi/cli/generate_mime_type_map.php b/sapi/cli/generate_mime_type_map.php new file mode 100644 index 00000000000..44750049852 --- /dev/null +++ b/sapi/cli/generate_mime_type_map.php @@ -0,0 +1,76 @@ +#!/usr/bin/env php + 1 ? $_SERVER['argv'][1] : 'https://raw.githubusercontent.com/apache/httpd/trunk/docs/conf/mime.types'; + +// See if we can actually load it. +$types = @file($source); +if ($types === false) { + fprintf(STDERR, "Error: unable to read $source\n"); + exit(1); +} + +// Remove comments and flip into an extensions array. +$extensions = []; +array_walk($types, function ($line) use (&$extensions) { + $line = trim($line); + if ($line && $line[0] != '#') { + $fields = preg_split('/\s+/', $line); + if (count($fields) > 1) { + $mime = array_shift($fields); + foreach ($fields as $extension) { + $extensions[$extension] = $mime; + } + } + } +}); + +?> +/* + +----------------------------------------------------------------------+ + | PHP Version 5 | + +----------------------------------------------------------------------+ + | Copyright (c) 1997-2014 The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.php.net/license/3_01.txt | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Author: Moriyoshi Koizumi | + +----------------------------------------------------------------------+ +*/ + +/* This is a generated file. Rather than modifying it, please run + * "php generate_mime_type_map.php > mime_type_map.h" to regenerate the file. */ + +#ifndef PHP_CLI_SERVER_MIME_TYPE_MAP_H +#define PHP_CLI_SERVER_MIME_TYPE_MAP_H + +typedef struct php_cli_server_ext_mime_type_pair { + const char *ext; + const char *mime_type; +} php_cli_server_ext_mime_type_pair; + +static php_cli_server_ext_mime_type_pair mime_type_map[] = { + $mime): ?> + { "", "" }, + + { NULL, NULL } +}; + +#endif /* PHP_CLI_SERVER_MIME_TYPE_MAP_H */ + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + * vim600: noet sw=4 ts=4 fdm=marker + * vim<600: noet sw=4 ts=4 + */ diff --git a/sapi/cli/mime_type_map.h b/sapi/cli/mime_type_map.h index 0a0d01a5642..72c05d4149c 100644 --- a/sapi/cli/mime_type_map.h +++ b/sapi/cli/mime_type_map.h @@ -28,60 +28,987 @@ typedef struct php_cli_server_ext_mime_type_pair { } php_cli_server_ext_mime_type_pair; static php_cli_server_ext_mime_type_pair mime_type_map[] = { - { "html", "text/html" }, - { "htm", "text/html" }, - { "js", "text/javascript" }, - { "css", "text/css" }, - { "gif", "image/gif" }, - { "jpg", "image/jpeg" }, - { "jpeg", "image/jpeg" }, - { "jpe", "image/jpeg" }, - { "pdf", "application/pdf" }, - { "png", "image/png" }, - { "svg", "image/svg+xml" }, - { "txt", "text/plain" }, - { "webm", "video/webm" }, - { "ogv", "video/ogg" }, - { "ogg", "audio/ogg" }, - { "3gp", "video/3gpp" }, /* This is standard video format used for MMS in phones */ - { "apk", "application/vnd.android.package-archive" }, - { "avi", "video/x-msvideo" }, - { "bmp", "image/x-ms-bmp" }, - { "csv", "text/comma-separated-values" }, + { "ez", "application/andrew-inset" }, + { "aw", "application/applixware" }, + { "atom", "application/atom+xml" }, + { "atomcat", "application/atomcat+xml" }, + { "atomsvc", "application/atomsvc+xml" }, + { "ccxml", "application/ccxml+xml" }, + { "cdmia", "application/cdmi-capability" }, + { "cdmic", "application/cdmi-container" }, + { "cdmid", "application/cdmi-domain" }, + { "cdmio", "application/cdmi-object" }, + { "cdmiq", "application/cdmi-queue" }, + { "cu", "application/cu-seeme" }, + { "davmount", "application/davmount+xml" }, + { "dbk", "application/docbook+xml" }, + { "dssc", "application/dssc+der" }, + { "xdssc", "application/dssc+xml" }, + { "ecma", "application/ecmascript" }, + { "emma", "application/emma+xml" }, + { "epub", "application/epub+zip" }, + { "exi", "application/exi" }, + { "pfr", "application/font-tdpfr" }, + { "gml", "application/gml+xml" }, + { "gpx", "application/gpx+xml" }, + { "gxf", "application/gxf" }, + { "stk", "application/hyperstudio" }, + { "ink", "application/inkml+xml" }, + { "inkml", "application/inkml+xml" }, + { "ipfix", "application/ipfix" }, + { "jar", "application/java-archive" }, + { "ser", "application/java-serialized-object" }, + { "class", "application/java-vm" }, + { "js", "application/javascript" }, + { "json", "application/json" }, + { "jsonml", "application/jsonml+json" }, + { "lostxml", "application/lost+xml" }, + { "hqx", "application/mac-binhex40" }, + { "cpt", "application/mac-compactpro" }, + { "mads", "application/mads+xml" }, + { "mrc", "application/marc" }, + { "mrcx", "application/marcxml+xml" }, + { "ma", "application/mathematica" }, + { "nb", "application/mathematica" }, + { "mb", "application/mathematica" }, + { "mathml", "application/mathml+xml" }, + { "mbox", "application/mbox" }, + { "mscml", "application/mediaservercontrol+xml" }, + { "metalink", "application/metalink+xml" }, + { "meta4", "application/metalink4+xml" }, + { "mets", "application/mets+xml" }, + { "mods", "application/mods+xml" }, + { "m21", "application/mp21" }, + { "mp21", "application/mp21" }, + { "mp4s", "application/mp4" }, { "doc", "application/msword" }, - { "docx", "application/msword" }, - { "flac", "audio/flac" }, - { "gz", "application/x-gzip" }, - { "gzip", "application/x-gzip" }, - { "ics", "text/calendar" }, + { "dot", "application/msword" }, + { "mxf", "application/mxf" }, + { "bin", "application/octet-stream" }, + { "dms", "application/octet-stream" }, + { "lrf", "application/octet-stream" }, + { "mar", "application/octet-stream" }, + { "so", "application/octet-stream" }, + { "dist", "application/octet-stream" }, + { "distz", "application/octet-stream" }, + { "pkg", "application/octet-stream" }, + { "bpk", "application/octet-stream" }, + { "dump", "application/octet-stream" }, + { "elc", "application/octet-stream" }, + { "deploy", "application/octet-stream" }, + { "oda", "application/oda" }, + { "opf", "application/oebps-package+xml" }, + { "ogx", "application/ogg" }, + { "omdoc", "application/omdoc+xml" }, + { "onetoc", "application/onenote" }, + { "onetoc2", "application/onenote" }, + { "onetmp", "application/onenote" }, + { "onepkg", "application/onenote" }, + { "oxps", "application/oxps" }, + { "xer", "application/patch-ops-error+xml" }, + { "pdf", "application/pdf" }, + { "pgp", "application/pgp-encrypted" }, + { "asc", "application/pgp-signature" }, + { "sig", "application/pgp-signature" }, + { "prf", "application/pics-rules" }, + { "p10", "application/pkcs10" }, + { "p7m", "application/pkcs7-mime" }, + { "p7c", "application/pkcs7-mime" }, + { "p7s", "application/pkcs7-signature" }, + { "p8", "application/pkcs8" }, + { "ac", "application/pkix-attr-cert" }, + { "cer", "application/pkix-cert" }, + { "crl", "application/pkix-crl" }, + { "pkipath", "application/pkix-pkipath" }, + { "pki", "application/pkixcmp" }, + { "pls", "application/pls+xml" }, + { "ai", "application/postscript" }, + { "eps", "application/postscript" }, + { "ps", "application/postscript" }, + { "cww", "application/prs.cww" }, + { "pskcxml", "application/pskc+xml" }, + { "rdf", "application/rdf+xml" }, + { "rif", "application/reginfo+xml" }, + { "rnc", "application/relax-ng-compact-syntax" }, + { "rl", "application/resource-lists+xml" }, + { "rld", "application/resource-lists-diff+xml" }, + { "rs", "application/rls-services+xml" }, + { "gbr", "application/rpki-ghostbusters" }, + { "mft", "application/rpki-manifest" }, + { "roa", "application/rpki-roa" }, + { "rsd", "application/rsd+xml" }, + { "rss", "application/rss+xml" }, + { "rtf", "application/rtf" }, + { "sbml", "application/sbml+xml" }, + { "scq", "application/scvp-cv-request" }, + { "scs", "application/scvp-cv-response" }, + { "spq", "application/scvp-vp-request" }, + { "spp", "application/scvp-vp-response" }, + { "sdp", "application/sdp" }, + { "setpay", "application/set-payment-initiation" }, + { "setreg", "application/set-registration-initiation" }, + { "shf", "application/shf+xml" }, + { "smi", "application/smil+xml" }, + { "smil", "application/smil+xml" }, + { "rq", "application/sparql-query" }, + { "srx", "application/sparql-results+xml" }, + { "gram", "application/srgs" }, + { "grxml", "application/srgs+xml" }, + { "sru", "application/sru+xml" }, + { "ssdl", "application/ssdl+xml" }, + { "ssml", "application/ssml+xml" }, + { "tei", "application/tei+xml" }, + { "teicorpus", "application/tei+xml" }, + { "tfi", "application/thraud+xml" }, + { "tsd", "application/timestamped-data" }, + { "plb", "application/vnd.3gpp.pic-bw-large" }, + { "psb", "application/vnd.3gpp.pic-bw-small" }, + { "pvb", "application/vnd.3gpp.pic-bw-var" }, + { "tcap", "application/vnd.3gpp2.tcap" }, + { "pwn", "application/vnd.3m.post-it-notes" }, + { "aso", "application/vnd.accpac.simply.aso" }, + { "imp", "application/vnd.accpac.simply.imp" }, + { "acu", "application/vnd.acucobol" }, + { "atc", "application/vnd.acucorp" }, + { "acutc", "application/vnd.acucorp" }, + { "air", "application/vnd.adobe.air-application-installer-package+zip" }, + { "fcdt", "application/vnd.adobe.formscentral.fcdt" }, + { "fxp", "application/vnd.adobe.fxp" }, + { "fxpl", "application/vnd.adobe.fxp" }, + { "xdp", "application/vnd.adobe.xdp+xml" }, + { "xfdf", "application/vnd.adobe.xfdf" }, + { "ahead", "application/vnd.ahead.space" }, + { "azf", "application/vnd.airzip.filesecure.azf" }, + { "azs", "application/vnd.airzip.filesecure.azs" }, + { "azw", "application/vnd.amazon.ebook" }, + { "acc", "application/vnd.americandynamics.acc" }, + { "ami", "application/vnd.amiga.ami" }, + { "apk", "application/vnd.android.package-archive" }, + { "cii", "application/vnd.anser-web-certificate-issue-initiation" }, + { "fti", "application/vnd.anser-web-funds-transfer-initiation" }, + { "atx", "application/vnd.antix.game-component" }, + { "mpkg", "application/vnd.apple.installer+xml" }, + { "m3u8", "application/vnd.apple.mpegurl" }, + { "swi", "application/vnd.aristanetworks.swi" }, + { "iota", "application/vnd.astraea-software.iota" }, + { "aep", "application/vnd.audiograph" }, + { "mpm", "application/vnd.blueice.multipass" }, + { "bmi", "application/vnd.bmi" }, + { "rep", "application/vnd.businessobjects" }, + { "cdxml", "application/vnd.chemdraw+xml" }, + { "mmd", "application/vnd.chipnuts.karaoke-mmd" }, + { "cdy", "application/vnd.cinderella" }, + { "cla", "application/vnd.claymore" }, + { "rp9", "application/vnd.cloanto.rp9" }, + { "c4g", "application/vnd.clonk.c4group" }, + { "c4d", "application/vnd.clonk.c4group" }, + { "c4f", "application/vnd.clonk.c4group" }, + { "c4p", "application/vnd.clonk.c4group" }, + { "c4u", "application/vnd.clonk.c4group" }, + { "c11amc", "application/vnd.cluetrust.cartomobile-config" }, + { "c11amz", "application/vnd.cluetrust.cartomobile-config-pkg" }, + { "csp", "application/vnd.commonspace" }, + { "cdbcmsg", "application/vnd.contact.cmsg" }, + { "cmc", "application/vnd.cosmocaller" }, + { "clkx", "application/vnd.crick.clicker" }, + { "clkk", "application/vnd.crick.clicker.keyboard" }, + { "clkp", "application/vnd.crick.clicker.palette" }, + { "clkt", "application/vnd.crick.clicker.template" }, + { "clkw", "application/vnd.crick.clicker.wordbank" }, + { "wbs", "application/vnd.criticaltools.wbs+xml" }, + { "pml", "application/vnd.ctc-posml" }, + { "ppd", "application/vnd.cups-ppd" }, + { "car", "application/vnd.curl.car" }, + { "pcurl", "application/vnd.curl.pcurl" }, + { "dart", "application/vnd.dart" }, + { "rdz", "application/vnd.data-vision.rdz" }, + { "uvf", "application/vnd.dece.data" }, + { "uvvf", "application/vnd.dece.data" }, + { "uvd", "application/vnd.dece.data" }, + { "uvvd", "application/vnd.dece.data" }, + { "uvt", "application/vnd.dece.ttml+xml" }, + { "uvvt", "application/vnd.dece.ttml+xml" }, + { "uvx", "application/vnd.dece.unspecified" }, + { "uvvx", "application/vnd.dece.unspecified" }, + { "uvz", "application/vnd.dece.zip" }, + { "uvvz", "application/vnd.dece.zip" }, + { "fe_launch", "application/vnd.denovo.fcselayout-link" }, + { "dna", "application/vnd.dna" }, + { "mlp", "application/vnd.dolby.mlp" }, + { "dpg", "application/vnd.dpgraph" }, + { "dfac", "application/vnd.dreamfactory" }, + { "kpxx", "application/vnd.ds-keypoint" }, + { "ait", "application/vnd.dvb.ait" }, + { "svc", "application/vnd.dvb.service" }, + { "geo", "application/vnd.dynageo" }, + { "mag", "application/vnd.ecowin.chart" }, + { "nml", "application/vnd.enliven" }, + { "esf", "application/vnd.epson.esf" }, + { "msf", "application/vnd.epson.msf" }, + { "qam", "application/vnd.epson.quickanime" }, + { "slt", "application/vnd.epson.salt" }, + { "ssf", "application/vnd.epson.ssf" }, + { "es3", "application/vnd.eszigno3+xml" }, + { "et3", "application/vnd.eszigno3+xml" }, + { "ez2", "application/vnd.ezpix-album" }, + { "ez3", "application/vnd.ezpix-package" }, + { "fdf", "application/vnd.fdf" }, + { "mseed", "application/vnd.fdsn.mseed" }, + { "seed", "application/vnd.fdsn.seed" }, + { "dataless", "application/vnd.fdsn.seed" }, + { "gph", "application/vnd.flographit" }, + { "ftc", "application/vnd.fluxtime.clip" }, + { "fm", "application/vnd.framemaker" }, + { "frame", "application/vnd.framemaker" }, + { "maker", "application/vnd.framemaker" }, + { "book", "application/vnd.framemaker" }, + { "fnc", "application/vnd.frogans.fnc" }, + { "ltf", "application/vnd.frogans.ltf" }, + { "fsc", "application/vnd.fsc.weblaunch" }, + { "oas", "application/vnd.fujitsu.oasys" }, + { "oa2", "application/vnd.fujitsu.oasys2" }, + { "oa3", "application/vnd.fujitsu.oasys3" }, + { "fg5", "application/vnd.fujitsu.oasysgp" }, + { "bh2", "application/vnd.fujitsu.oasysprs" }, + { "ddd", "application/vnd.fujixerox.ddd" }, + { "xdw", "application/vnd.fujixerox.docuworks" }, + { "xbd", "application/vnd.fujixerox.docuworks.binder" }, + { "fzs", "application/vnd.fuzzysheet" }, + { "txd", "application/vnd.genomatix.tuxedo" }, + { "ggb", "application/vnd.geogebra.file" }, + { "ggt", "application/vnd.geogebra.tool" }, + { "gex", "application/vnd.geometry-explorer" }, + { "gre", "application/vnd.geometry-explorer" }, + { "gxt", "application/vnd.geonext" }, + { "g2w", "application/vnd.geoplan" }, + { "g3w", "application/vnd.geospace" }, + { "gmx", "application/vnd.gmx" }, { "kml", "application/vnd.google-earth.kml+xml" }, { "kmz", "application/vnd.google-earth.kmz" }, - { "m4a", "audio/mp4" }, - { "mp3", "audio/mpeg" }, - { "mp4", "video/mp4" }, - { "mpg", "video/mpeg" }, - { "mpeg", "video/mpeg" }, - { "mov", "video/quicktime" }, - { "odp", "application/vnd.oasis.opendocument.presentation" }, - { "ods", "application/vnd.oasis.opendocument.spreadsheet" }, - { "odt", "application/vnd.oasis.opendocument.text" }, - { "oga", "audio/ogg" }, - { "pdf", "application/pdf" }, - { "pptx", "application/vnd.ms-powerpoint" }, - { "pps", "application/vnd.ms-powerpoint" }, - { "qt", "video/quicktime" }, - { "swf", "application/x-shockwave-flash" }, - { "tar", "application/x-tar" }, - { "text", "text/plain" }, - { "tif", "image/tiff" }, - { "wav", "audio/wav" }, - { "wmv", "video/x-ms-wmv" }, + { "gqf", "application/vnd.grafeq" }, + { "gqs", "application/vnd.grafeq" }, + { "gac", "application/vnd.groove-account" }, + { "ghf", "application/vnd.groove-help" }, + { "gim", "application/vnd.groove-identity-message" }, + { "grv", "application/vnd.groove-injector" }, + { "gtm", "application/vnd.groove-tool-message" }, + { "tpl", "application/vnd.groove-tool-template" }, + { "vcg", "application/vnd.groove-vcard" }, + { "hal", "application/vnd.hal+xml" }, + { "zmm", "application/vnd.handheld-entertainment+xml" }, + { "hbci", "application/vnd.hbci" }, + { "les", "application/vnd.hhe.lesson-player" }, + { "hpgl", "application/vnd.hp-hpgl" }, + { "hpid", "application/vnd.hp-hpid" }, + { "hps", "application/vnd.hp-hps" }, + { "jlt", "application/vnd.hp-jlyt" }, + { "pcl", "application/vnd.hp-pcl" }, + { "pclxl", "application/vnd.hp-pclxl" }, + { "sfd-hdstx", "application/vnd.hydrostatix.sof-data" }, + { "mpy", "application/vnd.ibm.minipay" }, + { "afp", "application/vnd.ibm.modcap" }, + { "listafp", "application/vnd.ibm.modcap" }, + { "list3820", "application/vnd.ibm.modcap" }, + { "irm", "application/vnd.ibm.rights-management" }, + { "sc", "application/vnd.ibm.secure-container" }, + { "icc", "application/vnd.iccprofile" }, + { "icm", "application/vnd.iccprofile" }, + { "igl", "application/vnd.igloader" }, + { "ivp", "application/vnd.immervision-ivp" }, + { "ivu", "application/vnd.immervision-ivu" }, + { "igm", "application/vnd.insors.igm" }, + { "xpw", "application/vnd.intercon.formnet" }, + { "xpx", "application/vnd.intercon.formnet" }, + { "i2g", "application/vnd.intergeo" }, + { "qbo", "application/vnd.intu.qbo" }, + { "qfx", "application/vnd.intu.qfx" }, + { "rcprofile", "application/vnd.ipunplugged.rcprofile" }, + { "irp", "application/vnd.irepository.package+xml" }, + { "xpr", "application/vnd.is-xpr" }, + { "fcs", "application/vnd.isac.fcs" }, + { "jam", "application/vnd.jam" }, + { "rms", "application/vnd.jcp.javame.midlet-rms" }, + { "jisp", "application/vnd.jisp" }, + { "joda", "application/vnd.joost.joda-archive" }, + { "ktz", "application/vnd.kahootz" }, + { "ktr", "application/vnd.kahootz" }, + { "karbon", "application/vnd.kde.karbon" }, + { "chrt", "application/vnd.kde.kchart" }, + { "kfo", "application/vnd.kde.kformula" }, + { "flw", "application/vnd.kde.kivio" }, + { "kon", "application/vnd.kde.kontour" }, + { "kpr", "application/vnd.kde.kpresenter" }, + { "kpt", "application/vnd.kde.kpresenter" }, + { "ksp", "application/vnd.kde.kspread" }, + { "kwd", "application/vnd.kde.kword" }, + { "kwt", "application/vnd.kde.kword" }, + { "htke", "application/vnd.kenameaapp" }, + { "kia", "application/vnd.kidspiration" }, + { "kne", "application/vnd.kinar" }, + { "knp", "application/vnd.kinar" }, + { "skp", "application/vnd.koan" }, + { "skd", "application/vnd.koan" }, + { "skt", "application/vnd.koan" }, + { "skm", "application/vnd.koan" }, + { "sse", "application/vnd.kodak-descriptor" }, + { "lasxml", "application/vnd.las.las+xml" }, + { "lbd", "application/vnd.llamagraphics.life-balance.desktop" }, + { "lbe", "application/vnd.llamagraphics.life-balance.exchange+xml" }, + { "123", "application/vnd.lotus-1-2-3" }, + { "apr", "application/vnd.lotus-approach" }, + { "pre", "application/vnd.lotus-freelance" }, + { "nsf", "application/vnd.lotus-notes" }, + { "org", "application/vnd.lotus-organizer" }, + { "scm", "application/vnd.lotus-screencam" }, + { "lwp", "application/vnd.lotus-wordpro" }, + { "portpkg", "application/vnd.macports.portpkg" }, + { "mcd", "application/vnd.mcd" }, + { "mc1", "application/vnd.medcalcdata" }, + { "cdkey", "application/vnd.mediastation.cdkey" }, + { "mwf", "application/vnd.mfer" }, + { "mfm", "application/vnd.mfmp" }, + { "flo", "application/vnd.micrografx.flo" }, + { "igx", "application/vnd.micrografx.igx" }, + { "mif", "application/vnd.mif" }, + { "daf", "application/vnd.mobius.daf" }, + { "dis", "application/vnd.mobius.dis" }, + { "mbk", "application/vnd.mobius.mbk" }, + { "mqy", "application/vnd.mobius.mqy" }, + { "msl", "application/vnd.mobius.msl" }, + { "plc", "application/vnd.mobius.plc" }, + { "txf", "application/vnd.mobius.txf" }, + { "mpn", "application/vnd.mophun.application" }, + { "mpc", "application/vnd.mophun.certificate" }, + { "xul", "application/vnd.mozilla.xul+xml" }, + { "cil", "application/vnd.ms-artgalry" }, + { "cab", "application/vnd.ms-cab-compressed" }, { "xls", "application/vnd.ms-excel" }, - { "xlsx", "application/vnd.ms-excel" }, - { "zip", "application/x-zip-compressed" }, + { "xlm", "application/vnd.ms-excel" }, + { "xla", "application/vnd.ms-excel" }, + { "xlc", "application/vnd.ms-excel" }, + { "xlt", "application/vnd.ms-excel" }, + { "xlw", "application/vnd.ms-excel" }, + { "xlam", "application/vnd.ms-excel.addin.macroenabled.12" }, + { "xlsb", "application/vnd.ms-excel.sheet.binary.macroenabled.12" }, + { "xlsm", "application/vnd.ms-excel.sheet.macroenabled.12" }, + { "xltm", "application/vnd.ms-excel.template.macroenabled.12" }, + { "eot", "application/vnd.ms-fontobject" }, + { "chm", "application/vnd.ms-htmlhelp" }, + { "ims", "application/vnd.ms-ims" }, + { "lrm", "application/vnd.ms-lrm" }, + { "thmx", "application/vnd.ms-officetheme" }, + { "cat", "application/vnd.ms-pki.seccat" }, + { "stl", "application/vnd.ms-pki.stl" }, + { "ppt", "application/vnd.ms-powerpoint" }, + { "pps", "application/vnd.ms-powerpoint" }, + { "pot", "application/vnd.ms-powerpoint" }, + { "ppam", "application/vnd.ms-powerpoint.addin.macroenabled.12" }, + { "pptm", "application/vnd.ms-powerpoint.presentation.macroenabled.12" }, + { "sldm", "application/vnd.ms-powerpoint.slide.macroenabled.12" }, + { "ppsm", "application/vnd.ms-powerpoint.slideshow.macroenabled.12" }, + { "potm", "application/vnd.ms-powerpoint.template.macroenabled.12" }, + { "mpp", "application/vnd.ms-project" }, + { "mpt", "application/vnd.ms-project" }, + { "docm", "application/vnd.ms-word.document.macroenabled.12" }, + { "dotm", "application/vnd.ms-word.template.macroenabled.12" }, + { "wps", "application/vnd.ms-works" }, + { "wks", "application/vnd.ms-works" }, + { "wcm", "application/vnd.ms-works" }, + { "wdb", "application/vnd.ms-works" }, + { "wpl", "application/vnd.ms-wpl" }, + { "xps", "application/vnd.ms-xpsdocument" }, + { "mseq", "application/vnd.mseq" }, + { "mus", "application/vnd.musician" }, + { "msty", "application/vnd.muvee.style" }, + { "taglet", "application/vnd.mynfc" }, + { "nlu", "application/vnd.neurolanguage.nlu" }, + { "ntf", "application/vnd.nitf" }, + { "nitf", "application/vnd.nitf" }, + { "nnd", "application/vnd.noblenet-directory" }, + { "nns", "application/vnd.noblenet-sealer" }, + { "nnw", "application/vnd.noblenet-web" }, + { "ngdat", "application/vnd.nokia.n-gage.data" }, + { "n-gage", "application/vnd.nokia.n-gage.symbian.install" }, + { "rpst", "application/vnd.nokia.radio-preset" }, + { "rpss", "application/vnd.nokia.radio-presets" }, + { "edm", "application/vnd.novadigm.edm" }, + { "edx", "application/vnd.novadigm.edx" }, + { "ext", "application/vnd.novadigm.ext" }, + { "odc", "application/vnd.oasis.opendocument.chart" }, + { "otc", "application/vnd.oasis.opendocument.chart-template" }, + { "odb", "application/vnd.oasis.opendocument.database" }, + { "odf", "application/vnd.oasis.opendocument.formula" }, + { "odft", "application/vnd.oasis.opendocument.formula-template" }, + { "odg", "application/vnd.oasis.opendocument.graphics" }, + { "otg", "application/vnd.oasis.opendocument.graphics-template" }, + { "odi", "application/vnd.oasis.opendocument.image" }, + { "oti", "application/vnd.oasis.opendocument.image-template" }, + { "odp", "application/vnd.oasis.opendocument.presentation" }, + { "otp", "application/vnd.oasis.opendocument.presentation-template" }, + { "ods", "application/vnd.oasis.opendocument.spreadsheet" }, + { "ots", "application/vnd.oasis.opendocument.spreadsheet-template" }, + { "odt", "application/vnd.oasis.opendocument.text" }, + { "odm", "application/vnd.oasis.opendocument.text-master" }, + { "ott", "application/vnd.oasis.opendocument.text-template" }, + { "oth", "application/vnd.oasis.opendocument.text-web" }, + { "xo", "application/vnd.olpc-sugar" }, + { "dd2", "application/vnd.oma.dd2+xml" }, + { "oxt", "application/vnd.openofficeorg.extension" }, + { "pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation" }, + { "sldx", "application/vnd.openxmlformats-officedocument.presentationml.slide" }, + { "ppsx", "application/vnd.openxmlformats-officedocument.presentationml.slideshow" }, + { "potx", "application/vnd.openxmlformats-officedocument.presentationml.template" }, + { "xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" }, + { "xltx", "application/vnd.openxmlformats-officedocument.spreadsheetml.template" }, + { "docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document" }, + { "dotx", "application/vnd.openxmlformats-officedocument.wordprocessingml.template" }, + { "mgp", "application/vnd.osgeo.mapguide.package" }, + { "dp", "application/vnd.osgi.dp" }, + { "esa", "application/vnd.osgi.subsystem" }, + { "pdb", "application/vnd.palm" }, + { "pqa", "application/vnd.palm" }, + { "oprc", "application/vnd.palm" }, + { "paw", "application/vnd.pawaafile" }, + { "str", "application/vnd.pg.format" }, + { "ei6", "application/vnd.pg.osasli" }, + { "efif", "application/vnd.picsel" }, + { "wg", "application/vnd.pmi.widget" }, + { "plf", "application/vnd.pocketlearn" }, + { "pbd", "application/vnd.powerbuilder6" }, + { "box", "application/vnd.previewsystems.box" }, + { "mgz", "application/vnd.proteus.magazine" }, + { "qps", "application/vnd.publishare-delta-tree" }, + { "ptid", "application/vnd.pvi.ptid1" }, + { "qxd", "application/vnd.quark.quarkxpress" }, + { "qxt", "application/vnd.quark.quarkxpress" }, + { "qwd", "application/vnd.quark.quarkxpress" }, + { "qwt", "application/vnd.quark.quarkxpress" }, + { "qxl", "application/vnd.quark.quarkxpress" }, + { "qxb", "application/vnd.quark.quarkxpress" }, + { "bed", "application/vnd.realvnc.bed" }, + { "mxl", "application/vnd.recordare.musicxml" }, + { "musicxml", "application/vnd.recordare.musicxml+xml" }, + { "cryptonote", "application/vnd.rig.cryptonote" }, + { "cod", "application/vnd.rim.cod" }, + { "rm", "application/vnd.rn-realmedia" }, + { "rmvb", "application/vnd.rn-realmedia-vbr" }, + { "link66", "application/vnd.route66.link66+xml" }, + { "st", "application/vnd.sailingtracker.track" }, + { "see", "application/vnd.seemail" }, + { "sema", "application/vnd.sema" }, + { "semd", "application/vnd.semd" }, + { "semf", "application/vnd.semf" }, + { "ifm", "application/vnd.shana.informed.formdata" }, + { "itp", "application/vnd.shana.informed.formtemplate" }, + { "iif", "application/vnd.shana.informed.interchange" }, + { "ipk", "application/vnd.shana.informed.package" }, + { "twd", "application/vnd.simtech-mindmapper" }, + { "twds", "application/vnd.simtech-mindmapper" }, + { "mmf", "application/vnd.smaf" }, + { "teacher", "application/vnd.smart.teacher" }, + { "sdkm", "application/vnd.solent.sdkm+xml" }, + { "sdkd", "application/vnd.solent.sdkm+xml" }, + { "dxp", "application/vnd.spotfire.dxp" }, + { "sfs", "application/vnd.spotfire.sfs" }, + { "sdc", "application/vnd.stardivision.calc" }, + { "sda", "application/vnd.stardivision.draw" }, + { "sdd", "application/vnd.stardivision.impress" }, + { "smf", "application/vnd.stardivision.math" }, + { "sdw", "application/vnd.stardivision.writer" }, + { "vor", "application/vnd.stardivision.writer" }, + { "sgl", "application/vnd.stardivision.writer-global" }, + { "smzip", "application/vnd.stepmania.package" }, + { "sm", "application/vnd.stepmania.stepchart" }, + { "sxc", "application/vnd.sun.xml.calc" }, + { "stc", "application/vnd.sun.xml.calc.template" }, + { "sxd", "application/vnd.sun.xml.draw" }, + { "std", "application/vnd.sun.xml.draw.template" }, + { "sxi", "application/vnd.sun.xml.impress" }, + { "sti", "application/vnd.sun.xml.impress.template" }, + { "sxm", "application/vnd.sun.xml.math" }, + { "sxw", "application/vnd.sun.xml.writer" }, + { "sxg", "application/vnd.sun.xml.writer.global" }, + { "stw", "application/vnd.sun.xml.writer.template" }, + { "sus", "application/vnd.sus-calendar" }, + { "susp", "application/vnd.sus-calendar" }, + { "svd", "application/vnd.svd" }, + { "sis", "application/vnd.symbian.install" }, + { "sisx", "application/vnd.symbian.install" }, + { "xsm", "application/vnd.syncml+xml" }, + { "bdm", "application/vnd.syncml.dm+wbxml" }, + { "xdm", "application/vnd.syncml.dm+xml" }, + { "tao", "application/vnd.tao.intent-module-archive" }, + { "pcap", "application/vnd.tcpdump.pcap" }, + { "cap", "application/vnd.tcpdump.pcap" }, + { "dmp", "application/vnd.tcpdump.pcap" }, + { "tmo", "application/vnd.tmobile-livetv" }, + { "tpt", "application/vnd.trid.tpt" }, + { "mxs", "application/vnd.triscape.mxs" }, + { "tra", "application/vnd.trueapp" }, + { "ufd", "application/vnd.ufdl" }, + { "ufdl", "application/vnd.ufdl" }, + { "utz", "application/vnd.uiq.theme" }, + { "umj", "application/vnd.umajin" }, + { "unityweb", "application/vnd.unity" }, + { "uoml", "application/vnd.uoml+xml" }, + { "vcx", "application/vnd.vcx" }, + { "vsd", "application/vnd.visio" }, + { "vst", "application/vnd.visio" }, + { "vss", "application/vnd.visio" }, + { "vsw", "application/vnd.visio" }, + { "vis", "application/vnd.visionary" }, + { "vsf", "application/vnd.vsf" }, + { "wbxml", "application/vnd.wap.wbxml" }, + { "wmlc", "application/vnd.wap.wmlc" }, + { "wmlsc", "application/vnd.wap.wmlscriptc" }, + { "wtb", "application/vnd.webturbo" }, + { "nbp", "application/vnd.wolfram.player" }, + { "wpd", "application/vnd.wordperfect" }, + { "wqd", "application/vnd.wqd" }, + { "stf", "application/vnd.wt.stf" }, + { "xar", "application/vnd.xara" }, + { "xfdl", "application/vnd.xfdl" }, + { "hvd", "application/vnd.yamaha.hv-dic" }, + { "hvs", "application/vnd.yamaha.hv-script" }, + { "hvp", "application/vnd.yamaha.hv-voice" }, + { "osf", "application/vnd.yamaha.openscoreformat" }, + { "osfpvg", "application/vnd.yamaha.openscoreformat.osfpvg+xml" }, + { "saf", "application/vnd.yamaha.smaf-audio" }, + { "spf", "application/vnd.yamaha.smaf-phrase" }, + { "cmp", "application/vnd.yellowriver-custom-menu" }, + { "zir", "application/vnd.zul" }, + { "zirz", "application/vnd.zul" }, + { "zaz", "application/vnd.zzazz.deck+xml" }, + { "vxml", "application/voicexml+xml" }, + { "wgt", "application/widget" }, + { "hlp", "application/winhlp" }, + { "wsdl", "application/wsdl+xml" }, + { "wspolicy", "application/wspolicy+xml" }, + { "7z", "application/x-7z-compressed" }, + { "abw", "application/x-abiword" }, + { "ace", "application/x-ace-compressed" }, + { "dmg", "application/x-apple-diskimage" }, + { "aab", "application/x-authorware-bin" }, + { "x32", "application/x-authorware-bin" }, + { "u32", "application/x-authorware-bin" }, + { "vox", "application/x-authorware-bin" }, + { "aam", "application/x-authorware-map" }, + { "aas", "application/x-authorware-seg" }, + { "bcpio", "application/x-bcpio" }, + { "torrent", "application/x-bittorrent" }, + { "blb", "application/x-blorb" }, + { "blorb", "application/x-blorb" }, + { "bz", "application/x-bzip" }, + { "bz2", "application/x-bzip2" }, + { "boz", "application/x-bzip2" }, + { "cbr", "application/x-cbr" }, + { "cba", "application/x-cbr" }, + { "cbt", "application/x-cbr" }, + { "cbz", "application/x-cbr" }, + { "cb7", "application/x-cbr" }, + { "vcd", "application/x-cdlink" }, + { "cfs", "application/x-cfs-compressed" }, + { "chat", "application/x-chat" }, + { "pgn", "application/x-chess-pgn" }, + { "nsc", "application/x-conference" }, + { "cpio", "application/x-cpio" }, + { "csh", "application/x-csh" }, + { "deb", "application/x-debian-package" }, + { "udeb", "application/x-debian-package" }, + { "dgc", "application/x-dgc-compressed" }, + { "dir", "application/x-director" }, + { "dcr", "application/x-director" }, + { "dxr", "application/x-director" }, + { "cst", "application/x-director" }, + { "cct", "application/x-director" }, + { "cxt", "application/x-director" }, + { "w3d", "application/x-director" }, + { "fgd", "application/x-director" }, + { "swa", "application/x-director" }, + { "wad", "application/x-doom" }, + { "ncx", "application/x-dtbncx+xml" }, + { "dtb", "application/x-dtbook+xml" }, + { "res", "application/x-dtbresource+xml" }, + { "dvi", "application/x-dvi" }, + { "evy", "application/x-envoy" }, + { "eva", "application/x-eva" }, + { "bdf", "application/x-font-bdf" }, + { "gsf", "application/x-font-ghostscript" }, + { "psf", "application/x-font-linux-psf" }, + { "otf", "application/x-font-otf" }, + { "pcf", "application/x-font-pcf" }, + { "snf", "application/x-font-snf" }, + { "ttf", "application/x-font-ttf" }, + { "ttc", "application/x-font-ttf" }, + { "pfa", "application/x-font-type1" }, + { "pfb", "application/x-font-type1" }, + { "pfm", "application/x-font-type1" }, + { "afm", "application/x-font-type1" }, + { "woff", "application/font-woff" }, + { "arc", "application/x-freearc" }, + { "spl", "application/x-futuresplash" }, + { "gca", "application/x-gca-compressed" }, + { "ulx", "application/x-glulx" }, + { "gnumeric", "application/x-gnumeric" }, + { "gramps", "application/x-gramps-xml" }, + { "gtar", "application/x-gtar" }, + { "hdf", "application/x-hdf" }, + { "install", "application/x-install-instructions" }, + { "iso", "application/x-iso9660-image" }, + { "jnlp", "application/x-java-jnlp-file" }, + { "latex", "application/x-latex" }, + { "lzh", "application/x-lzh-compressed" }, + { "lha", "application/x-lzh-compressed" }, + { "mie", "application/x-mie" }, + { "prc", "application/x-mobipocket-ebook" }, + { "mobi", "application/x-mobipocket-ebook" }, + { "application", "application/x-ms-application" }, + { "lnk", "application/x-ms-shortcut" }, + { "wmd", "application/x-ms-wmd" }, + { "wmz", "application/x-msmetafile" }, + { "xbap", "application/x-ms-xbap" }, + { "mdb", "application/x-msaccess" }, + { "obd", "application/x-msbinder" }, + { "crd", "application/x-mscardfile" }, + { "clp", "application/x-msclip" }, + { "exe", "application/x-msdownload" }, + { "dll", "application/x-msdownload" }, + { "com", "application/x-msdownload" }, + { "bat", "application/x-msdownload" }, + { "msi", "application/x-msdownload" }, + { "mvb", "application/x-msmediaview" }, + { "m13", "application/x-msmediaview" }, + { "m14", "application/x-msmediaview" }, + { "wmf", "application/x-msmetafile" }, + { "emf", "application/x-msmetafile" }, + { "emz", "application/x-msmetafile" }, + { "mny", "application/x-msmoney" }, + { "pub", "application/x-mspublisher" }, + { "scd", "application/x-msschedule" }, + { "trm", "application/x-msterminal" }, + { "wri", "application/x-mswrite" }, + { "nc", "application/x-netcdf" }, + { "cdf", "application/x-netcdf" }, + { "nzb", "application/x-nzb" }, + { "p12", "application/x-pkcs12" }, + { "pfx", "application/x-pkcs12" }, + { "p7b", "application/x-pkcs7-certificates" }, + { "spc", "application/x-pkcs7-certificates" }, + { "p7r", "application/x-pkcs7-certreqresp" }, + { "rar", "application/x-rar-compressed" }, + { "ris", "application/x-research-info-systems" }, + { "sh", "application/x-sh" }, + { "shar", "application/x-shar" }, + { "swf", "application/x-shockwave-flash" }, + { "xap", "application/x-silverlight-app" }, + { "sql", "application/x-sql" }, + { "sit", "application/x-stuffit" }, + { "sitx", "application/x-stuffitx" }, + { "srt", "application/x-subrip" }, + { "sv4cpio", "application/x-sv4cpio" }, + { "sv4crc", "application/x-sv4crc" }, + { "t3", "application/x-t3vm-image" }, + { "gam", "application/x-tads" }, + { "tar", "application/x-tar" }, + { "tcl", "application/x-tcl" }, + { "tex", "application/x-tex" }, + { "tfm", "application/x-tex-tfm" }, + { "texinfo", "application/x-texinfo" }, + { "texi", "application/x-texinfo" }, + { "obj", "application/x-tgif" }, + { "ustar", "application/x-ustar" }, + { "src", "application/x-wais-source" }, + { "der", "application/x-x509-ca-cert" }, + { "crt", "application/x-x509-ca-cert" }, + { "fig", "application/x-xfig" }, + { "xlf", "application/x-xliff+xml" }, + { "xpi", "application/x-xpinstall" }, + { "xz", "application/x-xz" }, + { "z1", "application/x-zmachine" }, + { "z2", "application/x-zmachine" }, + { "z3", "application/x-zmachine" }, + { "z4", "application/x-zmachine" }, + { "z5", "application/x-zmachine" }, + { "z6", "application/x-zmachine" }, + { "z7", "application/x-zmachine" }, + { "z8", "application/x-zmachine" }, + { "xaml", "application/xaml+xml" }, + { "xdf", "application/xcap-diff+xml" }, + { "xenc", "application/xenc+xml" }, + { "xhtml", "application/xhtml+xml" }, + { "xht", "application/xhtml+xml" }, { "xml", "application/xml" }, { "xsl", "application/xml" }, - { "xsd", "application/xml" }, + { "dtd", "application/xml-dtd" }, + { "xop", "application/xop+xml" }, + { "xpl", "application/xproc+xml" }, + { "xslt", "application/xslt+xml" }, + { "xspf", "application/xspf+xml" }, + { "mxml", "application/xv+xml" }, + { "xhvml", "application/xv+xml" }, + { "xvml", "application/xv+xml" }, + { "xvm", "application/xv+xml" }, + { "yang", "application/yang" }, + { "yin", "application/yin+xml" }, + { "zip", "application/zip" }, + { "adp", "audio/adpcm" }, + { "au", "audio/basic" }, + { "snd", "audio/basic" }, + { "mid", "audio/midi" }, + { "midi", "audio/midi" }, + { "kar", "audio/midi" }, + { "rmi", "audio/midi" }, + { "mp4a", "audio/mp4" }, + { "mpga", "audio/mpeg" }, + { "mp2", "audio/mpeg" }, + { "mp2a", "audio/mpeg" }, + { "mp3", "audio/mpeg" }, + { "m2a", "audio/mpeg" }, + { "m3a", "audio/mpeg" }, + { "oga", "audio/ogg" }, + { "ogg", "audio/ogg" }, + { "spx", "audio/ogg" }, + { "s3m", "audio/s3m" }, + { "sil", "audio/silk" }, + { "uva", "audio/vnd.dece.audio" }, + { "uvva", "audio/vnd.dece.audio" }, + { "eol", "audio/vnd.digital-winds" }, + { "dra", "audio/vnd.dra" }, + { "dts", "audio/vnd.dts" }, + { "dtshd", "audio/vnd.dts.hd" }, + { "lvp", "audio/vnd.lucent.voice" }, + { "pya", "audio/vnd.ms-playready.media.pya" }, + { "ecelp4800", "audio/vnd.nuera.ecelp4800" }, + { "ecelp7470", "audio/vnd.nuera.ecelp7470" }, + { "ecelp9600", "audio/vnd.nuera.ecelp9600" }, + { "rip", "audio/vnd.rip" }, + { "weba", "audio/webm" }, + { "aac", "audio/x-aac" }, + { "aif", "audio/x-aiff" }, + { "aiff", "audio/x-aiff" }, + { "aifc", "audio/x-aiff" }, + { "caf", "audio/x-caf" }, + { "flac", "audio/x-flac" }, + { "mka", "audio/x-matroska" }, + { "m3u", "audio/x-mpegurl" }, + { "wax", "audio/x-ms-wax" }, + { "wma", "audio/x-ms-wma" }, + { "ram", "audio/x-pn-realaudio" }, + { "ra", "audio/x-pn-realaudio" }, + { "rmp", "audio/x-pn-realaudio-plugin" }, + { "wav", "audio/x-wav" }, + { "xm", "audio/xm" }, + { "cdx", "chemical/x-cdx" }, + { "cif", "chemical/x-cif" }, + { "cmdf", "chemical/x-cmdf" }, + { "cml", "chemical/x-cml" }, + { "csml", "chemical/x-csml" }, + { "xyz", "chemical/x-xyz" }, + { "bmp", "image/bmp" }, + { "cgm", "image/cgm" }, + { "g3", "image/g3fax" }, + { "gif", "image/gif" }, + { "ief", "image/ief" }, + { "jpeg", "image/jpeg" }, + { "jpg", "image/jpeg" }, + { "jpe", "image/jpeg" }, + { "ktx", "image/ktx" }, + { "png", "image/png" }, + { "btif", "image/prs.btif" }, + { "sgi", "image/sgi" }, + { "svg", "image/svg+xml" }, + { "svgz", "image/svg+xml" }, + { "tiff", "image/tiff" }, + { "tif", "image/tiff" }, + { "psd", "image/vnd.adobe.photoshop" }, + { "uvi", "image/vnd.dece.graphic" }, + { "uvvi", "image/vnd.dece.graphic" }, + { "uvg", "image/vnd.dece.graphic" }, + { "uvvg", "image/vnd.dece.graphic" }, + { "sub", "text/vnd.dvb.subtitle" }, + { "djvu", "image/vnd.djvu" }, + { "djv", "image/vnd.djvu" }, + { "dwg", "image/vnd.dwg" }, + { "dxf", "image/vnd.dxf" }, + { "fbs", "image/vnd.fastbidsheet" }, + { "fpx", "image/vnd.fpx" }, + { "fst", "image/vnd.fst" }, + { "mmr", "image/vnd.fujixerox.edmics-mmr" }, + { "rlc", "image/vnd.fujixerox.edmics-rlc" }, + { "mdi", "image/vnd.ms-modi" }, + { "wdp", "image/vnd.ms-photo" }, + { "npx", "image/vnd.net-fpx" }, + { "wbmp", "image/vnd.wap.wbmp" }, + { "xif", "image/vnd.xiff" }, + { "webp", "image/webp" }, + { "3ds", "image/x-3ds" }, + { "ras", "image/x-cmu-raster" }, + { "cmx", "image/x-cmx" }, + { "fh", "image/x-freehand" }, + { "fhc", "image/x-freehand" }, + { "fh4", "image/x-freehand" }, + { "fh5", "image/x-freehand" }, + { "fh7", "image/x-freehand" }, + { "ico", "image/x-icon" }, + { "sid", "image/x-mrsid-image" }, + { "pcx", "image/x-pcx" }, + { "pic", "image/x-pict" }, + { "pct", "image/x-pict" }, + { "pnm", "image/x-portable-anymap" }, + { "pbm", "image/x-portable-bitmap" }, + { "pgm", "image/x-portable-graymap" }, + { "ppm", "image/x-portable-pixmap" }, + { "rgb", "image/x-rgb" }, + { "tga", "image/x-tga" }, + { "xbm", "image/x-xbitmap" }, + { "xpm", "image/x-xpixmap" }, + { "xwd", "image/x-xwindowdump" }, + { "eml", "message/rfc822" }, + { "mime", "message/rfc822" }, + { "igs", "model/iges" }, + { "iges", "model/iges" }, + { "msh", "model/mesh" }, + { "mesh", "model/mesh" }, + { "silo", "model/mesh" }, + { "dae", "model/vnd.collada+xml" }, + { "dwf", "model/vnd.dwf" }, + { "gdl", "model/vnd.gdl" }, + { "gtw", "model/vnd.gtw" }, + { "mts", "model/vnd.mts" }, + { "vtu", "model/vnd.vtu" }, + { "wrl", "model/vrml" }, + { "vrml", "model/vrml" }, + { "x3db", "model/x3d+binary" }, + { "x3dbz", "model/x3d+binary" }, + { "x3dv", "model/x3d+vrml" }, + { "x3dvz", "model/x3d+vrml" }, + { "x3d", "model/x3d+xml" }, + { "x3dz", "model/x3d+xml" }, + { "appcache", "text/cache-manifest" }, + { "ics", "text/calendar" }, + { "ifb", "text/calendar" }, + { "css", "text/css" }, + { "csv", "text/csv" }, + { "html", "text/html" }, + { "htm", "text/html" }, + { "n3", "text/n3" }, + { "txt", "text/plain" }, + { "text", "text/plain" }, + { "conf", "text/plain" }, + { "def", "text/plain" }, + { "list", "text/plain" }, + { "log", "text/plain" }, + { "in", "text/plain" }, + { "dsc", "text/prs.lines.tag" }, + { "rtx", "text/richtext" }, + { "sgml", "text/sgml" }, + { "sgm", "text/sgml" }, + { "tsv", "text/tab-separated-values" }, + { "t", "text/troff" }, + { "tr", "text/troff" }, + { "roff", "text/troff" }, + { "man", "text/troff" }, + { "me", "text/troff" }, + { "ms", "text/troff" }, + { "ttl", "text/turtle" }, + { "uri", "text/uri-list" }, + { "uris", "text/uri-list" }, + { "urls", "text/uri-list" }, + { "vcard", "text/vcard" }, + { "curl", "text/vnd.curl" }, + { "dcurl", "text/vnd.curl.dcurl" }, + { "scurl", "text/vnd.curl.scurl" }, + { "mcurl", "text/vnd.curl.mcurl" }, + { "fly", "text/vnd.fly" }, + { "flx", "text/vnd.fmi.flexstor" }, + { "gv", "text/vnd.graphviz" }, + { "3dml", "text/vnd.in3d.3dml" }, + { "spot", "text/vnd.in3d.spot" }, + { "jad", "text/vnd.sun.j2me.app-descriptor" }, + { "wml", "text/vnd.wap.wml" }, + { "wmls", "text/vnd.wap.wmlscript" }, + { "s", "text/x-asm" }, + { "asm", "text/x-asm" }, + { "c", "text/x-c" }, + { "cc", "text/x-c" }, + { "cxx", "text/x-c" }, + { "cpp", "text/x-c" }, + { "h", "text/x-c" }, + { "hh", "text/x-c" }, + { "dic", "text/x-c" }, + { "f", "text/x-fortran" }, + { "for", "text/x-fortran" }, + { "f77", "text/x-fortran" }, + { "f90", "text/x-fortran" }, + { "java", "text/x-java-source" }, + { "opml", "text/x-opml" }, + { "p", "text/x-pascal" }, + { "pas", "text/x-pascal" }, + { "nfo", "text/x-nfo" }, + { "etx", "text/x-setext" }, + { "sfv", "text/x-sfv" }, + { "uu", "text/x-uuencode" }, + { "vcs", "text/x-vcalendar" }, + { "vcf", "text/x-vcard" }, + { "3gp", "video/3gpp" }, + { "3g2", "video/3gpp2" }, + { "h261", "video/h261" }, + { "h263", "video/h263" }, + { "h264", "video/h264" }, + { "jpgv", "video/jpeg" }, + { "jpm", "video/jpm" }, + { "jpgm", "video/jpm" }, + { "mj2", "video/mj2" }, + { "mjp2", "video/mj2" }, + { "mp4", "video/mp4" }, + { "mp4v", "video/mp4" }, + { "mpg4", "video/mp4" }, + { "mpeg", "video/mpeg" }, + { "mpg", "video/mpeg" }, + { "mpe", "video/mpeg" }, + { "m1v", "video/mpeg" }, + { "m2v", "video/mpeg" }, + { "ogv", "video/ogg" }, + { "qt", "video/quicktime" }, + { "mov", "video/quicktime" }, + { "uvh", "video/vnd.dece.hd" }, + { "uvvh", "video/vnd.dece.hd" }, + { "uvm", "video/vnd.dece.mobile" }, + { "uvvm", "video/vnd.dece.mobile" }, + { "uvp", "video/vnd.dece.pd" }, + { "uvvp", "video/vnd.dece.pd" }, + { "uvs", "video/vnd.dece.sd" }, + { "uvvs", "video/vnd.dece.sd" }, + { "uvv", "video/vnd.dece.video" }, + { "uvvv", "video/vnd.dece.video" }, + { "dvb", "video/vnd.dvb.file" }, + { "fvt", "video/vnd.fvt" }, + { "mxu", "video/vnd.mpegurl" }, + { "m4u", "video/vnd.mpegurl" }, + { "pyv", "video/vnd.ms-playready.media.pyv" }, + { "uvu", "video/vnd.uvvu.mp4" }, + { "uvvu", "video/vnd.uvvu.mp4" }, + { "viv", "video/vnd.vivo" }, + { "webm", "video/webm" }, + { "f4v", "video/x-f4v" }, + { "fli", "video/x-fli" }, + { "flv", "video/x-flv" }, + { "m4v", "video/x-m4v" }, + { "mkv", "video/x-matroska" }, + { "mk3d", "video/x-matroska" }, + { "mks", "video/x-matroska" }, + { "mng", "video/x-mng" }, + { "asf", "video/x-ms-asf" }, + { "asx", "video/x-ms-asf" }, + { "vob", "video/x-ms-vob" }, + { "wm", "video/x-ms-wm" }, + { "wmv", "video/x-ms-wmv" }, + { "wmx", "video/x-ms-wmx" }, + { "wvx", "video/x-ms-wvx" }, + { "avi", "video/x-msvideo" }, + { "movie", "video/x-sgi-movie" }, + { "smv", "video/x-smv" }, + { "ice", "x-conference/x-cooltalk" }, { NULL, NULL } }; From f79f3ac1842f812479d49f84f2716480d020594c Mon Sep 17 00:00:00 2001 From: Adam Harvey Date: Wed, 11 Jun 2014 00:22:13 +0000 Subject: [PATCH 67/77] Fix broken test. --- sapi/cli/tests/bug61977.phpt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sapi/cli/tests/bug61977.phpt b/sapi/cli/tests/bug61977.phpt index 09a6ba6d230..6250c9aec04 100644 --- a/sapi/cli/tests/bug61977.phpt +++ b/sapi/cli/tests/bug61977.phpt @@ -48,7 +48,7 @@ foo.html => Content-Type: text/html; charset=UTF-8 foo.htm => Content-Type: text/html; charset=UTF-8 foo.svg => Content-Type: image/svg+xml foo.css => Content-Type: text/css; charset=UTF-8 -foo.js => Content-Type: text/javascript; charset=UTF-8 +foo.js => Content-Type: application/javascript foo.png => Content-Type: image/png foo.webm => Content-Type: video/webm foo.ogv => Content-Type: video/ogg From 61279dca6978d462fdf9ed794c8e17fb4901ce8e Mon Sep 17 00:00:00 2001 From: Adam Harvey Date: Wed, 11 Jun 2014 00:31:04 +0000 Subject: [PATCH 68/77] Add NEWS. This doesn't need UPGRADING (or an RFC), IMO. --- NEWS | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/NEWS b/NEWS index f5dbef1d772..50ae0467861 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,11 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? 20??, PHP 5.7.0 +- CLI server: + . Refactor MIME type handling to use a hash table instead of linear search. + (Adam) + . Update the MIME type list from the one shipped by Apache HTTPD. (Adam) + - DBA: . Fixed bug #62490 (dba_delete returns true on missing item (inifile)). (Mike) From 979eed5c6bb437d53d27745925663eb8c31640a5 Mon Sep 17 00:00:00 2001 From: Stanislav Malyshev Date: Tue, 10 Jun 2014 23:03:40 -0700 Subject: [PATCH 69/77] 5.4.31 next --- NEWS | 2 ++ configure.in | 2 +- main/php_version.h | 6 +++--- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index e8465491038..7e80e294f20 100644 --- a/NEWS +++ b/NEWS @@ -1,5 +1,7 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +?? ??? 2014, PHP 5.4.31 + ?? ??? 2014, PHP 5.4.30 - Core: diff --git a/configure.in b/configure.in index 855bcbb2c8b..9ea4e375268 100644 --- a/configure.in +++ b/configure.in @@ -119,7 +119,7 @@ int zend_sprintf(char *buffer, const char *format, ...); PHP_MAJOR_VERSION=5 PHP_MINOR_VERSION=4 -PHP_RELEASE_VERSION=30 +PHP_RELEASE_VERSION=31 PHP_EXTRA_VERSION="-dev" PHP_VERSION="$PHP_MAJOR_VERSION.$PHP_MINOR_VERSION.$PHP_RELEASE_VERSION$PHP_EXTRA_VERSION" PHP_VERSION_ID=`expr [$]PHP_MAJOR_VERSION \* 10000 + [$]PHP_MINOR_VERSION \* 100 + [$]PHP_RELEASE_VERSION` diff --git a/main/php_version.h b/main/php_version.h index 59eb939959c..ab1d4eed791 100644 --- a/main/php_version.h +++ b/main/php_version.h @@ -2,8 +2,8 @@ /* edit configure.in to change version number */ #define PHP_MAJOR_VERSION 5 #define PHP_MINOR_VERSION 4 -#define PHP_RELEASE_VERSION 30 +#define PHP_RELEASE_VERSION 31 #define PHP_EXTRA_VERSION "-dev" -#define PHP_VERSION "5.4.30-dev" -#define PHP_VERSION_ID 50430 +#define PHP_VERSION "5.4.31-dev" +#define PHP_VERSION_ID 50431 From 317bcb96d01a1dade28f2875bdd9bbbf73a40160 Mon Sep 17 00:00:00 2001 From: Stanislav Malyshev Date: Tue, 10 Jun 2014 23:17:30 -0700 Subject: [PATCH 70/77] Fix bug #66127 (Segmentation fault with ArrayObject unset) --- NEWS | 1 + ext/spl/spl_array.c | 2 +- ext/spl/tests/bug66127.phpt | 25 +++++++++++++++++++++++++ ext/spl/tests/iterator_035.phpt | 2 ++ 4 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 ext/spl/tests/bug66127.phpt diff --git a/NEWS b/NEWS index 7e80e294f20..4c57eac2157 100644 --- a/NEWS +++ b/NEWS @@ -43,6 +43,7 @@ PHP NEWS . Implemented FR #49898 (Add SoapClient::__getCookies()). (Boro Sitnikovski) - SPL: + . Fixed bug #66127 (Segmentation fault with ArrayObject unset). (Stas) . Fixed bug #67359 (Segfault in recursiveDirectoryIterator). (Laruence) . Fixed bug #67360 (Missing element after ArrayObject::getIterator). (Adam) diff --git a/ext/spl/spl_array.c b/ext/spl/spl_array.c index 34f3a3818d8..758947a8cc7 100644 --- a/ext/spl/spl_array.c +++ b/ext/spl/spl_array.c @@ -402,7 +402,7 @@ static zval *spl_array_read_dimension_ex(int check_inherited, zval *object, zval /* When in a write context, * ZE has to be fooled into thinking this is in a reference set * by separating (if necessary) and returning as an is_ref=1 zval (even if refcount == 1) */ - if ((type == BP_VAR_W || type == BP_VAR_RW || type == BP_VAR_UNSET) && !Z_ISREF_PP(ret)) { + if ((type == BP_VAR_W || type == BP_VAR_RW || type == BP_VAR_UNSET) && !Z_ISREF_PP(ret) && ret != &EG(uninitialized_zval_ptr)) { if (Z_REFCOUNT_PP(ret) > 1) { zval *newval; diff --git a/ext/spl/tests/bug66127.phpt b/ext/spl/tests/bug66127.phpt new file mode 100644 index 00000000000..b5d1dcac4b2 --- /dev/null +++ b/ext/spl/tests/bug66127.phpt @@ -0,0 +1,25 @@ +--TEST-- +Bug #66127 (Segmentation fault with ArrayObject unset) +--INI-- +error_reporting = E_ALL & ~E_NOTICE +--FILE-- + +--EXPECT-- +Worked! diff --git a/ext/spl/tests/iterator_035.phpt b/ext/spl/tests/iterator_035.phpt index 9ce098b69d7..fc0271e3811 100644 --- a/ext/spl/tests/iterator_035.phpt +++ b/ext/spl/tests/iterator_035.phpt @@ -12,4 +12,6 @@ $a[] = &$tmp; echo "Done\n"; ?> --EXPECTF-- +Notice: Indirect modification of overloaded element of ArrayIterator has no effect in %s on line %d + Fatal error: Cannot assign by reference to overloaded object in %s on line %d From 495e6719e0512fca83bb832a9632a567e8a11241 Mon Sep 17 00:00:00 2001 From: Stanislav Malyshev Date: Tue, 10 Jun 2014 23:23:37 -0700 Subject: [PATCH 71/77] update NEWS --- NEWS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NEWS b/NEWS index a2e33c343a4..771f04d47c4 100644 --- a/NEWS +++ b/NEWS @@ -30,7 +30,6 @@ PHP NEWS . Fixed bug #67413 (fileinfo: cdf_read_property_info insufficient boundary check). (Francisco Alonso, Jan Kaluza, Remi) - - OPCache: . Fixed issue #183 (TMP_VAR is not only used once). (Dmitry, Laruence) @@ -47,6 +46,7 @@ PHP NEWS . Implemented FR #49898 (Add SoapClient::__getCookies()). (Boro Sitnikovski) - SPL: + . Fixed bug #66127 (Segmentation fault with ArrayObject unset). (Stas) . Fixed bug #67359 (Segfault in recursiveDirectoryIterator). (Laruence) . Fixed bug #67360 (Missing element after ArrayObject::getIterator). (Adam) From a6e07510792255aab0cd39c01595d16f9da80a05 Mon Sep 17 00:00:00 2001 From: Julien Pauli Date: Wed, 11 Jun 2014 10:21:26 +0200 Subject: [PATCH 72/77] 5.5.15 now --- NEWS | 2 ++ configure.in | 2 +- main/php_version.h | 6 +++--- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index 771f04d47c4..a5c13710fe4 100644 --- a/NEWS +++ b/NEWS @@ -1,5 +1,7 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +?? ??? 2014, PHP 5.5.15 + ?? ??? 2014, PHP 5.5.14 - Core: diff --git a/configure.in b/configure.in index b0937cac2cf..37310cdc6bf 100644 --- a/configure.in +++ b/configure.in @@ -119,7 +119,7 @@ int zend_sprintf(char *buffer, const char *format, ...); PHP_MAJOR_VERSION=5 PHP_MINOR_VERSION=5 -PHP_RELEASE_VERSION=14 +PHP_RELEASE_VERSION=15 PHP_EXTRA_VERSION="-dev" PHP_VERSION="$PHP_MAJOR_VERSION.$PHP_MINOR_VERSION.$PHP_RELEASE_VERSION$PHP_EXTRA_VERSION" PHP_VERSION_ID=`expr [$]PHP_MAJOR_VERSION \* 10000 + [$]PHP_MINOR_VERSION \* 100 + [$]PHP_RELEASE_VERSION` diff --git a/main/php_version.h b/main/php_version.h index 2a2464c8c40..6f65548d012 100644 --- a/main/php_version.h +++ b/main/php_version.h @@ -2,7 +2,7 @@ /* edit configure.in to change version number */ #define PHP_MAJOR_VERSION 5 #define PHP_MINOR_VERSION 5 -#define PHP_RELEASE_VERSION 14 +#define PHP_RELEASE_VERSION 15 #define PHP_EXTRA_VERSION "-dev" -#define PHP_VERSION "5.5.14-dev" -#define PHP_VERSION_ID 50514 +#define PHP_VERSION "5.5.15-dev" +#define PHP_VERSION_ID 50515 From c38ab260fe3a40cce049c835fb7833de00ab977c Mon Sep 17 00:00:00 2001 From: Ferenc Kovacs Date: Wed, 11 Jun 2014 14:43:09 +0200 Subject: [PATCH 73/77] Revert "Add optional second arg to unserialize()" This reverts commit cfd104582220d578ab1b78a5991065d038e1f931. --- ext/standard/basic_functions.c | 1 - .../serialize/serialization_error_001.phpt | 6 ++--- .../tests/serialize/unserialize_consumed.phpt | 27 ------------------- ext/standard/var.c | 10 ++----- 4 files changed, 5 insertions(+), 39 deletions(-) delete mode 100644 ext/standard/tests/serialize/unserialize_consumed.phpt diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index 3baa9f43b03..69e20fdd9ae 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -2648,7 +2648,6 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_unserialize, 0, 0, 1) ZEND_ARG_INFO(0, variable_representation) - ZEND_ARG_INFO(1, consumed) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_memory_get_usage, 0, 0, 0) diff --git a/ext/standard/tests/serialize/serialization_error_001.phpt b/ext/standard/tests/serialize/serialization_error_001.phpt index c6c17512f39..da6f50cc02b 100644 --- a/ext/standard/tests/serialize/serialization_error_001.phpt +++ b/ext/standard/tests/serialize/serialization_error_001.phpt @@ -21,7 +21,7 @@ var_dump( unserialize() ); //Test serialize with one more than the expected number of arguments var_dump( serialize(1,2) ); -var_dump( unserialize(1,$x,2) ); +var_dump( unserialize(1,2) ); echo "Done"; ?> @@ -31,12 +31,12 @@ echo "Done"; Warning: serialize() expects exactly 1 parameter, 0 given in %s on line 16 NULL -Warning: unserialize() expects at least 1 parameter, 0 given in %s on line 17 +Warning: unserialize() expects exactly 1 parameter, 0 given in %s on line 17 bool(false) Warning: serialize() expects exactly 1 parameter, 2 given in %s on line 20 NULL -Warning: unserialize() expects at most 2 parameters, 3 given in %s on line 21 +Warning: unserialize() expects exactly 1 parameter, 2 given in %s on line 21 bool(false) Done diff --git a/ext/standard/tests/serialize/unserialize_consumed.phpt b/ext/standard/tests/serialize/unserialize_consumed.phpt deleted file mode 100644 index 6cc11e273fa..00000000000 --- a/ext/standard/tests/serialize/unserialize_consumed.phpt +++ /dev/null @@ -1,27 +0,0 @@ ---TEST-- -Unserialization of partial strings ---FILE-- - Date: Tue, 10 Jun 2014 11:18:02 -0700 Subject: [PATCH 74/77] Fix potential segfault in dns_get_record() If the remote sends us a packet with a malformed TXT record, we could end up trying to over-consume the packet and wander off into overruns. --- ext/standard/dns.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ext/standard/dns.c b/ext/standard/dns.c index 6a894467ff4..214a7dc7e92 100644 --- a/ext/standard/dns.c +++ b/ext/standard/dns.c @@ -517,6 +517,10 @@ static u_char *php_parserr(u_char *cp, querybuf *answer, int type_to_fetch, int while (ll < dlen) { n = cp[ll]; + if ((ll + n) >= dlen) { + // Invalid chunk length, truncate + n = dlen - (ll + 1); + } memcpy(tp + ll , cp + ll + 1, n); add_next_index_stringl(entries, cp + ll + 1, n, 1); ll = ll + n + 1; From ace35a3d3b38fc80f73f774826fd5d3ae14e8a28 Mon Sep 17 00:00:00 2001 From: Sara Golemon Date: Wed, 11 Jun 2014 14:22:59 -0700 Subject: [PATCH 75/77] NEWS entry for Fix potential segfault in dns_get_record( --- NEWS | 3 +++ 1 file changed, 3 insertions(+) diff --git a/NEWS b/NEWS index a5c13710fe4..8b1feba7c3b 100644 --- a/NEWS +++ b/NEWS @@ -32,6 +32,9 @@ PHP NEWS . Fixed bug #67413 (fileinfo: cdf_read_property_info insufficient boundary check). (Francisco Alonso, Jan Kaluza, Remi) +- Network: + . Fix potential segfault in dns_get_record(). (Sara) + - OPCache: . Fixed issue #183 (TMP_VAR is not only used once). (Dmitry, Laruence) From 5f2a30e11197fd1bc2394ee23cf80c7ea2ea9660 Mon Sep 17 00:00:00 2001 From: Sara Golemon Date: Wed, 11 Jun 2014 14:20:36 -0700 Subject: [PATCH 76/77] NEWS entry for "Fix potential segfault in dns_get_record()" --- NEWS | 3 +++ 1 file changed, 3 insertions(+) diff --git a/NEWS b/NEWS index 4c57eac2157..424dcf01bf8 100644 --- a/NEWS +++ b/NEWS @@ -33,6 +33,9 @@ PHP NEWS . Fixed bug #67413 (fileinfo: cdf_read_property_info insufficient boundary check). (Francisco Alonso, Jan Kaluza, Remi) +- Network: + . Fix potential segfault in dns_get_record(). (Sara) + - OpenSSL: . Fixed bug #65698 (certificates validity parsing does not work past 2050). (Paul Oehler) From 1ba338624b16e887576cc28ad30fabf47a16f8cf Mon Sep 17 00:00:00 2001 From: Sara Golemon Date: Wed, 11 Jun 2014 14:24:50 -0700 Subject: [PATCH 77/77] NEWS entry for Fix potential segfault in dns_get_record() --- NEWS | 3 +++ 1 file changed, 3 insertions(+) diff --git a/NEWS b/NEWS index add04c37c64..6e176a0438a 100644 --- a/NEWS +++ b/NEWS @@ -21,6 +21,9 @@ PHP NEWS . Fixed bug #67413 (fileinfo: cdf_read_property_info insufficient boundary check). (Francisco Alonso, Jan Kaluza, Remi) +- Network: + . Fix potential segfault in dns_get_record(). (Sara) + - OpenSSL: . Fixed bug #65698 (certificates validity parsing does not work past 2050). (Paul Oehler)