Community
Participate
Working Groups
Created attachment 262007 [details] Screen shot Using lastest master. I was trying to create a custom text parser from the Hudson output, see attached screenshot My regular expression (WIP) was (\S*)\s+(\[INFO\])\s+---((.*)\(.*\))\s+@\s+(\S+)+ Pattern$GroupTail.match(Matcher, int, CharSequence) line: 4717 Pattern$Curly.match0(Matcher, int, int, CharSequence) line: 4272 Pattern$Curly.match(Matcher, int, CharSequence) line: 4234 Pattern$GroupHead.match(Matcher, int, CharSequence) line: 4658 Pattern$Loop.match(Matcher, int, CharSequence) line: 4785 Pattern$GroupTail.match(Matcher, int, CharSequence) line: 4717 Pattern$Curly.match0(Matcher, int, int, CharSequence) line: 4272 Pattern$Curly.match(Matcher, int, CharSequence) line: 4234 Pattern$GroupHead.match(Matcher, int, CharSequence) line: 4658 Pattern$Loop.match(Matcher, int, CharSequence) line: 4785 Pattern$GroupTail.match(Matcher, int, CharSequence) line: 4717 Pattern$Curly.match0(Matcher, int, int, CharSequence) line: 4272 Pattern$Curly.match(Matcher, int, CharSequence) line: 4234 Pattern$GroupHead.match(Matcher, int, CharSequence) line: 4658 Pattern$Loop.match(Matcher, int, CharSequence) line: 4785 Pattern$GroupTail.match(Matcher, int, CharSequence) line: 4717 Pattern$Curly.match0(Matcher, int, int, CharSequence) line: 4272 Pattern$Curly.match(Matcher, int, CharSequence) line: 4234 Pattern$GroupHead.match(Matcher, int, CharSequence) line: 4658 Pattern$Loop.match(Matcher, int, CharSequence) line: 4785 Pattern$GroupTail.match(Matcher, int, CharSequence) line: 4717 Pattern$Curly.match0(Matcher, int, int, CharSequence) line: 4272 Pattern$Curly.match(Matcher, int, CharSequence) line: 4234 Pattern$GroupHead.match(Matcher, int, CharSequence) line: 4658 Pattern$Loop.match(Matcher, int, CharSequence) line: 4785 Pattern$GroupTail.match(Matcher, int, CharSequence) line: 4717 Pattern$Curly.match0(Matcher, int, int, CharSequence) line: 4272 Pattern$Curly.match(Matcher, int, CharSequence) line: 4234 Pattern$GroupHead.match(Matcher, int, CharSequence) line: 4658 Pattern$Loop.match(Matcher, int, CharSequence) line: 4785 Pattern$GroupTail.match(Matcher, int, CharSequence) line: 4717 Pattern$Curly.match0(Matcher, int, int, CharSequence) line: 4272 Pattern$Curly.match(Matcher, int, CharSequence) line: 4234 Pattern$GroupHead.match(Matcher, int, CharSequence) line: 4658 Pattern$Loop.match(Matcher, int, CharSequence) line: 4785 Pattern$GroupTail.match(Matcher, int, CharSequence) line: 4717 Pattern$Curly.match0(Matcher, int, int, CharSequence) line: 4272 Pattern$Curly.match(Matcher, int, CharSequence) line: 4234 Pattern$GroupHead.match(Matcher, int, CharSequence) line: 4658 Pattern$Loop.match(Matcher, int, CharSequence) line: 4785 Pattern$GroupTail.match(Matcher, int, CharSequence) line: 4717 Pattern$Curly.match0(Matcher, int, int, CharSequence) line: 4272 Pattern$Curly.match(Matcher, int, CharSequence) line: 4234 Pattern$GroupHead.match(Matcher, int, CharSequence) line: 4658 Pattern$Loop.match(Matcher, int, CharSequence) line: 4785 Pattern$GroupTail.match(Matcher, int, CharSequence) line: 4717 Pattern$Curly.match0(Matcher, int, int, CharSequence) line: 4272 Pattern$Curly.match(Matcher, int, CharSequence) line: 4234 Pattern$GroupHead.match(Matcher, int, CharSequence) line: 4658 Pattern$Loop.matchInit(Matcher, int, CharSequence) line: 4801 Pattern$Prolog.match(Matcher, int, CharSequence) line: 4741 Pattern$Curly.match0(Matcher, int, int, CharSequence) line: 4279 Pattern$Curly.match(Matcher, int, CharSequence) line: 4234 Pattern$Single(Pattern$BmpCharProperty).match(Matcher, int, CharSequence) line: 3798 Pattern$Curly.match0(Matcher, int, int, CharSequence) line: 4279 Pattern$Curly.match(Matcher, int, CharSequence) line: 4234 Pattern$GroupTail.match(Matcher, int, CharSequence) line: 4717 Pattern$Single(Pattern$BmpCharProperty).match(Matcher, int, CharSequence) line: 3798 Pattern$Curly.match0(Matcher, int, int, CharSequence) line: 4272 Pattern$Curly.match(Matcher, int, CharSequence) line: 4234 Pattern$Single(Pattern$BmpCharProperty).match(Matcher, int, CharSequence) line: 3798 Pattern$GroupTail.match(Matcher, int, CharSequence) line: 4717 Pattern$Curly.match0(Matcher, int, int, CharSequence) line: 4272 Pattern$Curly.match(Matcher, int, CharSequence) line: 4234 Pattern$GroupHead.match(Matcher, int, CharSequence) line: 4658 Pattern$GroupHead.match(Matcher, int, CharSequence) line: 4658 Pattern$Slice.match(Matcher, int, CharSequence) line: 3972 Pattern$Curly.match0(Matcher, int, int, CharSequence) line: 4279 Pattern$Curly.match(Matcher, int, CharSequence) line: 4234 Pattern$GroupTail.match(Matcher, int, CharSequence) line: 4717 Pattern$Slice.match(Matcher, int, CharSequence) line: 3972 Pattern$GroupHead.match(Matcher, int, CharSequence) line: 4658 Pattern$Curly.match0(Matcher, int, int, CharSequence) line: 4272 Pattern$Curly.match(Matcher, int, CharSequence) line: 4234 Pattern$GroupTail.match(Matcher, int, CharSequence) line: 4717 Pattern$Curly.match0(Matcher, int, int, CharSequence) line: 4272 Pattern$Curly.match(Matcher, int, CharSequence) line: 4234 Pattern$GroupHead.match(Matcher, int, CharSequence) line: 4658 Matcher.match(int, int) line: 1270 Matcher.matches() line: 604 CustomTxtParserInputWizardPage.updatePreviews(boolean) line: 704 CustomTxtParserInputWizardPage.updatePreviews() line: 653 CustomTxtParserInputWizardPage.access$8(CustomTxtParserInputWizardPage) line: 652 CustomTxtParserInputWizardPage$UpdateListener.modifyText(ModifyEvent) line: 1024 TypedListener.handleEvent(Event) line: 180 EventTable.sendEvent(Event) line: 84 Display.sendEvent(EventTable, Event) line: 5208 Text(Widget).sendEvent(Event) line: 1340 Display.runDeferredEvents() line: 4542 Display.readAndDispatch() line: 4132 WizardDialog(Window).runEventLoop(Shell) line: 818 WizardDialog(Window).open() line: 794 ManageCustomParsersDialog$5.widgetSelected(SelectionEvent) line: 197 TypedListener.handleEvent(Event) line: 249 EventTable.sendEvent(Event) line: 84 Display.sendEvent(EventTable, Event) line: 5208 Button(Widget).sendEvent(Event) line: 1340 Display.runDeferredEvents() line: 4542 Display.readAndDispatch() line: 4132 ManageCustomParsersDialog(Window).runEventLoop(Shell) line: 818 ManageCustomParsersDialog(Window).open() line: 794 ManageCustomParsersCommandHandler.execute(ExecutionEvent) line: 31
I was able to reproduce this. It's an occurrence of 'catastrophic backtracking' in regular expression matching. I'm not sure what we could do? It could happen when parsing an actual trace with this regex at runtime also... Perhaps if this happens only on the partial regex but not on the completed regex, then we could add the option to turn off automatic highlighting altogether in the wizard page? Then after killing Eclipse and restarting the user could try again typing the regex with matching off. Another path that could be tried is spawning off the regex matching in an interruptible thread with a timeout... see http://stackoverflow.com/questions/910740/cancelling-a-long-running-regex-match/910798#910798