From: "luislavena (Luis Lavena)" Date: 2012-11-07T06:55:34+09:00 Subject: [ruby-core:49000] [ruby-trunk - Bug #7080][Third Party's Issue] Segmentation Fault (sometimes) when running script Issue #7080 has been updated by luislavena (Luis Lavena). 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! ---------------------------------------- Bug #7080: Segmentation Fault (sometimes) when running script https://bugs.ruby-lang.org/issues/7080#change-32518 Author: scnissen (Sam Nissen) Status: Third Party's Issue 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/