bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#20703: 24.4; Stack overflow in regexp matcher


From: lee
Subject: bug#20703: 24.4; Stack overflow in regexp matcher
Date: Tue, 02 Jun 2015 23:10:33 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.4 (gnu/linux)

Dmitry Gutov <dgutov@yandex.ru> writes:

> Please keep the bug address in Cc.
>
> On 06/01/2015 09:03 PM, lee wrote:
>
>>> What if you try `M-x find-tag'?
>>
>> That works.
>
> What if you type `M-x find-tag TAB' (to ask Emacs for all available tags)?

Processing goes to 42% before the debugger comes up:


Debugger entered--Lisp error: (error "Stack overflow in regexp matcher")
  
re-search-forward("^\\(\\([^]+[^-a-zA-Z0-9_+*$:]+\\)?\\([-a-zA-Z0-9_+*$?:]+\\)[^-a-zA-Z0-9_+*$?:]*\\)\\(\\([^\n.]+\\).\\)?\\([0-9]+\\)?,\\([0-9]+\\)?\n"
 nil t)
  etags-tags-completion-table()
  #[0 "\303\211C\304\305\"\210\212\306.\242\205.\307!\2038.    
\262.\211\242\2031.\310\311\312\313\314\315.!\316\"\317\320%.\"\210\202       
.\211.\240\210\202      .)\304\321\"\210\211\242\211.\207" [buffer-file-name 
tags-completion-table-function tags-completion-table nil message "Making tags 
completion table for %s..." visit-tags-table-buffer t mapatoms make-byte-code 
257 "\301\302.!\300\242\"\207" vconcat vector [intern symbol-name] 4 "\n\n(fn 
SYM)" "Making tags completion table for %s...done"] 9 "\n\n(fn)"]()
  funcall(#[0 "\303\211C\304\305\"\210\212\306.\242\205.\307!\2038.    
\262.\211\242\2031.\310\311\312\313\314\315.!\316\"\317\320%.\"\210\202       
.\211.\240\210\202      .)\304\321\"\210\211\242\211.\207" [buffer-file-name 
tags-completion-table-function tags-completion-table nil message "Making tags 
completion table for %s..." visit-tags-table-buffer t mapatoms make-byte-code 
257 "\301\302.!\300\242\"\207" vconcat vector [intern symbol-name] 4 "\n\n(fn 
SYM)" "Making tags completion table for %s...done"] 9 "\n\n(fn)"])
  tags-completion-table()
  #[771 "r\300q\210\212\302.\303 \210)\304.\305 .$*\207" [#<buffer 
llagent.cpp> enable-recursive-minibuffers t visit-tags-table-buffer 
complete-with-action tags-completion-table] 8 "\n\n(fn STRING PRED ACTION)"]("" 
nil metadata)
  completion-metadata("" #[771 "r\300q\210\212\302.\303 \210)\304.\305 
.$*\207" [#<buffer llagent.cpp> enable-recursive-minibuffers t 
visit-tags-table-buffer complete-with-action tags-completion-table] 8 "\n\n(fn 
STRING PRED ACTION)"] nil)
  completion--field-metadata(28)
  completion--do-completion(28 28)
  completion--in-region-1(28 28)
  #[1028 
"..\n\203!.\304.!\203..\202.\305.!\305.\306\".F.\307\310!\210\311.\"*\207"
 [minibuffer-completion-predicate minibuffer-completion-table 
completion-in-region-mode-predicate completion-in-region--data markerp 
copy-marker t completion-in-region-mode 1 completion--in-region-1] 8 "\n\n(fn 
START END COLLECTION PREDICATE)"](28 28 #[771 "r\300q\210\212\302.\303 
\210)\304.\305 .$*\207" [#<buffer llagent.cpp> enable-recursive-minibuffers t 
visit-tags-table-buffer complete-with-action tags-completion-table] 8 "\n\n(fn 
STRING PRED ACTION)"] nil)
  apply(#[1028 
"..\n\203!.\304.!\203..\202.\305.!\305.\306\".F.\307\310!\210\311.\"*\207"
 [minibuffer-completion-predicate minibuffer-completion-table 
completion-in-region-mode-predicate completion-in-region--data markerp 
copy-marker t completion-in-region-mode 1 completion--in-region-1] 8 "\n\n(fn 
START END COLLECTION PREDICATE)"] (28 28 #[771 "r\300q\210\212\302.\303 
\210)\304.\305 .$*\207" [#<buffer llagent.cpp> enable-recursive-minibuffers t 
visit-tags-table-buffer complete-with-action tags-completion-table] 8 "\n\n(fn 
STRING PRED ACTION)"] nil))
  #[771 
".:\2030.@\301=\203.\300\242\302.A\"\303.#\207\304.@\305\306\307\310\311\312\300!\313\"\314\315%.A.#.#\207\304\316.\"\207"
 [(#0) t append nil apply apply-partially make-byte-code 642 "\300\242..#\207" 
vconcat vector [] 7 "\n\n(fn FUNS GLOBAL &rest ARGS)" #[1028 
"..\n\203!.\304.!\203..\202.\305.!\305.\306\".F.\307\310!\210\311.\"*\207"
 [minibuffer-completion-predicate minibuffer-completion-table 
completion-in-region-mode-predicate completion-in-region--data markerp 
copy-marker t completion-in-region-mode 1 completion--in-region-1] 8 "\n\n(fn 
START END COLLECTION PREDICATE)"]] 12 "\n\n(fn FUNS GLOBAL ARGS)"](nil nil (28 
28 #[771 "r\300q\210\212\302.\303 \210)\304.\305 .$*\207" [#<buffer 
llagent.cpp> enable-recursive-minibuffers t visit-tags-table-buffer 
complete-with-action tags-completion-table] 8 "\n\n(fn STRING PRED ACTION)"] 
nil))
  completion--in-region(28 28 #[771 "r\300q\210\212\302.\303 \210)\304.\305 
.$*\207" [#<buffer llagent.cpp> enable-recursive-minibuffers t 
visit-tags-table-buffer complete-with-action tags-completion-table] 8 "\n\n(fn 
STRING PRED ACTION)"] nil)
  completion-in-region(28 28 #[771 "r\300q\210\212\302.\303 \210)\304.\305 
.$*\207" [#<buffer llagent.cpp> enable-recursive-minibuffers t 
visit-tags-table-buffer complete-with-action tags-completion-table] 8 "\n\n(fn 
STRING PRED ACTION)"] nil)
  minibuffer-complete()
  call-interactively(minibuffer-complete nil nil)
  command-execute(minibuffer-complete)
  read-from-minibuffer("Find tag (default gAgent): " nil (keymap (menu-bar 
keymap (minibuf "Minibuf" keymap (tab menu-item "Complete" minibuffer-complete 
:help "Complete as far as possible") (space menu-item "Complete Word" 
minibuffer-complete-word :help "Complete at most one word") (63 menu-item "List 
Completions" minibuffer-completion-help :help "Display all possible 
completions") "Minibuf")) (27 keymap (118 . switch-to-completions)) (prior . 
switch-to-completions) (63 . minibuffer-completion-help) (32 . 
minibuffer-complete-word) (9 . minibuffer-complete) keymap (menu-bar keymap 
(minibuf "Minibuf" keymap (previous menu-item "Previous History Item" 
previous-history-element :help "Put previous minibuffer history element in the 
minibuffer") (next menu-item "Next History Item" next-history-element :help 
"Put next minibuffer history element in the minibuffer") (isearch-backward 
menu-item "Isearch History Backward" isearch-backward :help "Incrementally 
search minibuffer history backward") (isearch-forward menu-item "Isearch 
History Forward" isearch-forward :help "Incrementally search minibuffer history 
forward") (return menu-item "Enter" exit-minibuffer :key-sequence "." :help 
"Terminate input and exit minibuffer") (quit menu-item "Quit" 
abort-recursive-edit :help "Abort input and exit minibuffer") "Minibuf")) (10 . 
exit-minibuffer) (13 . exit-minibuffer) (7 . abort-recursive-edit) (C-tab . 
file-cache-minibuffer-complete) (9 . self-insert-command) (XF86Back . 
previous-history-element) (up . previous-history-element) (prior . 
previous-history-element) (XF86Forward . next-history-element) (down . 
next-history-element) (next . next-history-element) (27 keymap (114 . 
previous-matching-history-element) (115 . next-matching-history-element) (112 . 
previous-history-element) (110 . next-history-element))) nil nil "gAgent" nil)
  completing-read-default("Find tag (default gAgent): " #[771 
"r\300q\210\212\302.\303 \210)\304.\305 .$*\207" [#<buffer llagent.cpp> 
enable-recursive-minibuffers t visit-tags-table-buffer complete-with-action 
tags-completion-table] 8 "\n\n(fn STRING PRED ACTION)"] nil nil nil nil 
"gAgent" nil)
  completing-read("Find tag (default gAgent): " #[771 "r\300q\210\212\302.\303 
\210)\304.\305 .$*\207" [#<buffer llagent.cpp> enable-recursive-minibuffers t 
visit-tags-table-buffer complete-with-action tags-completion-table] 8 "\n\n(fn 
STRING PRED ACTION)"] nil nil nil nil "gAgent")
  find-tag-tag("Find tag: ")
  find-tag-interactive("Find tag: ")
  call-interactively(find-tag record nil)
  command-execute(find-tag record)
  execute-extended-command(nil "find-tag")
  call-interactively(execute-extended-command nil nil)
  command-execute(execute-extended-command)


When I use C-p j and interrupt making the completion table with C-g
before the debugger comes up, I can enter what tag I'm searching for and
it can be found.

>> I cut off roughly the bottom half of the TAGS file and tried again. With
>> that, I'm getting the error when progress is at 85% instead of
>> 42%. Cutting off the bottom half again, leaving about 1/4 of the
>> original file, does not yield an error and says no matching tags were
>> found.
>
> The idea was to split the file in half, and do a sort of binary
> search. E.g., try cutting off the top half in the first step now.
>
>> So I guess the problem might have to do with the size of the TAGS file
>> ...
>
> Not necessarily. The TAGS file is parsed sequentially, without
> recursion in the Lisp code.
>
> In all likelihood, there is a problematic line around 42% of the
> original TAGS, and the error goes away when that line is not in the
> file anymore.
>
> We need to know that line to fix the bug.

I tried to find the line and only got to the point where so much of the
file was cut out that I didn't manage to go back to a step at which I'm
getting the error.  If I have some time this weekend, I can try again.

Isn't there a way to get a better hint than the pretty vague "42%"?


-- 
Again we must be afraid of speaking of daemons for fear that daemons
might swallow us.  Finally, this fear has become reasonable.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]