Project

General

Profile

Bug #9568

Updated by nobu (Nobuyoshi Nakada) about 10 years ago

The following script will crash the ruby interpreter when ruby is run in debug mode.  
 This script is creating mock HTTP objects and creating the Response class out of the middle of the Savon gem and calling a private method in a very odd way because it is a reduced test case pulled from a much larger script.    The actual script use Savon in a much more conventional way: 

 -- crash_example.rb -- 

 ```ruby 
 require 'savon' 

 class SampleHTTPStuff 
   def error? 
     return true 
   end 
  
   def code 
     return 500 
   end 

   def body 
     return %q{<?xml version="1.0" encoding="UTF-8"?> 
 <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Body><SOAP-ENV:Fault><faultcode>SOAP-ENV:Server</faultcode><faultstring>Internal Error</faultstring></SOAP-ENV:Fault></SOAP-ENV:Body></SOAP-ENV:Envelope>} 
   end 
 end 

 http = SampleHTTPStuff.new() 
 response = Savon::Response.new(http, {}, {}) 

 begin 
   response.instance_eval { raise_soap_and_http_errors! } 
 rescue => e 
   puts "Ouch!" 
 end 
 ``` 
 

 --- end of crash_example.rb 

 For what it's worth, I'm using version 2.3.3 of the Savon gem. 

 If I run this using: 

 ```sh 
 ruby -d crash_example.rb 
 ``` 

 I get a segmentation fault error.    The problem appears to be the result of calling vm_throw with the "throwobj" having the value 0x8 

 If I run the script without the "-d" debug flag, the script runs without trouble. 

 I am running this on Mac OS X 10.9.1 on a MacBook Pro Retina 15" 

 using RVM I have tried the same code on 2.0, 2.1, and the 2.2dev head (as of 2/25/2014).    They all exhibit the same behavior 

 I've attached a transcript file of the code being run.

Back