Issue #7080 has been updated by luislavena (Luis Lavena).

Status changed from Open to Feedback
Assignee set to luislavena (Luis Lavena)

Seems you're using the binary version of mysql gem, which requires an *exact* version of libmysql.dll in your system.

Please read this:

http://blog.mmediasys.com/2011/07/07/installing-mysql-on-windows-7-x64-and-using-ruby-with-it/

Uninstall and compile the gem using the MySQL Connector/C dll and try again.

Let us know if that works.
----------------------------------------
Bug #7080: Segmentation Fault (sometimes) when running script
https://bugs.ruby-lang.org/issues/7080#change-29764

Author: scnissen (Sam Nissen)
Status: Feedback
Priority: Normal
Assignee: luislavena (Luis Lavena)
Category: 
Target version: 
ruby -v: ruby 1.9.3p194 (2012-04-20) [i386-mingw32]


When I run the Ruby script in cmd line in Windows 7, most of the time I get this 'Segmentation fault'. Maybe one time in 20 a fault is not returned. Additionally one time I received more detailed Segmentation fault details, which I've pasted at the bottom. I wish I had a more sophisticated understanding of what is going on, but unfortunately I'm fairly new at this... 


BEGIN COMMAND LINE (typical response)
C:\Users\first.last\rubystuff>ruby QA_test.rb
Not an admin.
Logged in!
QA_test.rb: [BUG] Segmentation fault
ruby 1.9.3p194 (2012-04-20) [i386-mingw32]

-- Control frame information -----------------------------------------------
c:0001 p:0000 s:0002 b:0002 l:0012ac d:0012ac TOP


-- C level backtrace information -------------------------------------------
END COMMAND LINE (typical response)


BEGIN CODE 
require 'rubygems'
require 'mysql'

class Login

	def initialize()
		@no_html = "<>/"
		@check_for_html = /[#{@no_html.gsub(/./){|char| "\\#{char}"}}]/
		@min_length = 1
		@max_length = 35
	end
	
	def check_length_and_html(string_to_check, minlength, maxlength, varname)
		if string_to_check.length() > maxlength
			print "Sorry that #{varname} is longer than #{maxlength} characters. "
			return false
		elsif string_to_check.length() < minlength
			print "Sorry that #{varname} is shorter than #{minlength} characters. "
			return false
		elsif string_to_check =~ @check_for_html
			print "Sorry that #{varname} contains an invalid special character (#{@no_html}). "
			return false
		else
			return true
			#return string_to_check
		end
	end # check_length_and_html(var)
	
	def create_sesssion(username, password)
		username = username.to_s
		password = password.to_s
		
		if check_length_and_html(username, @min_length, @max_length, "username") and check_length_and_html(password, @min_length, @max_length, "password")
			is_admin(username, password)
		else
			return false
		end
	end # create_sesssion()
	
	def is_admin(username, password)
		begin
			mysql_connection = Mysql.new 'localhost', 'user12', '34klq*', 'mydb'
			is_admin = mysql_connection.query("SELECT * FROM test_users3 WHERE userName = '#{username}' AND password = '#{password}' AND is_admin = TRUE")
			is_admin_arr = Array.new
			
			is_admin.each do |row|
				is_admin_arr.unshift(row)
			end
			
			if is_admin_arr.length > 0
				puts "is_admin_arr is #{is_admin_arr}"
				puts "Logged in as admin."
				return true
			else
				puts "Not an admin."
				can_login(username, password)
			end
		end # sql begin
	end # is_admin()
	
	def can_login(username, password)
		begin
			mysql_connection = Mysql.new 'localhost', 'user12', '34klq*', 'mydb'
			matching_username_and_password = mysql_connection.query("SELECT * FROM test_users3 WHERE userName = '#{username}' AND password = '#{password}' AND is_admin = 'TRUE'")
			matching_username_and_password_arr = Array.new
			
			matching_username_and_password.each do |row|
				matching_username_and_password_arr.unshift(row)
			end
			
			if matching_username_and_password_arr.length > 0
				puts "Logged in!"
				return true
			else
				puts "Nice try."
				return false
			end
			
			matching_username_and_password = mysql_connection.query("SELECT * FROM test_users3 WHERE userName = '#{username}' AND password = '#{password}'")
			matching_username_and_password_arr = Array.new
			
			matching_username_and_password.each do |row|
				matching_username_and_password_arr.unshift(row)
			end
			
			if matching_username_and_password_arr.length > 0
				puts "Logged in!"
				return true
			else
				puts "Nice try."
				return false
			end
			
			rescue Mysql::Error => e
				puts e.errno
				puts e.error
				
			ensure
				mysql_connection.close if mysql_connection
		end # sql begin
	end # can_login()
end # class Login

my_session = Login.new()
my_session.create_sesssion("foobar","barfoo123")
END CODE


BEGIN MYSQL DATA STRUCTURE
#	Name		Type		Collation	Attributes	Null	Default	Extra
1	user_id	int(11)			No				None	
2	firstName	varchar(35)	latin1_swedish_ci		Yes	NULL	
3	lastName	varchar(35)	latin1_swedish_ci		Yes	NULL	
4	userName	varchar(35)	latin1_swedish_ci		Yes	NULL	
5	password	varchar(35)	latin1_swedish_ci		Yes	NULL	
6	signUpDate	date						Yes	NULL	
7	is_admin	tinyint(1)					No	0	

END MYSQL DATA STRUCTURE


BEGIN MYSQL TABLE DATA
user_id	firstName	lastName	userName	password	signUpDate	is_admin
1234	Foo		Bar		foobar		barfoo123	41178		0
BEGIN MYSQL TABLE DATA


BEGIN COMMAND LINE (one-time response)
C:\Users\first.last\rubystuff>ruby QA_test.rb
Not an admin.
Logged in!
QA_test.rb: [BUG] Segmentation fault
ruby 1.9.3p194 (2012-04-20) [i386-mingw32]

-- Control frame information -----------------------------------------------
c:0001 p:0000 s:0002 b:0002 l:00110c d:00110c TOP


-- C level backtrace information -------------------------------------------
C:\windows\SysWOW64\ntdll.dll(NtWaitForSingleObject+0x15) [0x7709f861]
C:\windows\syswow64\kernel32.dll(WaitForSingleObjectEx+0x43) [0x754e1184]
C:\windows\syswow64\kernel32.dll(WaitForSingleObject+0x12) [0x754e1138]
C:\Ruby\bin\msvcrt-ruby191.dll(rb_vm_bugreport+0xf9) [0x62e5c589]
C:\Ruby\bin\msvcrt-ruby191.dll(rb_name_err_mesg_new+0x17a) [0x62d3a7e2]
C:\Ruby\bin\msvcrt-ruby191.dll(rb_bug+0x2f) [0x62d3b4fb]
C:\Ruby\bin\msvcrt-ruby191.dll(rb_check_safe_str+0x1a4) [0x62dee168]
 [0x004011e6]
C:\windows\syswow64\kernel32.dll(CheckForReadOnlyResource+0x3bf) [0x75509d77]
C:\windows\SysWOW64\ntdll.dll(RtlKnownExceptionFilter+0xb7) [0x770f0df7]

-- Other runtime information -----------------------------------------------

* Loaded script: QA_test.rb

* Loaded features:

    0 enumerator.so
    1 C:/Ruby/lib/ruby/1.9.1/i386-mingw32/enc/encdb.so
    2 C:/Ruby/lib/ruby/1.9.1/i386-mingw32/enc/iso_8859_1.so
    3 C:/Ruby/lib/ruby/1.9.1/i386-mingw32/enc/trans/transdb.so
    4 C:/Ruby/lib/ruby/site_ruby/1.9.1/rubygems/defaults.rb
    5 C:/Ruby/lib/ruby/1.9.1/i386-mingw32/rbconfig.rb
    6 C:/Ruby/lib/ruby/site_ruby/1.9.1/rubygems/deprecate.rb
    7 C:/Ruby/lib/ruby/site_ruby/1.9.1/rubygems/exceptions.rb
    8 C:/Ruby/lib/ruby/site_ruby/1.9.1/rubygems/defaults/operating_system.rb
    9 C:/Ruby/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb
   10 C:/Ruby/lib/ruby/site_ruby/1.9.1/rubygems.rb
   11 C:/Ruby/lib/ruby/site_ruby/1.9.1/rubygems/version.rb
   12 C:/Ruby/lib/ruby/site_ruby/1.9.1/rubygems/requirement.rb
   13 C:/Ruby/lib/ruby/site_ruby/1.9.1/rubygems/platform.rb
   14 C:/Ruby/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb
   15 C:/Ruby/lib/ruby/site_ruby/1.9.1/rubygems/path_support.rb
   16 C:/Ruby/lib/ruby/1.9.1/i386-mingw32/enc/utf_16le.so
   17 C:/Ruby/lib/ruby/1.9.1/i386-mingw32/enc/trans/utf_16_32.so
   18 C:/Ruby/lib/ruby/1.9.1/i386-mingw32/enc/trans/single_byte.so
   19 C:/Ruby/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb
   20 C:/Ruby/lib/ruby/gems/1.9.1/gems/mysql-2.8.1-x86-mingw32/lib/1.9/mysql_api
.so
   21 C:/Ruby/lib/ruby/gems/1.9.1/gems/mysql-2.8.1-x86-mingw32/lib/mysql.rb

[NOTE]
You may have encountered a bug in the Ruby interpreter or extension libraries.
Bug reports are welcome.
For details: http://www.ruby-lang.org/bugreport.html


This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
END COMMAND LINE (one-time response)


-- 
http://bugs.ruby-lang.org/