Mantis - Quercus
Viewing Issue Advanced Details
1998 crash sometimes 09-10-07 04:12 09-12-07 12:25
hendler  
nam  
normal  
closed 3.1.2  
fixed  
none    
none 3.1.3  
0001998: json_encode crashes encoding array



The native Java type is a Hashtable [] where Hashtable is <String,String> .

print_r() works fine in the php env and yields

Array
(
    [0] => Array
        (
            [label] => national
            [property_label] => Scope
        )


java.lang.UnsupportedOperationException
    at com.caucho.quercus.env.JavaAdapter.keySet(JavaAdapter.java:442)
    at com.caucho.quercus.lib.json.JsonModule.encodeArray(JsonModule.java:103)
    at com.caucho.quercus.lib.json.JsonModule.jsonEncodeImpl(JsonModule.java:87)
    at com.caucho.quercus.lib.json.JsonModule.encodeArray(JsonModule.java:117)
    at com.caucho.quercus.lib.json.JsonModule.jsonEncodeImpl(JsonModule.java:87)
    at com.caucho.quercus.lib.json.JsonModule.json_encode(JsonModule.java:66)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at com.caucho.quercus.module.StaticFunction.invoke(StaticFunction.java:105)
    at com.caucho.quercus.env.JavaInvoker.call(JavaInvoker.java:613)
    at com.caucho.quercus.env.JavaInvoker.call(JavaInvoker.java:486)
    at com.caucho.quercus.env.JavaInvoker.call(JavaInvoker.java:472)
    at com.caucho.quercus.expr.FunctionExpr.evalImpl(FunctionExpr.java:182)
    at com.caucho.quercus.expr.FunctionExpr.eval(FunctionExpr.java:126)
    at com.caucho.quercus.env.JavaInvoker.evalArguments(JavaInvoker.java:416)
    at com.caucho.quercus.expr.FunctionExpr.evalImpl(FunctionExpr.java:170)
    at com.caucho.quercus.expr.FunctionExpr.eval(FunctionExpr.java:126)
    at com.caucho.quercus.program.ExprStatement.execute(ExprStatement.java:64)
    at com.caucho.quercus.program.BlockStatement.execute(BlockStatement.java:99)
    at com.caucho.quercus.program.IfStatement.execute(IfStatement.java:75)
    at com.caucho.quercus.program.BlockStatement.execute(BlockStatement.java:99)
    at com.caucho.quercus.program.QuercusProgram.execute(QuercusProgram.java:239)
    at com.caucho.quercus.page.InterpretedPage.execute(InterpretedPage.java:61)
    at com.caucho.quercus.page.QuercusPage.executeTop(QuercusPage.java:119)
    at com.caucho.quercus.servlet.ResinQuercusServlet.service(ResinQuercusServlet.java:123)
    at com.caucho.quercus.servlet.QuercusServlet.service(QuercusServlet.java:350)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:91)
    at com.caucho.server.dispatch.ServletFilterChain.doFilter(ServletFilterChain.java:103)
    at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:175)
    at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:240)
    at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:263)
    at com.caucho.server.port.TcpConnection.run(TcpConnection.java:481)
    at com.caucho.util.ThreadPool$Item.runTasks(ThreadPool.java:685)
    at com.caucho.util.ThreadPool$Item.run(ThreadPool.java:607)
    at java.lang.Thread.run(Thread.java:613)

Notes
(0002286)
hendler   
09-10-07 04:28   
By simply rehashing the array in the php env, I have a workaround, and no error occurs.

function prep_json($args){
      if(is_array($args)){
           $return_array = array();
        foreach($args as $key=>$value){
          $return_array[$key] = prep_json($value);
        }
        return $return_array;
      } else {
        return $args;
      }
 }
(0002290)
nam   
09-12-07 12:25   
php/0cf0
php/3cf0