Issue #7080 has been updated by scnissen (Sam Nissen).


This fix does work, with on caveat:

When your instructions say to run
"gem install mysql --platform=ruby -- --with-mysql-dir=C:/mysql-connector-c-noinstall-6.0.2-win32"

I had to download mysql 2.8.1-x86-mingw32 and install from my local directory.
"gem install C:/full/path/to/mysql-2.8.1-x86-mingw32.gem --platform=ruby -- --with-mysql-dir=C:/mysql-connector-c-noinstall-6.0.2-win32"

Thank you!
----------------------------------------
Bug #7080: Segmentation Fault (sometimes) when running script
https://bugs.ruby-lang.org/issues/7080#change-29965

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/