Christopher Chow wrote:

> When I start vim with vim -u NONE -N with the following code in a ruby file:
>
> class Billing::EstimatedImportStrategy < Billing::GapImportStrategy
>   def applicable?
>     has_previous_and_next_data? && has_historic_amount_data?
>   end
>
>   def has_historic_amount_data?
>     estimated_import.historic_previous_amount.present? &&
>       estimated_import.historic_gap_period.any? &&
>       estimated_import.historic_next_amount.present?
>   end
>
>   def has_previous_and_next_data?
>     estimated_import.previous_amount.present? && 
> estimated_import.next_amount.present?
>   end
>
>   def estimated_import
>     @estimated_import ||=
>       Billing::EstimatedImport.new(:started_on => gap.started_on, :ended_on 
> => gap.ended_on, :asset_id => meter.asset.id,
>                                    :resource_type_id => gap.resource_type.id, 
> :division_id => meter.asset.division_id,
>                                    :organisation_id => 
> meter.asset.organisation_id, :processed => false, :amount => nil, :meter_id 
> => meter.id)
>   end
>
>   def apply
>     estimated_import.save!
>   end
> end
>
> When I run :syntax on, I get a segfault in vim. Here's the output from 
> bugreport.vim: https://gist.github.com/Soliah/6217770


It did not crash for me on Linux, however, valgrind finds a
bug with vim-7.4 (huge, Linux x86_64):

$ valgrind --log-file=valgrind.log vim -u NONE -N -c 'syn on' foo.rb

==5283== Invalid write of size 8
==5283==    at 0x56062B: addstate (regexp_nfa.c:4172)
==5283==    by 0x560675: addstate_here (regexp_nfa.c:4290)
==5283==    by 0x56A81C: nfa_regmatch (regexp_nfa.c:5369)
==5283==    by 0x56C73B: nfa_regtry (regexp_nfa.c:6349)
==5283==    by 0x56CC07: nfa_regexec_both (regexp_nfa.c:6533)
==5283==    by 0x5C3E78: syn_regexec (syntax.c:3272)
==5283==    by 0x5CA6D6: syn_current_attr (syntax.c:2092)
==5283==    by 0x5CF1B7: get_syntax_attr (syntax.c:1851)
==5283==    by 0x581A8E: win_line (screen.c:4274)
==5283==    by 0x58858F: win_update (screen.c:2010)
==5283==    by 0x58BE31: update_screen.part.21 (screen.c:681)
==5283==    by 0x624A26: main_loop (main.c:1232)
==5283==  Address 0xe383a88 is 87,752 bytes inside a block of size 99,280 free'd
==5283==    at 0x4C2B4F0: realloc (in
/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5283==    by 0x5602D2: addstate (regexp_nfa.c:4022)
==5283==    by 0x560196: addstate (regexp_nfa.c:4060)
==5283==    by 0x560157: addstate (regexp_nfa.c:4167)
==5283==    by 0x560675: addstate_here (regexp_nfa.c:4290)
==5283==    by 0x56A81C: nfa_regmatch (regexp_nfa.c:5369)
==5283==    by 0x56C73B: nfa_regtry (regexp_nfa.c:6349)
==5283==    by 0x56CC07: nfa_regexec_both (regexp_nfa.c:6533)
==5283==    by 0x5C3E78: syn_regexec (syntax.c:3272)
==5283==    by 0x5CA6D6: syn_current_attr (syntax.c:2092)
==5283==    by 0x5CF1B7: get_syntax_attr (syntax.c:1851)
==5283==    by 0x581A8E: win_line (screen.c:4274)
==5283==
==5283== Invalid write of size 4
==5283==    at 0x56062F: addstate (regexp_nfa.c:4172)
==5283==    by 0x560675: addstate_here (regexp_nfa.c:4290)
==5283==    by 0x56A81C: nfa_regmatch (regexp_nfa.c:5369)
==5283==    by 0x56C73B: nfa_regtry (regexp_nfa.c:6349)
==5283==    by 0x56CC07: nfa_regexec_both (regexp_nfa.c:6533)
==5283==    by 0x5C3E78: syn_regexec (syntax.c:3272)
==5283==    by 0x5CA6D6: syn_current_attr (syntax.c:2092)
==5283==    by 0x5CF1B7: get_syntax_attr (syntax.c:1851)
==5283==    by 0x581A8E: win_line (screen.c:4274)
==5283==    by 0x58858F: win_update (screen.c:2010)
==5283==    by 0x58BE31: update_screen.part.21 (screen.c:681)
==5283==    by 0x624A26: main_loop (main.c:1232)
==5283==  Address 0xe383a90 is 87,760 bytes inside a block of size 99,280 free'd
==5283==    at 0x4C2B4F0: realloc (in
/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5283==    by 0x5602D2: addstate (regexp_nfa.c:4022)
==5283==    by 0x560196: addstate (regexp_nfa.c:4060)
==5283==    by 0x560157: addstate (regexp_nfa.c:4167)
==5283==    by 0x560675: addstate_here (regexp_nfa.c:4290)
==5283==    by 0x56A81C: nfa_regmatch (regexp_nfa.c:5369)
==5283==    by 0x56C73B: nfa_regtry (regexp_nfa.c:6349)
==5283==    by 0x56CC07: nfa_regexec_both (regexp_nfa.c:6533)
==5283==    by 0x5C3E78: syn_regexec (syntax.c:3272)
==5283==    by 0x5CA6D6: syn_current_attr (syntax.c:2092)
==5283==    by 0x5CF1B7: get_syntax_attr (syntax.c:1851)
==5283==    by 0x581A8E: win_line (screen.c:4274)


I can reproduce it with a much simpler input file
containing just 6 spaces and a x:

$ cat foo.rb
      x
$ vim valgrind --log-file=valgrind.log vim -u NONE -N -c 'syn on' foo.rb

Regards
Dominique

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Raspunde prin e-mail lui