Bug #7080
closedSegmentation Fault (sometimes) when running script
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 12 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 12 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 12 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!