Mantis - Quercus
Viewing Issue Advanced Details
3959 major always 03-22-10 14:40 03-24-10 17:24
rmann  
 
normal  
new 4.0.5  
open  
none    
none  
0003959: PHP parsing errors
In both resin 4.0.4 and 4.0.5 (and I think 4.0.0), there is a bug in the PHP rendering that either results in a StackOverflowError (4.0.0), or IllegalArgumentException. The stack trace is:

[03-22 14:18:06.284] {http://*:80-18} [^] WARNING (com.caucho.server.webapp.ErrorPageManager) java.lang.IllegalArgumentException
[03-22 14:18:06.284] {http://*:80-18} [^] at java.lang.Character.toChars(Character.java:2584)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.quercus.parser.QuercusParser.parseStringToken(QuercusParser.java:4757)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.quercus.parser.QuercusParser.parseStringToken(QuercusParser.java:4738)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.quercus.parser.QuercusParser.parseToken(QuercusParser.java:4113)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.quercus.parser.QuercusParser.parseUnary(QuercusParser.java:3072)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.quercus.parser.QuercusParser.parseAssignExpr(QuercusParser.java:2911)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.quercus.parser.QuercusParser.parseMulExpr(QuercusParser.java:2883)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.quercus.parser.QuercusParser.parseAddExpr(QuercusParser.java:2855)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.quercus.parser.QuercusParser.parseShiftExpr(QuercusParser.java:2830)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.quercus.parser.QuercusParser.parseCmpExpr(QuercusParser.java:2791)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.quercus.parser.QuercusParser.parseEqExpr(QuercusParser.java:2762)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.quercus.parser.QuercusParser.parseBitAndExpr(QuercusParser.java:2740)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.quercus.parser.QuercusParser.parseBitXorExpr(QuercusParser.java:2718)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.quercus.parser.QuercusParser.parseBitOrExpr(QuercusParser.java:2696)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.quercus.parser.QuercusParser.parseAndExpr(QuercusParser.java:2681)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.quercus.parser.QuercusParser.parseOrExpr(QuercusParser.java:2652)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.quercus.parser.QuercusParser.parseConditionalExpr(QuercusParser.java:2618)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.quercus.parser.QuercusParser.parseWeakAndExpr(QuercusParser.java:2596)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.quercus.parser.QuercusParser.parseWeakXorExpr(QuercusParser.java:2574)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.quercus.parser.QuercusParser.parseWeakOrExpr(QuercusParser.java:2552)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.quercus.parser.QuercusParser.parseExpr(QuercusParser.java:2543)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.quercus.parser.QuercusParser.parseIf(QuercusParser.java:1160)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.quercus.parser.QuercusParser.parseStatementList(QuercusParser.java:683)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.quercus.parser.QuercusParser.parseStatement(QuercusParser.java:817)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.quercus.parser.QuercusParser.parseIf(QuercusParser.java:1174)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.quercus.parser.QuercusParser.parseStatementList(QuercusParser.java:683)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.quercus.parser.QuercusParser.parseSwitch(QuercusParser.java:1305)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.quercus.parser.QuercusParser.parseStatementList(QuercusParser.java:687)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.quercus.parser.QuercusParser.parseTop(QuercusParser.java:577)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.quercus.parser.QuercusParser.parse(QuercusParser.java:478)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.quercus.parser.QuercusParser.parse(QuercusParser.java:331)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.quercus.page.PageManager.parse(PageManager.java:256)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.quercus.page.PageManager.parse(PageManager.java:213)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.quercus.QuercusContext.parse(QuercusContext.java:1109)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.quercus.servlet.QuercusServletImpl.service(QuercusServletImpl.java:139)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.quercus.servlet.QuercusServlet.service(QuercusServlet.java:610)
[03-22 14:18:06.284] {http://*:80-18} [^] at javax.servlet.http.HttpServlet.service(HttpServlet.java:96)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.server.dispatch.ServletFilterChain.doFilter(ServletFilterChain.java:109)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:183)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.server.webapp.AccessLogFilterChain.doFilter(AccessLogFilterChain.java:103)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:286)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:775)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.server.connection.TcpConnection.dispatchRequest(TcpConnection.java:600)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.server.connection.TcpConnection.handleRequestsImpl(TcpConnection.java:566)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.server.connection.TcpConnection.handleRequests(TcpConnection.java:519)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.server.connection.TcpConnection$AcceptTask.doTask(TcpConnection.java:1100)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.server.connection.TcpConnection$ConnectionReadTask.runThread(TcpConnection.java:1037)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.server.connection.TcpConnection$AcceptTask.run(TcpConnection.java:1068)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.util.ThreadPool$PoolThread.runTasks(ThreadPool.java:901)
[03-22 14:18:06.284] {http://*:80-18} [^] at com.caucho.util.ThreadPool$PoolThread.run(ThreadPool.java:866)


The PHP code that causes this is in WordPress 2.9.2, when attempting to save General Settings. The code that fails is wp_includes/plugin.php:336:

    do {
        foreach ( (array) current($wp_filter[$tag]) as $the_ )
            if ( !is_null($the_['function']) )
                call_user_func_array($the_['function'], array_slice($args, 0, (int) $the_['accepted_args']));

    } while ( next($wp_filter[$tag]) !== false );


It's actually the while clause that causes the failure, something in the !== comparison.

There are no notes attached to this issue.