On Fri, May 18, 2018 at 2:30 PM MK <marcin...@gmail.com> wrote: > Hi kcc, > > Thanks for your hint. It did get me further to some point. > > I successfully compiled Ruby, libxml2, libxst and Nokogiri with ASan, but > when I run it I still get: > > ./ruby ../script.rb > Traceback (most recent call last): > 7: from ../script.rb:1:in `<main>' > 6: from > /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:39:in > `require' > 5: from > /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:135:in > `rescue in require' > 4: from > /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:135:in > `require' > 3: from > /usr/local/lib/ruby/gems/2.5.0/gems/nokogiri-1.8.0/lib/nokogiri.rb:28:in > `<top (required)>' > 2: from > /usr/local/lib/ruby/gems/2.5.0/gems/nokogiri-1.8.0/lib/nokogiri.rb:32:in > `rescue in <top (required)>' > 1: from > /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in > `require' > /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in > `require': /usr/local/lib/libxml2.so.2: undefined symbol: __asan_init - > /usr/local/lib/ruby/gems/2.5.0/gems/nokogiri-1.8.0/lib/nokogiri/nokogiri.so > (LoadError) >
Please provide mode details: OS version glibc version compiler version (also, GCC or Clang?) exact build flags Also, what does the /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb do? Maybe it's just asking for too much? Maybe you should just relax the checks made by this tool. When you build libxml2.so.2 with asan, the library get a call to __asan_init (and other similar functions) and those functions are not present in the library -- only in the binary. > > Any ideas? > > Any body with Ruby experience and enabling ASan for Ruby Gems? > > Thanks, > > On Friday, May 18, 2018 at 10:16:00 PM UTC+2, kcc wrote: >> >> I have zero experience with Ruby, but if it is any similar to Python then >> my recommendation is to build Ruby with AddressSanitizer. >> If the build breaks with an LSAN report, just disable LSAN during the >> build (ASAN_OPTIONS=detect_leaks=0) >> >> --kcc >> >> >> >> On Fri, May 18, 2018 at 3:15 AM MK <marc...@gmail.com> wrote: >> >>> Hi all, >>> >>> I am trying to compile Address Sanitizer in nokogiri Ruby gem. >>> >>> Compiled libxml2 and libxslt with Address Sanitizer like this: >>> >>> ./configure CFLAGS="-fsanitize=address,undefined -Wformat >>> -Werror=format-security -Werror=array-bounds -g" >>> CXXFLAGS="-fsanitize=address,undefined -Wformat -Werror=format-security >>> -Werror=array-bounds -g" LDFLAGS="-fsanitize=address,undefined" CC="clang" >>> CXX="clang++" >>> >>> >>> And installed gem like this: >>> >>> sudo gem install nokogiri --version 1.8.0 -- --use-system-libraries >>> --with-xml2-include=/home/user/Downloads/libxml2-2.9.3/include/ >>> --with-xml2-lib=/usr/local/lib/ --with-cflags=\"-fsanitize=address\" >>> --with-ldflags=\"-fsanitize=address -lasan -lubsan\" >>> --with-xslt-include=/home/user/Downloads/libxslt-1.1.28/ >>> >>> >>> However when I run sample Ruby script using Nokogiri >>> >>> script.rb >>> #!/usr/bin/ruby >>> require 'nokogiri' >>> doc = File.open("sample.xml") { |f| Nokogiri::XML(f) } >>> >>> >>> I get this message: >>> >>> ./script.rb ==30473==ASan runtime does not come first in initial library >>> list; you should either link runtime to your application or manually >>> preload it with LD_PRELOAD. >>> >>> >>> When I do the preload: >>> >>> >>> LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libasan.so.2 ./script.rb >>> /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in >>> `require': >>> /var/lib/gems/2.3.0/gems/nokogiri-1.8.0/lib/nokogiri/nokogiri.so: undefined >>> symbol: __asan_init - >>> /var/lib/gems/2.3.0/gems/nokogiri-1.8.0/lib/nokogiri/nokogiri.so (LoadError) >>> from >>> /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require' >>> from >>> /var/lib/gems/2.3.0/gems/nokogiri-1.8.0/lib/nokogiri.rb:32:in `rescue in >>> <top (required)>' >>> from >>> /var/lib/gems/2.3.0/gems/nokogiri-1.8.0/lib/nokogiri.rb:28:in `<top >>> (required)>' >>> from >>> /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:127:in `require' >>> from >>> /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:127:in `rescue in >>> require' >>> from >>> /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:40:in `require' >>> from ./script.rb:2:in `<main>' >>> >>> ================================================================= >>> ==30485==ERROR: LeakSanitizer: detected memory leaks >>> >>> Direct leak of 319176 byte(s) in 4259 object(s) allocated from: >>> #0 0x7fce9ea4579a in __interceptor_calloc >>> (/usr/lib/x86_64-linux-gnu/libasan.so.2+0x9879a) >>> #1 0x7fce9e5b4383 in ruby_xcalloc >>> (/usr/lib/x86_64-linux-gnu/libruby-2.3.so.2.3+0x85383) >>> >>> . >>> . >>> . >>> Do I have to build Ruby also with Address Sanitizer? Which unfortunately >>> fails ... >>> >>> cd ruby-2.3.0 >>> ./configure --disable-shared CFLAGS="-fsanitize=address -ggdb" >>> CXXFLAGS="-fsanitize=address -ggdb" >>> make >>> Breaks upon compilation, showing Memory Leak :/ >>> >>> How do I correctly enable Address Sanitizer in Ruby, on Ruby Gem? >>> >>> Thanks, >>> >>> >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "address-sanitizer" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to address-saniti...@googlegroups.com. >>> For more options, visit https://groups.google.com/d/optout. >>> >> -- > You received this message because you are subscribed to the Google Groups > "address-sanitizer" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to address-sanitizer+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "address-sanitizer" group. To unsubscribe from this group and stop receiving emails from it, send an email to address-sanitizer+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.