Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Crash on syntax errors (2.1.0pre2 and later) #136

Closed
JasonBarnabe opened this issue Aug 7, 2019 · 13 comments
Closed

Crash on syntax errors (2.1.0pre2 and later) #136

JasonBarnabe opened this issue Aug 7, 2019 · 13 comments

Comments

@JasonBarnabe
Copy link

Ruby 2.3.8
sassc 2.1.0.pre3 (and 2.1.0pre2)
Ubuntu 18.04.2 LTS

I get a crash when feeding sassc invalid CSS. No crash when given good CSS.

[1] pry(main)> SassC::Engine.new("body { color: red;}").render
=> "body {\n  color: red; }\n"
[2] pry(main)> SassC::Engine.new("syntax error").render
(crash)

No crash on 2.0.1 or 2.1.0pre1.

@ahorek
Copy link

ahorek commented Aug 7, 2019

could you share the crash report?

it doesn't crash on my environment.

gem 'sassc', '2.1.0.pre3'
SassC::Engine.new("syntax error").render
Error: Invalid CSS after "syntax error": expected "{", was "" (SassC::SyntaxError)
        on line 1:8 of stdin
>> syntax error
   -------^

@JasonBarnabe
Copy link
Author

Seems like only when I run in my Rails app (console or server) I get the crash. Running from irb gives the proper result.

There is no information provided. The process just sends me back to the shell prompt.

$ bin/rails c
Running via Spring preloader in process 7728
Loading development environment (Rails 5.2.3)
[1] pry(main)> SassC::Engine.new("syntax error").render
$ 

@JasonBarnabe
Copy link
Author

Stepping through the code, I can get as far as the call to Native.compile_data_context(data_context) before it crashes.

@JasonBarnabe
Copy link
Author

It only happens when mysql2 (I'm using 0.5.2) is loaded.

Without mysql2:

irb(main):001:0> require 'sassc'
=> true
irb(main):002:0> SassC::Engine.new("syntax error").render
SassC::SyntaxError: Error: Invalid CSS after "syntax error": expected "{", was ""
        on line 1:8 of stdin
>> syntax error
   -------^

	from stdin:1
	from /home/jason/.rbenv/versions/2.3.8/lib/ruby/gems/2.3.0/gems/sassc-2.1.0.pre3-x86_64-linux/lib/sassc/engine.rb:49:in `render'
	from (irb):2
	from /home/jason/.rbenv/versions/2.3.8/bin/irb:11:in `<main>'

With mysql2:

irb(main):001:0> require 'mysql2'
=> true
irb(main):002:0> require 'sassc'
=> true
irb(main):003:0> SassC::Engine.new("syntax error").render
Aborted (core dumped)

@JasonBarnabe
Copy link
Author

$ gdb $HOME/.rbenv/versions/2.3.8/bin/ruby ./core 
GNU gdb (Ubuntu 8.1-0ubuntu3) 8.1.0.20180409-git
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /home/jason/.rbenv/versions/2.3.8/bin/ruby...done.

warning: core file may not match specified executable file.
[New LWP 14699]
[New LWP 14712]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `irb                                                                           '.
Program terminated with signal SIGABRT, Aborted.
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
51	../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
[Current thread is 1 (Thread 0x7fcacd1a2740 (LWP 14699))]
(gdb) bt
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
#1  0x00007fcacbf7c801 in __GI_abort () at abort.c:79
#2  0x00007fcac9191d78 in ?? () from /home/jason/.rbenv/versions/2.3.8/lib/ruby/gems/2.3.0/gems/sassc-2.1.0.pre3-x86_64-linux/lib/sassc/libsass.so
#3  0x00007fcac91943a6 in ?? () from /home/jason/.rbenv/versions/2.3.8/lib/ruby/gems/2.3.0/gems/sassc-2.1.0.pre3-x86_64-linux/lib/sassc/libsass.so
#4  0x00007fcac9a80613 in ?? () from /lib/x86_64-linux-gnu/libgcc_s.so.1
#5  0x00007fcac9a80b71 in _Unwind_RaiseException () from /lib/x86_64-linux-gnu/libgcc_s.so.1
#6  0x00007fcac9d1ad17 in __cxa_throw () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#7  0x00007fcac906087d in Sass::Parser::error(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, Sass::Position) ()
   from /home/jason/.rbenv/versions/2.3.8/lib/ruby/gems/2.3.0/gems/sassc-2.1.0.pre3-x86_64-linux/lib/sassc/libsass.so
#8  0x00007fcac9060962 in Sass::Parser::error(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) ()
   from /home/jason/.rbenv/versions/2.3.8/lib/ruby/gems/2.3.0/gems/sassc-2.1.0.pre3-x86_64-linux/lib/sassc/libsass.so
#9  0x00007fcac9060d3a in Sass::Parser::css_error(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) ()
   from /home/jason/.rbenv/versions/2.3.8/lib/ruby/gems/2.3.0/gems/sassc-2.1.0.pre3-x86_64-linux/lib/sassc/libsass.so
#10 0x00007fcac907d365 in Sass::Parser::parse_css_block(bool) () from /home/jason/.rbenv/versions/2.3.8/lib/ruby/gems/2.3.0/gems/sassc-2.1.0.pre3-x86_64-linux/lib/sassc/libsass.so
#11 0x00007fcac907dd10 in Sass::Parser::parse_block(bool) () from /home/jason/.rbenv/versions/2.3.8/lib/ruby/gems/2.3.0/gems/sassc-2.1.0.pre3-x86_64-linux/lib/sassc/libsass.so
#12 0x00007fcac90c7590 in Sass::Parser::parse_ruleset(Lookahead) () from /home/jason/.rbenv/versions/2.3.8/lib/ruby/gems/2.3.0/gems/sassc-2.1.0.pre3-x86_64-linux/lib/sassc/libsass.so
#13 0x00007fcac9080e2c in Sass::Parser::parse_block_node(bool) () from /home/jason/.rbenv/versions/2.3.8/lib/ruby/gems/2.3.0/gems/sassc-2.1.0.pre3-x86_64-linux/lib/sassc/libsass.so
#14 0x00007fcac90813df in Sass::Parser::parse_block_nodes(bool) () from /home/jason/.rbenv/versions/2.3.8/lib/ruby/gems/2.3.0/gems/sassc-2.1.0.pre3-x86_64-linux/lib/sassc/libsass.so
#15 0x00007fcac9081be6 in Sass::Parser::parse() () from /home/jason/.rbenv/versions/2.3.8/lib/ruby/gems/2.3.0/gems/sassc-2.1.0.pre3-x86_64-linux/lib/sassc/libsass.so
#16 0x00007fcac90aa93a in Sass::Context::register_resource(Sass::Include const&, Sass::Resource const&) ()
   from /home/jason/.rbenv/versions/2.3.8/lib/ruby/gems/2.3.0/gems/sassc-2.1.0.pre3-x86_64-linux/lib/sassc/libsass.so
#17 0x00007fcac90ab29e in Sass::Data_Context::parse() () from /home/jason/.rbenv/versions/2.3.8/lib/ruby/gems/2.3.0/gems/sassc-2.1.0.pre3-x86_64-linux/lib/sassc/libsass.so
#18 0x00007fcac9034e7e in sass_compiler_parse () from /home/jason/.rbenv/versions/2.3.8/lib/ruby/gems/2.3.0/gems/sassc-2.1.0.pre3-x86_64-linux/lib/sassc/libsass.so
#19 0x00007fcac903568f in sass_compile_data_context () from /home/jason/.rbenv/versions/2.3.8/lib/ruby/gems/2.3.0/gems/sassc-2.1.0.pre3-x86_64-linux/lib/sassc/libsass.so
#20 0x00007fcac9437dae in ffi_call_unix64 () from /usr/lib/x86_64-linux-gnu/libffi.so.6
#21 0x00007fcac943771f in ffi_call () from /usr/lib/x86_64-linux-gnu/libffi.so.6
#22 0x00007fcac964a2bb in rbffi_CallFunction (argc=<optimized out>, argv=<optimized out>, function=0x7fcac90355f0 <sass_compile_data_context>, fnInfo=0x55fbf71f8f80) at Call.c:416
#23 0x00007fcac964dae4 in custom_trampoline (argc=<optimized out>, argv=<optimized out>, self=<optimized out>, handle=<optimized out>) at MethodHandle.c:232
#24 0x000055fbf5724a54 in vm_call_cfunc_with_frame (ci=<optimized out>, cc=<optimized out>, calling=<optimized out>, reg_cfp=0x7fcacd1a0b50, th=0x55fbf69605a0) at vm_insnhelper.c:1642
#25 vm_call_cfunc (th=0x55fbf69605a0, reg_cfp=0x7fcacd1a0b50, calling=<optimized out>, ci=<optimized out>, cc=<optimized out>) at vm_insnhelper.c:1737
#26 0x000055fbf5731f93 in vm_call_method (th=0x55fbf69605a0, cfp=0x7fcacd1a0b50, calling=<optimized out>, ci=<optimized out>, cc=<optimized out>) at vm_insnhelper.c:2177
#27 0x000055fbf572a607 in vm_exec_core (th=th@entry=0x55fbf69605a0, initial=initial@entry=0) at insns.def:994
#28 0x000055fbf573057c in vm_exec (th=0x55fbf69605a0) at vm.c:1693
#29 0x000055fbf5732780 in eval_string_with_cref (self=self@entry=94540664647560, src=94540667417840, scope=94540664645440, cref_arg=cref_arg@entry=0x0, filename=<optimized out>, lineno=<optimized out>)
    at vm_eval.c:1365
#30 0x000055fbf5732d1f in eval_string (line=<optimized out>, file=<optimized out>, scope=<optimized out>, src=<optimized out>, self=94540664647560) at vm_eval.c:1404
#31 rb_f_eval (argc=4, argv=<optimized out>, self=94540664647560) at vm_eval.c:1443
#32 0x000055fbf5724a54 in vm_call_cfunc_with_frame (ci=<optimized out>, cc=<optimized out>, calling=<optimized out>, reg_cfp=0x7fcacd1a0c10, th=0x55fbf69605a0) at vm_insnhelper.c:1642
#33 vm_call_cfunc (th=0x55fbf69605a0, reg_cfp=0x7fcacd1a0c10, calling=<optimized out>, ci=<optimized out>, cc=<optimized out>) at vm_insnhelper.c:1737
#34 0x000055fbf572a607 in vm_exec_core (th=th@entry=0x55fbf69605a0, initial=initial@entry=0) at insns.def:994
#35 0x000055fbf573057c in vm_exec (th=th@entry=0x55fbf69605a0) at vm.c:1693
#36 0x000055fbf5738114 in invoke_block (block=<optimized out>, opt_pc=<optimized out>, type=<optimized out>, cref=0x0, self=<optimized out>, iseq=<optimized out>, th=<optimized out>) at vm.c:921
#37 invoke_block_from_c_0 (splattable=1, cref=0x0, blockptr=0x0, argv=0x0, argc=0, self=<optimized out>, block=<optimized out>, th=<optimized out>) at vm.c:973
#38 invoke_block_from_c_splattable (cref=0x0, blockptr=0x0, argv=0x0, argc=0, self=<optimized out>, block=<optimized out>, th=<optimized out>) at vm.c:990
#39 vm_yield (argc=0, argv=0x0, th=<optimized out>) at vm.c:1025
#40 rb_yield_0 (argv=0x0, argc=0) at vm_eval.c:1013
#41 loop_i () at vm_eval.c:1090
#42 0x000055fbf55d9ac0 in rb_rescue2 (b_proc=0x55fbf5737e10 <loop_i>, data1=0, r_proc=0x55fbf571fc10 <loop_stop>, data2=0) at eval.c:839
#43 0x000055fbf5724a54 in vm_call_cfunc_with_frame (ci=<optimized out>, cc=<optimized out>, calling=<optimized out>, reg_cfp=0x7fcacd1a0dd0, th=0x55fbf69605a0) at vm_insnhelper.c:1642
#44 vm_call_cfunc (th=0x55fbf69605a0, reg_cfp=0x7fcacd1a0dd0, calling=<optimized out>, ci=<optimized out>, cc=<optimized out>) at vm_insnhelper.c:1737
#45 0x000055fbf5731f93 in vm_call_method (th=0x55fbf69605a0, cfp=0x7fcacd1a0dd0, calling=<optimized out>, ci=<optimized out>, cc=<optimized out>) at vm_insnhelper.c:2177
#46 0x000055fbf572a6dc in vm_exec_core (th=th@entry=0x55fbf69605a0, initial=initial@entry=0) at insns.def:963
#47 0x000055fbf573057c in vm_exec (th=th@entry=0x55fbf69605a0) at vm.c:1693
#48 0x000055fbf57312dd in invoke_block (block=0x7fcacd1a0e70, opt_pc=<optimized out>, type=33, cref=0x0, self=94540664613560, iseq=0x55fbf69695b8, th=0x55fbf69605a0) at vm.c:921
#49 invoke_block_from_c_0 (splattable=<optimized out>, cref=<optimized out>, blockptr=<optimized out>, argv=<optimized out>, argc=<optimized out>, self=<optimized out>, block=<optimized out>, th=<optimized out>)
    at vm.c:973
#51 vm_yield (argc=0, argv=0x0, th=<optimized out>) at vm.c:1025
#52 rb_yield_0 (argv=0x0, argc=0) at vm_eval.c:1013
#53 loop_i () at vm_eval.c:1090
#54 0x000055fbf5738404 in invoke_block_from_c_splattable (cref=0x0, blockptr=0x0, argv=0x7ffde00db058, argc=1, self=<optimized out>, block=<optimized out>, th=<optimized out>) at vm.c:990
#55 vm_yield (argc=1, argv=0x7ffde00db058, th=<optimized out>) at vm.c:1025
#56 rb_yield_0 (argv=0x7ffde00db058, argc=1) at vm_eval.c:1013
#57 catch_i (tag=<optimized out>, data=data@entry=0) at vm_eval.c:1921
#58 0x000055fbf5726db7 in rb_catch_protect (t=<optimized out>, func=func@entry=0x55fbf57383b0 <catch_i>, data=data@entry=0, stateptr=stateptr@entry=0x7ffde00db1e4) at vm_eval.c:2021
#59 0x000055fbf5726f73 in rb_catch_obj (data=0, func=0x55fbf57383b0 <catch_i>, t=<optimized out>) at vm_eval.c:2000
#60 rb_f_catch (argc=<optimized out>, argv=<optimized out>) at vm_eval.c:1986
#61 0x000055fbf5724a54 in vm_call_cfunc_with_frame (ci=<optimized out>, cc=<optimized out>, calling=<optimized out>, reg_cfp=0x7fcacd1a0e50, th=0x55fbf69605a0) at vm_insnhelper.c:1642
#62 vm_call_cfunc (th=0x55fbf69605a0, reg_cfp=0x7fcacd1a0e50, calling=<optimized out>, ci=<optimized out>, cc=<optimized out>) at vm_insnhelper.c:1737
#63 0x000055fbf5731f93 in vm_call_method (th=0x55fbf69605a0, cfp=0x7fcacd1a0e50, calling=<optimized out>, ci=<optimized out>, cc=<optimized out>) at vm_insnhelper.c:2177
#64 0x000055fbf572a6dc in vm_exec_core (th=th@entry=0x55fbf69605a0, initial=initial@entry=0) at insns.def:963
#65 0x000055fbf573057c in vm_exec (th=th@entry=0x55fbf69605a0) at vm.c:1693
#66 0x000055fbf57312dd in invoke_block (block=0x7fcacd1a0f70, opt_pc=<optimized out>, type=33, cref=0x0, self=94540665449400, iseq=0x55fbf6ce00e8, th=0x55fbf69605a0) at vm.c:921
#67 invoke_block_from_c_0 (splattable=<optimized out>, cref=<optimized out>, blockptr=<optimized out>, argv=<optimized out>, argc=<optimized out>, self=<optimized out>, block=<optimized out>, th=<optimized out>)
    at vm.c:973
#68 invoke_block_from_c_splattable (cref=<optimized out>, blockptr=<optimized out>, argv=<optimized out>, argc=<optimized out>, self=<optimized out>, block=<optimized out>, th=<optimized out>) at vm.c:990
#69 vm_yield (argc=0, argv=0x0, th=<optimized out>) at vm.c:1025
#70 rb_yield_0 (argv=0x0, argc=0) at vm_eval.c:1013
#71 loop_i () at vm_eval.c:1090
#72 0x000055fbf5738404 in invoke_block_from_c_splattable (cref=0x0, blockptr=0x0, argv=0x7ffde00db928, argc=1, self=<optimized out>, block=<optimized out>, th=<optimized out>) at vm.c:990
#73 vm_yield (argc=1, argv=0x7ffde00db928, th=<optimized out>) at vm.c:1025
#74 rb_yield_0 (argv=0x7ffde00db928, argc=1) at vm_eval.c:1013
#75 catch_i (tag=<optimized out>, data=data@entry=0) at vm_eval.c:1921
#76 0x000055fbf5726db7 in rb_catch_protect (t=<optimized out>, func=func@entry=0x55fbf57383b0 <catch_i>, data=data@entry=0, stateptr=stateptr@entry=0x7ffde00dbab4) at vm_eval.c:2021
#77 0x000055fbf5726f73 in rb_catch_obj (data=0, func=0x55fbf57383b0 <catch_i>, t=<optimized out>) at vm_eval.c:2000
#78 rb_f_catch (argc=<optimized out>, argv=<optimized out>) at vm_eval.c:1986
#79 0x000055fbf5724a54 in vm_call_cfunc_with_frame (ci=<optimized out>, cc=<optimized out>, calling=<optimized out>, reg_cfp=0x7fcacd1a0f50, th=0x55fbf69605a0) at vm_insnhelper.c:1642
#80 vm_call_cfunc (th=0x55fbf69605a0, reg_cfp=0x7fcacd1a0f50, calling=<optimized out>, ci=<optimized out>, cc=<optimized out>) at vm_insnhelper.c:1737
#81 0x000055fbf5731f93 in vm_call_method (th=0x55fbf69605a0, cfp=0x7fcacd1a0f50, calling=<optimized out>, ci=<optimized out>, cc=<optimized out>) at vm_insnhelper.c:2177
#82 0x000055fbf572a6dc in vm_exec_core (th=th@entry=0x55fbf69605a0, initial=initial@entry=0) at insns.def:963
#83 0x000055fbf573057c in vm_exec (th=0x55fbf69605a0) at vm.c:1693
#84 0x000055fbf5739726 in rb_iseq_eval_main (iseq=iseq@entry=0x55fbf6d4e980) at vm.c:1936
#85 0x000055fbf55d5767 in ruby_exec_internal (n=0x55fbf6d4e980) at eval.c:245
#86 0x000055fbf55d90af in ruby_exec_node (n=<optimized out>) at eval.c:310
#87 ruby_run_node (n=<optimized out>) at eval.c:302
#88 0x000055fbf55d535b in main (argc=<optimized out>, argv=<optimized out>) at main.c:36

@bolandrm
Copy link
Member

@glebm any thoughts on this?

@glebm
Copy link
Contributor

glebm commented Aug 19, 2019

I am able to reproduce this. Interestingly, this only happens if mysql2 is required before sassc.

Moving gem 'sassc' above gem 'mysql2' in the Gemfile should work around the problem for now.

@glebm
Copy link
Contributor

glebm commented Aug 19, 2019

More detailed backtrace (obtained by removing strip -x from extconf.rb):

__GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
50	../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) bt
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
#1  0x00007ffff7a7c535 in __GI_abort () at abort.c:79
#2  0x00007ffff47b6068 in _Unwind_SetGR () from /home/glebm/.rvm/gems/ruby-2.6.3/gems/sassc-2.1.0-x86_64-linux/lib/sassc/libsass.so
#3  0x00007ffff47b8696 in __gcc_personality_v0 ()
   from /home/glebm/.rvm/gems/ruby-2.6.3/gems/sassc-2.1.0-x86_64-linux/lib/sassc/libsass.so
#4  0x00007ffff4b107b3 in ?? () from /lib/x86_64-linux-gnu/libgcc_s.so.1
#5  0x00007ffff4b10cf1 in _Unwind_RaiseException () from /lib/x86_64-linux-gnu/libgcc_s.so.1
#6  0x00007ffff4bbf528 in __cxa_throw () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#7  0x00007ffff464ab7d in Sass::Parser::error(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, Sass::Position) () from /home/glebm/.rvm/gems/ruby-2.6.3/gems/sassc-2.1.0-x86_64-linux/lib/sassc/libsass.so

Looks like it never gets to the catch clause for the thrown exception, aborting instead.

@glebm
Copy link
Contributor

glebm commented Aug 19, 2019

Works just fine when compiling from source. Only an issue with the pre-compiled gem.

@glebm
Copy link
Contributor

glebm commented Aug 19, 2019

Our pre-compilation container uses GCC 5. mysql2 is compiled from source using local GCC 8.

Perhaps there is some incompatible change between the two versions.

@glebm
Copy link
Contributor

glebm commented Aug 19, 2019

I think I may have a fix for this on the libsass side. Though I don't really understand the root cause all that well. Nevermind, this does not fix the issue (I was using the non-precompiled version accidentally).

glebm added a commit to glebm/libsass that referenced this issue Aug 19, 2019
Inline exception constructor/destructor implementation seems to be a C++ pitfall,
leading to ODR violations and being unable to catch exceptions in
certain situations.

This is a fix for a bug originally reported in:
sass/sassc-ruby#136
glebm added a commit to glebm/libsass that referenced this issue Aug 19, 2019
Inline exception constructor/destructor implementation seems to be a C++ pitfall,
leading to ODR violations and being unable to catch exceptions in
certain situations (https://stackoverflow.com/a/3481427).

This is a fix for a bug originally reported in:
sass/sassc-ruby#136
@glebm
Copy link
Contributor

glebm commented Aug 20, 2019

Disabling lto fixes the issue, maybe because of this GCC bug:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53730

While upgrading binutils in the rake-compiler-dock's Ubuntu 16 container to 2.31+ might be an alternative way to fix the issue, newer binutils packages depend on libc6 >= 2.27, so this would prevent the precompiled package from working on older Linuxes (libc cannot be linked statically).

Disabling lto increases the precompiled gem size (1.6M -> 8.6M).

I'll send a PR disabling LTO for precompiled gems.

glebm added a commit to glebm/sassc-ruby that referenced this issue Aug 20, 2019
Disabling `lto` increases the precompiled gem size (1.6M -> 8.6M).

Fixes sass#136
@bolandrm
Copy link
Member

2.2.0 release with no precompiled linux gem.

@bolandrm bolandrm closed this as completed Sep 3, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants