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

Segfault on simple query (when GC runs ?) #226

Closed
kuahyeow opened this issue Aug 30, 2021 · 8 comments
Closed

Segfault on simple query (when GC runs ?) #226

kuahyeow opened this issue Aug 30, 2021 · 8 comments

Comments

@kuahyeow
Copy link

kuahyeow commented Aug 30, 2021

We at GitLab are using PgQuery to parse sql queries (to extract table name information) in our CI suite. Frequently, this segfaults. Please see https://gitlab.com/gitlab-org/gitlab/-/issues/339475 for full details

https://gitlab.com/gitlab-org/gitlab/blob/40f9110d0803f84d639889c14cf619a126581359/spec/support/database/prevent_cross_joins.rb#L33 is how we use it.

We suspect that garbage collection during our CI runs might be causing these segfaults. I managed to reproduce a segfault with this small script below.

# frozen_string_literal: true

require 'pg_query'

sql = <<~EOF
SELECT 1 AS one FROM "namespaces" WHERE "namespaces"."type" = 'Group' AND "namespaces"."visibility_level" = 20 AND "namespaces"."parent_id" = 1417 AND "namespaces"."path" = 'project7.wiki' LIMIT 1 /*application:test,correlation_id:1e864cdfdce3ba16300ac0764538d9de*/
EOF

GC.stress = true

tables = PgQuery.parse(sql).tables

It seems any query with three or more AND in the WHERE can cause this segfault under GC.stress conditions.

/cc @stanhu

Segfault:

tkgl:gitlab tkuah$ ruby specific.rb 
namespaces
tkgl:gitlab tkuah$ ruby specific.rb 
/Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/pg_query-2.1.0/lib/pg_query/parse.rb:238: [BUG] Segmentation fault at 0x0000000000000010
ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-darwin20]

-- Crash Report log information --------------------------------------------
   See Crash Report log file under the one of following:                    
     * ~/Library/Logs/DiagnosticReports                                     
     * /Library/Logs/DiagnosticReports                                      
   for more details.                                                        
Don't forget to include the above Crash Report log file in bug reports.     

-- Control frame information -----------------------------------------------
c:0007 p:1397 s:0040 e:000038 BLOCK  /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/pg_query-2.1.0/lib/pg_query/parse.rb:238 [FINISH]
c:0006 p:---- s:0027 e:000026 CFUNC  :loop
c:0005 p:0048 s:0023 e:000022 METHOD /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/pg_query-2.1.0/lib/pg_query/parse.rb:102
c:0004 p:0010 s:0016 e:000015 METHOD /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/pg_query-2.1.0/lib/pg_query/parse.rb:81
c:0003 p:0003 s:0012 e:000011 METHOD /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/pg_query-2.1.0/lib/pg_query/parse.rb:40
c:0002 p:0043 s:0008 E:002450 EVAL   specific.rb:15 [FINISH]
c:0001 p:0000 s:0003 E:001070 (none) [FINISH]

-- Ruby level backtrace information ----------------------------------------
specific.rb:15:in `<main>'
/Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/pg_query-2.1.0/lib/pg_query/parse.rb:40:in `tables'
/Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/pg_query-2.1.0/lib/pg_query/parse.rb:81:in `tables_with_details'
/Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/pg_query-2.1.0/lib/pg_query/parse.rb:102:in `load_objects!'
/Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/pg_query-2.1.0/lib/pg_query/parse.rb:102:in `loop'
/Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/pg_query-2.1.0/lib/pg_query/parse.rb:238:in `block in load_objects!'

-- Machine register context ------------------------------------------------
 rax: 0x0000000000000000 rbx: 0x00007fd40381f9c8 rcx: 0x00000000000026e8
 rdx: 0x00007ffee1812dd8 rdi: 0x00007fd40381f9c8 rsi: 0x0000000000000000
 rbp: 0x00007ffee1812dc0 rsp: 0x00007ffee1812d80  r8: 0x00007fd4030a6b98
  r9: 0x00007fd402d04b90 r10: 0x00007fd40411ae78 r11: 0x00007fd4030a6b98
 r12: 0x00007ffee1812d88 r13: 0x000000000000c8f1 r14: 0x00007fd40381f9c8
 r15: 0x00000ffa8070f7c8 rip: 0x000000010e648c44 rfl: 0x0000000000010202

-- C level backtrace information -------------------------------------------
/Users/tkuah/.rbenv/versions/2.7.2/lib/libruby.2.7.dylib(rb_vm_bugreport+0x96) [0x10e66a196]
/Users/tkuah/.rbenv/versions/2.7.2/lib/libruby.2.7.dylib(rb_bug_for_fatal_signal+0x1d0) [0x10e4a2f10]
/Users/tkuah/.rbenv/versions/2.7.2/lib/libruby.2.7.dylib(sigsegv+0x5b) [0x10e5cd98b]
/usr/lib/system/libsystem_platform.dylib(_sigtramp+0x1d) [0x7fff203c2d7d]
/Users/tkuah/.rbenv/versions/2.7.2/lib/libruby.2.7.dylib(method_entry_get+0x94) [0x10e648c44]
/Users/tkuah/.rbenv/versions/2.7.2/lib/libruby.2.7.dylib(rb_callable_method_entry+0x29) [0x10e63dd29]
/Users/tkuah/.rbenv/versions/2.7.2/lib/libruby.2.7.dylib(vm_search_method+0x14f) [0x10e64ef3f]
/Users/tkuah/.rbenv/versions/2.7.2/lib/libruby.2.7.dylib(vm_exec_core+0x38cf) [0x10e641baf]
/Users/tkuah/.rbenv/versions/2.7.2/lib/libruby.2.7.dylib(rb_vm_exec+0xa93) [0x10e6566e3]
/Users/tkuah/.rbenv/versions/2.7.2/lib/libruby.2.7.dylib(loop_i+0x47) [0x10e6660e7]
/Users/tkuah/.rbenv/versions/2.7.2/lib/libruby.2.7.dylib(rb_vrescue2+0x114) [0x10e4aece4]
/Users/tkuah/.rbenv/versions/2.7.2/lib/libruby.2.7.dylib(rb_rescue2+0x7b) [0x10e4aebab]
/Users/tkuah/.rbenv/versions/2.7.2/lib/libruby.2.7.dylib(vm_call_cfunc+0x16c) [0x10e65b85c]
/Users/tkuah/.rbenv/versions/2.7.2/lib/libruby.2.7.dylib(vm_exec_core+0x3770) [0x10e641a50]
/Users/tkuah/.rbenv/versions/2.7.2/lib/libruby.2.7.dylib(rb_vm_exec+0xa93) [0x10e6566e3]
/Users/tkuah/.rbenv/versions/2.7.2/lib/libruby.2.7.dylib(rb_ec_exec_node+0xb6) [0x10e4ae2b6]
/Users/tkuah/.rbenv/versions/2.7.2/lib/libruby.2.7.dylib(ruby_run_node+0x55) [0x10e4ae1b5]
/Users/tkuah/.rbenv/versions/2.7.2/bin/ruby(main+0x5d) [0x10e3eff0d]

-- Other runtime information -----------------------------------------------

* Loaded script: specific.rb

* Loaded features:

    0 enumerator.so
    1 thread.rb
    2 rational.so
    3 complex.so
    4 ruby2_keywords.rb
    5 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
    6 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/trans/transdb.bundle
    7 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/rbconfig.rb
    8 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/rubygems/compatibility.rb
    9 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/rubygems/defaults.rb
   10 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/rubygems/deprecate.rb
   11 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/rubygems/errors.rb
   12 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/rubygems/version.rb
   13 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/rubygems/requirement.rb
   14 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/rubygems/platform.rb
   15 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/rubygems/basic_specification.rb
   16 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/rubygems/stub_specification.rb
   17 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/rubygems/util.rb
   18 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/rubygems/text.rb
   19 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/rubygems/user_interaction.rb
   20 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/rubygems/specification_policy.rb
   21 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/rubygems/util/list.rb
   22 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/rubygems/specification.rb
   23 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/rubygems/exceptions.rb
   24 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/rubygems/bundler_version_finder.rb
   25 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/rubygems/dependency.rb
   26 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/rubygems/core_ext/kernel_gem.rb
   27 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/monitor.bundle
   28 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/monitor.rb
   29 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb
   30 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/rubygems/core_ext/kernel_warn.rb
   31 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/rubygems.rb
   32 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/rubygems/path_support.rb
   33 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/did_you_mean/version.rb
   34 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/did_you_mean/core_ext/name_error.rb
   35 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/did_you_mean/levenshtein.rb
   36 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/did_you_mean/jaro_winkler.rb
   37 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/did_you_mean/spell_checker.rb
   38 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/did_you_mean/spell_checkers/name_error_checkers/class_name_checker.rb
   39 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/did_you_mean/spell_checkers/name_error_checkers/variable_name_checker.rb
   40 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/did_you_mean/spell_checkers/name_error_checkers.rb
   41 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/did_you_mean/spell_checkers/method_name_checker.rb
   42 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/did_you_mean/spell_checkers/key_error_checker.rb
   43 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/did_you_mean/spell_checkers/null_checker.rb
   44 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/did_you_mean/formatters/plain_formatter.rb
   45 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/did_you_mean/tree_spell_checker.rb
   46 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/did_you_mean.rb
   47 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/pg_query-2.1.0/lib/pg_query/version.rb
   48 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/pg_query-2.1.0/lib/pg_query/parse_error.rb
   49 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/google-protobuf-3.17.3-universal-darwin/lib/google/protobuf/message_exts.rb
   50 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/google-protobuf-3.17.3-universal-darwin/lib/google/2.7/protobuf_c.bundle
   51 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/forwardable/impl.rb
   52 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/forwardable/version.rb
   53 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/forwardable.rb
   54 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/google-protobuf-3.17.3-universal-darwin/lib/google/protobuf/repeated_field.rb
   55 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/google-protobuf-3.17.3-universal-darwin/lib/google/protobuf.rb
   56 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/pg_query-2.1.0/lib/pg_query/pg_query_pb.rb
   57 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/pg_query-2.1.0/lib/pg_query/node.rb
   58 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/pg_query-2.1.0/lib/pg_query/pg_query.bundle
   59 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/pg_query-2.1.0/lib/pg_query/constants.rb
   60 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/pg_query-2.1.0/lib/pg_query/parse.rb
   61 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/pg_query-2.1.0/lib/pg_query/treewalker.rb
   62 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/pg_query-2.1.0/lib/pg_query/filter_columns.rb
   63 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/digest.bundle
   64 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/digest.rb
   65 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/pg_query-2.1.0/lib/pg_query/fingerprint.rb
   66 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/pg_query-2.1.0/lib/pg_query/param_refs.rb
   67 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/pg_query-2.1.0/lib/pg_query/deparse.rb
   68 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/pg_query-2.1.0/lib/pg_query/truncate.rb
   69 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/pg_query-2.1.0/lib/pg_query/scan.rb
   70 /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/pg_query-2.1.0/lib/pg_query.rb

* Process memory map:

10e3ec000-10e3f0000 r-x /Users/tkuah/.rbenv/versions/2.7.2/bin/ruby
10e3f0000-10e3f4000 r-- /Users/tkuah/.rbenv/versions/2.7.2/bin/ruby
10e3f4000-10e3f8000 rw- /Users/tkuah/.rbenv/versions/2.7.2/bin/ruby
10e3f8000-10e3f9000 r-- /Users/tkuah/.rbenv/versions/2.7.2/bin/ruby
10e3f9000-10e3fc000 r-- /Users/tkuah/.rbenv/versions/2.7.2/lib/libruby.2.7.dylib
10e3fc000-10e3fe000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/libruby.2.7.dylib
10e3fe000-10e3ff000 r-- /Users/tkuah/.rbenv/versions/2.7.2/lib/libruby.2.7.dylib
10e3ff000-10e400000 r-- /Users/tkuah/.rbenv/versions/2.7.2/lib/libruby.2.7.dylib
10e400000-10e401000 r-- /Users/tkuah/.rbenv/versions/2.7.2/lib/libruby.2.7.dylib
10e402000-10e71a000 r-x /Users/tkuah/.rbenv/versions/2.7.2/lib/libruby.2.7.dylib
10e71a000-10e722000 r-- /Users/tkuah/.rbenv/versions/2.7.2/lib/libruby.2.7.dylib
10e722000-10e726000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/libruby.2.7.dylib
10e726000-10e73e000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/libruby.2.7.dylib
10e73e000-10e828000 r-- /Users/tkuah/.rbenv/versions/2.7.2/lib/libruby.2.7.dylib
10e828000-10e82a000 rw- /usr/local/Cellar/gmp/6.2.1/lib/libgmp.10.dylib
10e82a000-10e82b000 r-- /usr/local/Cellar/gmp/6.2.1/lib/libgmp.10.dylib
10e82b000-10e82f000 rw- /usr/local/Cellar/gmp/6.2.1/lib/libgmp.10.dylib
10e82f000-10e88f000 r-x /usr/local/Cellar/gmp/6.2.1/lib/libgmp.10.dylib
10e88f000-10e893000 r-- /usr/local/Cellar/gmp/6.2.1/lib/libgmp.10.dylib
10e893000-10e897000 rw- /usr/local/Cellar/gmp/6.2.1/lib/libgmp.10.dylib
10e897000-10e8a4000 r-- /usr/local/Cellar/gmp/6.2.1/lib/libgmp.10.dylib
10e8a4000-10e8a7000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10e8a7000-10e8a8000 --- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10e8a8000-10e8ae000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10e8ae000-10e8af000 --- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10e8af000-10e8b0000 --- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10e8b0000-10e8b6000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10e8b6000-10e8b7000 --- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10e8b7000-10e8f7000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10e8f7000-10e8f8000 --- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10e8f8000-10e999000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10e999000-10e99a000 --- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10e99a000-10ea3b000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10ea3b000-10ea3c000 --- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10ea3c000-10eadd000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10eadd000-10eade000 --- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10eade000-10eb7f000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10eb7f000-10eb80000 --- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10eb80000-10ec21000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10ec21000-10ec22000 --- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10ec22000-10ecc3000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10ecc3000-10ecc4000 --- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10ecc4000-10ed65000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10ed65000-10ed66000 --- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10ed66000-10ee07000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10ee07000-10ee08000 --- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10ee08000-10eea9000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10eea9000-10eeaa000 --- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10eeaa000-10ef4b000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10ef4b000-10ef4c000 --- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10ef4c000-10efed000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10efed000-10efee000 --- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10efee000-10f08f000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10f08f000-10f090000 --- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10f090000-10f131000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10f131000-10f132000 --- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10f132000-10f1d3000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10f1d3000-10f1d4000 --- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10f1d4000-10f275000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10f275000-10f276000 --- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10f276000-10f317000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10f317000-10f318000 --- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10f318000-10f3b9000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10f3b9000-10f3ba000 --- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10f3ba000-10f45b000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10f45b000-10f45c000 --- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10f45c000-10f4fd000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10f4fd000-10f4fe000 --- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10f4fe000-10f59f000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10f59f000-10f5a0000 --- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10f5a0000-10f641000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10f641000-10f642000 --- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10f642000-10f6e3000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10f6e3000-10f6e4000 --- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10f6e4000-10f785000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10f785000-10f786000 --- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10f786000-10f827000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10f827000-10f828000 --- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10f828000-10f8c9000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10f8c9000-10f8ca000 --- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10f8ca000-10f96b000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10f96b000-10f96c000 --- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10f96c000-10fa0d000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10fa0d000-10fa0e000 --- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10fa0e000-10faaf000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10faaf000-10fab0000 --- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10fab0000-10fb51000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10fb51000-10fb52000 --- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10fb52000-10fbf3000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10fbf3000-10fbf4000 --- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10fbf4000-10fc95000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10fc95000-10fc96000 --- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10fc96000-10fd37000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10fd37000-10fd3b000 r-x /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10fd3b000-10fd3f000 r-- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10fd3f000-10fd43000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10fd43000-10fd44000 r-- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/encdb.bundle
10fd44000-10fd47000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/trans/transdb.bundle
10fd47000-10fd4b000 r-x /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/trans/transdb.bundle
10fd4b000-10fd4f000 r-- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/trans/transdb.bundle
10fd4f000-10fd53000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/trans/transdb.bundle
10fd53000-10fd54000 r-- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/enc/trans/transdb.bundle
10fd54000-10fd57000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/monitor.bundle
10fd57000-10fd5b000 r-x /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/monitor.bundle
10fd5b000-10fd5f000 r-- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/monitor.bundle
10fd5f000-10fd63000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/monitor.bundle
10fd63000-10fd64000 r-- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/monitor.bundle
10fd64000-10fd67000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/google-protobuf-3.17.3-universal-darwin/lib/google/2.7/protobuf_c.bundle
10fd67000-10fd92000 r-x /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/google-protobuf-3.17.3-universal-darwin/lib/google/2.7/protobuf_c.bundle
10fd92000-10fd93000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/google-protobuf-3.17.3-universal-darwin/lib/google/2.7/protobuf_c.bundle
10fd93000-10fd94000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/google-protobuf-3.17.3-universal-darwin/lib/google/2.7/protobuf_c.bundle
10fd94000-10fdac000 r-- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/google-protobuf-3.17.3-universal-darwin/lib/google/2.7/protobuf_c.bundle
10fdac000-10ff68000 r-x /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/pg_query-2.1.0/lib/pg_query/pg_query.bundle
10ff68000-10ff9c000 r-- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/pg_query-2.1.0/lib/pg_query/pg_query.bundle
10ff9c000-10ffa0000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/pg_query-2.1.0/lib/pg_query/pg_query.bundle
10ffa0000-11004b000 r-- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/pg_query-2.1.0/lib/pg_query/pg_query.bundle
11004b000-11004c000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/digest.bundle
11004c000-110050000 r-x /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/digest.bundle
110050000-110054000 r-- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/digest.bundle
110054000-110058000 rw- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/digest.bundle
110058000-11005b000 r-- /Users/tkuah/.rbenv/versions/2.7.2/lib/ruby/2.7.0/x86_64-darwin20/digest.bundle
11005b000-11005c000 rw- /Users/tkuah/.rbenv/versions/2.7.2/bin/ruby
11005c000-110069000 r-- /Users/tkuah/.rbenv/versions/2.7.2/bin/ruby
110069000-110477000 r-- /Users/tkuah/.rbenv/versions/2.7.2/lib/libruby.2.7.dylib
110477000-1104e1000 r-- /usr/lib/system/libsystem_platform.dylib
112c65000-112d01000 r-x /usr/lib/dyld
112d01000-112d09000 r-- /usr/lib/dyld
112d09000-112d0d000 rw- /usr/lib/dyld
112d0d000-112d41000 rw- /usr/lib/dyld
112d41000-112d79000 r-- /usr/lib/dyld
112d79000-112d7d000 r--
70000f230000-70000f231000 ---
70000f231000-70000f2b3000 rw-
7fd402c00000-7fd402d00000 rw-
7fd402d00000-7fd402e00000 rw-
7fd402e00000-7fd402f00000 rw-
7fd402f00000-7fd403000000 rw-
7fd403000000-7fd403800000 rw-
7fd403800000-7fd404000000 rw-
7fd404000000-7fd40401b000 rw-
7fd40401b000-7fd40411b000 rw-
7fd40411b000-7fd40412b000 rw-
7fd40412b000-7fd40418b000 rw-
7fd404190000-7fd406190000 rw-
7fd406190000-7fd4061a4000 rw-
7fd4061a4000-7fd4061bf000 rw-
7fd4061bf000-7fd4061d7000 rw-
7fd4061d7000-7fd4061f4000 rw-
7fd4061f4000-7fd4061ff000 rw-
7fd406200000-7fd406300000 rw-
7fd406300000-7fd406400000 rw-
7fd406400000-7fd406439000 rw-
7fd406439000-7fd406453000 rw-
7fd406453000-7fd406470000 rw-
7fd406470000-7fd4064a9000 rw-
7fd4064a9000-7fd4064e2000 rw-
7fd4064e2000-7fd4064f3000 rw-
7fd406500000-7fd406600000 rw-
7fd406600000-7fd406671000 rw-
7fd406671000-7fd4066e2000 rw-
7fd4066e2000-7fd406712000 rw-
7fd406712000-7fd4067f3000 rw-
7fd406800000-7fd407000000 rw-
7fd407000000-7fd407800000 rw-
7fd407800000-7fd408000000 rw-
7fd408000000-7fd408800000 rw-
7fd408800000-7fd409000000 rw-
7fd409000000-7fd409100000 rw-
7fd409100000-7fd409200000 rw-
7fd409200000-7fd40920f000 rw-
7fd409300000-7fd409400000 rw-
7ffedd814000-7ffee1014000 ---
7ffee1014000-7ffee1814000 rw-
7fff00000000-7fff80000000 r--
7fff80000000-7fff8006f000 r--
7fff8006f000-7fff80200000 rw-
7fff80200000-7fff80400000 rw-
7fff80400000-7fff80600000 r--
7fff80600000-7fff80800000 rw-
7fff80800000-7fff80a00000 rw-
7fff80a00000-7fff80c00000 rw-
7fff80c00000-7fff81000000 r--
7fff81000000-7fff81200000 rw-
7fff81200000-7fff8e000000 r--
7fff8e000000-7fff8e200000 rw-
7fff8e200000-7fffc0000000 r--
7fffc0000000-7fffffe00000 r--
7fffffe00000-7fffffe01000 r--
7ffffff2a000-7ffffff2b000 r-x
[IMPORTANT]
Don't forget to include the Crash Report log file under
DiagnosticReports directory in bug reports.

Abort trap: 6
@kuahyeow
Copy link
Author

Note that we tried the latest google-protobuf 3.18.0.rc.1 (which has moved the DSL to pure ruby in protocolbuffers/protobuf#8850), it still segfaults

@stanhu
Copy link
Contributor

stanhu commented Aug 30, 2021

Something is very odd. statements.length is 1, so the parse loop should run a few times after parsing the where_clause. However, it seems that statements may be garbage collected when this statement is hit, so the memory address is no longer valid:

statement = statements.shift

The issue description points to a subselect item also being invalid in

case next_item.node

This makes me wonder if this is actually a google-protobuf memory issue dealing with repeated fields, perhaps similar to protocolbuffers/protobuf#8559

If I hack pg_query to use google-protobuf v3.14.0, I don't see a seg fault, but for some reason the loop runs 15 times instead of 2.

@kuahyeow
Copy link
Author

The sample reproduction script runs fine, without segfault in pg_query 1.3.0

@stanhu
Copy link
Contributor

stanhu commented Aug 31, 2021

It still crashes If I take the C extension parse_protobuf call out of the picture and load the protobuf bytes directly:

diff --git a/lib/pg_query/parse.rb b/lib/pg_query/parse.rb
index 810c0f4..2015587 100644
--- a/lib/pg_query/parse.rb
+++ b/lib/pg_query/parse.rb
@@ -1,18 +1,24 @@
 module PgQuery
   def self.parse(query)
-    result, stderr = parse_protobuf(query)
+    result = File.open('/tmp/proto.bin', 'rb').read

     begin
       result = PgQuery::ParseResult.decode(result)
     rescue Google::Protobuf::ParseError => e
       raise PgQuery::ParseError.new(format('Failed to parse tree: %s', e.message), __FILE__, __LINE__, -1)
     end

     warnings = []
-    stderr.each_line do |line|
-      next unless line[/^WARNING/]
-      warnings << line.strip
-    end
+#    stderr.each_line do |line|
+#      next unless line[/^WARNING/]
+#      warnings << line.strip
+#    end

     PgQuery::ParserResult.new(query, result, warnings)
   end

pg_query_crash_proto.zip

I'm also seeing seg faults due to:

[BUG] try to mark T_NONE object

This suggests the garbage collector is visiting some Ruby pointer that's marked as T_NONE (nothing is there). Either it's looking at memory that has already been freed by someone, or something overwrote memory that it shouldn't have.
I've confirmed the patches for https://bugs.ruby-lang.org/issues/16689 are in Ruby 2.7.4.

-- C level backtrace information -------------------------------------------
/home/stanhu/.rbenv/versions/2.7.4/lib/libruby.so.2.7(rb_print_backtrace+0x15) [0x7f902fd8f2b5] vm_dump.c:755
/home/stanhu/.rbenv/versions/2.7.4/lib/libruby.so.2.7(rb_vm_bugreport+0x71b) [0x7f902fd8f9eb] vm_dump.c:941
/home/stanhu/.rbenv/versions/2.7.4/lib/libruby.so.2.7(rb_bug+0xe4) [0x7f902fb9b7a8] error.c:645
/home/stanhu/.rbenv/versions/2.7.4/lib/libruby.so.2.7(gc_mark_maybe+0x0) [0x7f902fc2b860] gc.c:5188
/home/stanhu/.rbenv/versions/2.7.4/lib/libruby.so.2.7(gc_mark_ptr) (null):0
/home/stanhu/.rbenv/versions/2.7.4/lib/libruby.so.2.7(gc_mark+0x17) [0x7f902fc2cdc8] gc.c:5218
/home/stanhu/.rbenv/versions/2.7.4/lib/libruby.so.2.7(gc_mark_children) gc.c:5385
/home/stanhu/.rbenv/versions/2.7.4/lib/libruby.so.2.7(gc_marks_rest+0x90) [0x7f902fc30230] gc.c:5519
/home/stanhu/.rbenv/versions/2.7.4/lib/libruby.so.2.7(gc_rest+0x7a) [0x7f902fc30dea] gc.c:7375
/home/stanhu/.rbenv/versions/2.7.4/lib/libruby.so.2.7(garbage_collect+0x34) [0x7f902fc31464] gc.c:7249
/home/stanhu/.rbenv/versions/2.7.4/lib/libruby.so.2.7(newobj_slowpath_wb_protected+0xd5) [0x7f902fc31e85] gc.c:2227
/home/stanhu/.rbenv/versions/2.7.4/lib/libruby.so.2.7(rb_str_resurrect+0x35) [0x7f902fd29355] string.c:728
/home/stanhu/.rbenv/versions/2.7.4/lib/libruby.so.2.7(rb_str_concat_literals+0x7c) [0x7f902fd35d4c] string.c:2985
/home/stanhu/.rbenv/versions/2.7.4/lib/libruby.so.2.7(vm_exec_core+0xe50) [0x7f902fd7a8a0] insns.def:382
/home/stanhu/.rbenv/versions/2.7.4/lib/libruby.so.2.7(rb_vm_exec+0xb3) [0x7f902fd7fe23] vm.c:1929
/home/stanhu/.rbenv/versions/2.7.4/lib/libruby.so.2.7(rb_yield_0+0x238) [0x7f902fd82c4d] vm.c:1044
/home/stanhu/.rbenv/versions/2.7.4/lib/libruby.so.2.7(loop_i) vm_eval.c:1330
/home/stanhu/.rbenv/versions/2.7.4/lib/libruby.so.2.7(rb_vrescue2+0xd1) [0x7f902fc183d1] eval.c:990
/home/stanhu/.rbenv/versions/2.7.4/lib/libruby.so.2.7(rb_rescue2+0x8a) [0x7f902fc185ca] eval.c:967
/home/stanhu/.rbenv/versions/2.7.4/lib/libruby.so.2.7(vm_call_cfunc+0x11b) [0x7f902fd6f1bb] vm_insnhelper.c:2514
/home/stanhu/.rbenv/versions/2.7.4/lib/libruby.so.2.7(vm_call_method+0xde) [0x7f902fd8181e] vm_insnhelper.c:3053
/home/stanhu/.rbenv/versions/2.7.4/lib/libruby.so.2.7(vm_sendish+0x73) [0x7f902fd6bc53] vm_insnhelper.c:4023
/home/stanhu/.rbenv/versions/2.7.4/lib/libruby.so.2.7(vm_exec_core+0x141) [0x7f902fd79b91] insns.def:782
/home/stanhu/.rbenv/versions/2.7.4/lib/libruby.so.2.7(rb_vm_exec+0xb3) [0x7f902fd7fe23] vm.c:1929
/home/stanhu/.rbenv/versions/2.7.4/lib/libruby.so.2.7(rb_ec_exec_node+0xaa) [0x7f902fc1580a] eval.c:278
/home/stanhu/.rbenv/versions/2.7.4/lib/libruby.so.2.7(ruby_run_node+0x49) [0x7f902fc1a3a9] eval.c:336
/home/stanhu/.rbenv/versions/2.7.4/bin/ruby(main+0x5b) [0x55e3f2d2696b] ./main.c:50

-- Other runtime information -----------------------------------------------

I'm trying to reproduce this in the Ruby protobuf tests, but I'm not getting a crash yet.

@stanhu
Copy link
Contributor

stanhu commented Aug 31, 2021

I suspect this is an issue with google-protobuf rather than the libpg_query or pg_query: protocolbuffers/protobuf#8938

@stanhu
Copy link
Contributor

stanhu commented Aug 31, 2021

Closing in favor of the google-protobuf issue since there is a reproduction step that doesn't even involve pg_query: protocolbuffers/protobuf#8938 (comment)

@kuahyeow
Copy link
Author

kuahyeow commented Sep 1, 2021

BTW, I was able to workaround this issue in the meantime in our CI by disabling GC temporarily :

      begin
        GC.disable
        tables = PgQuery.parse(sql).tables
      ensure
        GC.enable
      end

@stanhu
Copy link
Contributor

stanhu commented Sep 1, 2021

I submitted #227 to workaround the Ruby bug described in https://bugs.ruby-lang.org/issues/18140#note-2.

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

No branches or pull requests

2 participants