Project

General

Profile

Actions

Bug #7080

closed

Segmentation Fault (sometimes) when running script

Added by scnissen (Sam Nissen) over 11 years ago. Updated over 11 years ago.

Status:
Third Party's Issue
Target version:
-
ruby -v:
ruby 1.9.3p194 (2012-04-20) [i386-mingw32]
Backport:
[ruby-core:47712]

Description

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)

Updated by luislavena (Luis Lavena) over 11 years ago

  • 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.

Updated by scnissen (Sam Nissen) over 11 years ago

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!

Updated by luislavena (Luis Lavena) over 11 years ago

  • Status changed from Feedback to Third Party's Issue

scnissen (Sam Nissen) wrote:

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"

Dunno why you had to donwload the gem manually, but mysql-2.8.1-x86-mingw32.gem actually contains the pre-compiled extension.

You need to download mysql-2.8.1.gem instead.

Closing this as 3rd party issue.

Thank you!

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0