A sure way to crash JRuby with Nokogiri, on Windows

Greetings,

I’m sending this to Ruby-talk because I’m really not sure if the problem
is in JRuby, Nokogiri or FFI.

So, Using JRuby 1.4.0 (standard or complete) and Nokogiri-java 1.4.1, on
Windows, try this:

require “rubygems”
require “nokogiri”
xml = %Q(<?xml version="1.0" encoding="UTF-8"?>\n\n)
p Nokogiri::XML::Document.parse(xml)

It works.

Now try this:

require “rubygems”
require “nokogiri”
th = Thread.new do
xml = %Q(<?xml version="1.0" encoding="UTF-8"?>\n\n)
p Nokogiri::XML::Document.parse(xml)
end
th.join

And see it crash with an EXCEPTION_ACCESS_VIOLATION. Here’s the top of
the stack:

Stack: [0x03260000,0x032b0000], sp=0x032aedb4, free space=315k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code,
C=native code)
C [ntdll.dll+0x1b21a]
C [ntdll.dll+0x1046]
j com.kenai.jffi.Foreign.invokeVrI(J)I+0
j com.kenai.jffi.Invoker.invokeVrI(Lcom/kenai/jffi/Function;)I+8
j
org.jruby.ext.ffi.jffi.FastIntMethodZeroArg.call(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/RubyModule;Ljava/lang/String;)Lorg/jruby/runtime/builtin/IRubyObject;+12
J
org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/RubyClass;Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/runtime/builtin/IRubyObject;
J
org.jruby.runtime.callsite.CachingCallSite.call(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/runtime/builtin/IRubyObject;
J
org.jruby.ast.CallNoArgNode.interpret(Lorg/jruby/Ruby;Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/Block;)Lorg/jruby/runtime/builtin/IRubyObject;
J
org.jruby.ast.NewlineNode.interpret(Lorg/jruby/Ruby;Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/Block;)Lorg/jruby/runtime/builtin/IRubyObject;
J
org.jruby.ast.BlockNode.interpret(Lorg/jruby/Ruby;Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/Block;)Lorg/jruby/runtime/builtin/IRubyObject;

This works just fine on OS X. Anyone has any idea what the problem is?

Have you tried 1.5.0 builds? There have been a lot of fixes since 1.4.
ci.jruby.org/snapshots

(sorry for brevity sent from ps3)

  • Charlie

I’ll take a look. I’ve commented on the JRuby ticket as well.

On Sun, Mar 28, 2010 at 3:42 AM, Charles Oliver N.

On Sat, Mar 27, 2010 at 1:15 PM, Luc H. [email protected] wrote:

Greetings,

I’m sending this to Ruby-talk because I’m really not sure if the problem is
in JRuby, Nokogiri or FFI.

So, Using JRuby 1.4.0 (standard or complete) and Nokogiri-java 1.4.1, on
Windows, try this:

This works just fine on OS X. Anyone has any idea what the problem is?

This appears to be an issue with the libxml2 DLL shipped with Nokogiri’s
JRuby gem.

You can follow along at:
http://github.com/tenderlove/nokogiri/issues/#issue/248