Open ForNeVeR opened 10 years ago
BTW, I've tested it and I think that the bug is inside the one of the command parsers.
at java.util.regex.Pattern$Prolog.match(Pattern.java:4251) at java.util.regex.Pattern$GroupHead.match(Pattern.java:4168) at java.util.regex.Matcher.match(Matcher.java:1127) at java.util.regex.Matcher.lookingAt(Matcher.java:579) at scala.util.matching.Regex.findPrefixMatchOf(Regex.scala:284) at ru.org.codingteam.horta.core.CommandParsers$$anon$1.apply(CommandParsers.scala:13) at scala.util.parsing.combinator.Parsers$Parser$$anonfun$map$1.apply(Parsers.scala:242) at scala.util.parsing.combinator.Parsers$Parser$$anonfun$map$1.apply(Parsers.scala:242) at scala.util.parsing.combinator.Parsers$$anon$3.apply(Parsers.scala:222) at scala.util.parsing.combinator.Parsers$$anonfun$rep1$1.applyp$1(Parsers.scala:727) at scala.util.parsing.combinator.Parsers$$anonfun$rep1$1.continue$1(Parsers.scala:733) at scala.util.parsing.combinator.Parsers$$anonfun$rep1$1.apply(Parsers.scala:737) at scala.util.parsing.combinator.Parsers$$anonfun$rep1$1.apply(Parsers.scala:721) at scala.util.parsing.combinator.Parsers$$anon$3.apply(Parsers.scala:222) at scala.util.parsing.combinator.Parsers$Parser$$anonfun$append$1.apply(Parsers.scala:254) at scala.util.parsing.combinator.Parsers$Parser$$anonfun$append$1.apply(Parsers.scala:254) at scala.util.parsing.combinator.Parsers$$anon$3.apply(Parsers.scala:222) at scala.util.parsing.combinator.Parsers$Parser$$anonfun$map$1.apply(Parsers.scala:242) at scala.util.parsing.combinator.Parsers$Parser$$anonfun$map$1.apply(Parsers.scala:242) at scala.util.parsing.combinator.Parsers$$anon$3.apply(Parsers.scala:222) at scala.util.parsing.combinator.Parsers$$anon$3.apply(Parsers.scala:222) at scala.util.parsing.combinator.Parsers$Success.flatMapWithNext(Parsers.scala:142) at scala.util.parsing.combinator.Parsers$Parser$$anonfun$flatMap$1.apply(Parsers.scala:239) at scala.util.parsing.combinator.Parsers$Parser$$anonfun$flatMap$1.apply(Parsers.scala:239) at scala.util.parsing.combinator.Parsers$$anon$3.apply(Parsers.scala:222) at scala.util.parsing.combinator.Parsers$Parser$$anonfun$map$1.apply(Parsers.scala:242) at scala.util.parsing.combinator.Parsers$Parser$$anonfun$map$1.apply(Parsers.scala:242) at scala.util.parsing.combinator.Parsers$$anon$3.apply(Parsers.scala:222) at scala.util.parsing.combinator.RegexParsers$class.parse(RegexParsers.scala:148) at ru.org.codingteam.horta.core.SlashParsers$.parse(CommandParsers.scala:31) at ru.org.codingteam.horta.core.Core$$anonfun$parseCommand$1.apply(Core.scala:174) at ru.org.codingteam.horta.core.Core$$anonfun$parseCommand$1.apply(Core.scala:173) at scala.collection.immutable.Stream.map(Stream.scala:376) at ru.org.codingteam.horta.core.Core.parseCommand(Core.scala:173) at ru.org.codingteam.horta.core.Core.ru$org$codingteam$horta$core$Core$$processMessage(Core.scala:126) at ru.org.codingteam.horta.core.Core$$anonfun$receive$1.applyOrElse(Core.scala:90) at akka.actor.ActorCell.receiveMessage(ActorCell.scala:498) at akka.actor.ActorCell.invoke(ActorCell.scala:456) at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:237) at akka.dispatch.Mailbox.run(Mailbox.scala:219) at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:386) at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
Problem is in this particular regex: ((\\\\\\\\|\\\\/|[^/])*)/
It's because of nested group. Looks like Java applying them recursively. E.g. ((a|[^d])*) crashes on long strings as well.
There are two ways to fix this:
((\\\\\\\\|\\\\/|[^/]){0,10})/
A terrible bug approaches:
Well, that's a Zalgo-paste that has killed the whole process. Bad news is that we cannot even see the full stack trace.