From: "luislavena (Luis Lavena)" Date: 2012-09-28T01:16:08+09:00 Subject: [ruby-core:47713] [ruby-trunk - Bug #7080][Feedback] Segmentation Fault (sometimes) when running script 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/