jstepien / mutant

Mutation testing for Clojure
102 stars 8 forks source link

Bug: Pushback buffer overflow #5

Open NoahTheDuke opened 6 years ago

NoahTheDuke commented 6 years ago

Trying to run this over the netrunner codebase throws a pushback buffer overflow.

λ  lein trampoline mutate
Exception in thread "main" java.io.IOException: Pushback buffer overflow, compiling:(C:\Users\NoahBogart\AppData\Local\Temp\form-init4812278696648608213.clj:1:113)
        at clojure.lang.Compiler.load(Compiler.java:7526)
        at clojure.lang.Compiler.loadFile(Compiler.java:7452)
        at clojure.main$load_script.invokeStatic(main.clj:278)
        at clojure.main$init_opt.invokeStatic(main.clj:280)
        at clojure.main$init_opt.invoke(main.clj:280)
        at clojure.main$initialize.invokeStatic(main.clj:311)
        at clojure.main$null_opt.invokeStatic(main.clj:345)
        at clojure.main$null_opt.invoke(main.clj:342)
        at clojure.main$main.invokeStatic(main.clj:424)
        at clojure.main$main.doInvoke(main.clj:387)
        at clojure.lang.RestFn.applyTo(RestFn.java:137)
        at clojure.lang.Var.applyTo(Var.java:702)
        at clojure.main.main(main.java:37)
Caused by: java.io.IOException: Pushback buffer overflow
        at java.io.PushbackReader.unread(Unknown Source)
        at clojure.tools.reader.reader_types$fn__3136.invokeStatic(reader_types.clj:171)
        at clojure.tools.reader.reader_types$fn__3136.invoke(reader_types.clj:156)
        at clojure.tools.reader.reader_types$fn__3053$G__3048__3060.invoke(reader_types.clj:31)
        at clojure.tools.reader.reader_types.IndexingPushbackReader.unread(reader_types.clj:142)
        at rewrite_clj.parser.keyword$parse_keyword.invokeStatic(keyword.clj:17)
        at rewrite_clj.parser.keyword$parse_keyword.invoke(keyword.clj:8)
        at rewrite_clj.parser.core$eval1833$fn__1834.invoke(core.clj:95)
        at clojure.lang.MultiFn.invoke(MultiFn.java:229)
        at rewrite_clj.reader$read_with_meta.invokeStatic(reader.clj:132)
        at rewrite_clj.reader$read_with_meta.invoke(reader.clj:128)
        at rewrite_clj.parser.core$parse_next.invokeStatic(core.clj:34)
        at rewrite_clj.parser.core$parse_next.invoke(core.clj:32)
        at rewrite_clj.parser.core$parse_delim$fn__1801.invoke(core.clj:42)
        at rewrite_clj.reader$read_repeatedly$fn__891.invoke(reader.clj:141)
        at clojure.core$repeatedly$fn__6176.invoke(core.clj:5089)
        at clojure.lang.LazySeq.sval(LazySeq.java:40)
        at clojure.lang.LazySeq.seq(LazySeq.java:49)
        at clojure.lang.RT.seq(RT.java:528)
        at clojure.core$seq__5124.invokeStatic(core.clj:137)
        at clojure.core$take_while$fn__5638.invoke(core.clj:2896)
        at clojure.lang.LazySeq.sval(LazySeq.java:40)
        at clojure.lang.LazySeq.seq(LazySeq.java:49)
        at clojure.lang.RT.seq(RT.java:528)
        at clojure.core$seq__5124.invokeStatic(core.clj:137)
        at clojure.core$dorun.invokeStatic(core.clj:3125)
        at clojure.core$doall.invokeStatic(core.clj:3140)
        at clojure.core$doall.invoke(core.clj:3140)
        at rewrite_clj.reader$read_repeatedly.invokeStatic(reader.clj:143)
        at rewrite_clj.reader$read_repeatedly.invoke(reader.clj:137)
        at rewrite_clj.parser.core$parse_delim.invokeStatic(core.clj:43)
        at rewrite_clj.parser.core$parse_delim.invoke(core.clj:38)
        at rewrite_clj.parser.core$eval1877$fn__1878.invoke(core.clj:178)
        at clojure.lang.MultiFn.invoke(MultiFn.java:229)
        at rewrite_clj.reader$read_with_meta.invokeStatic(reader.clj:132)
        at rewrite_clj.reader$read_with_meta.invoke(reader.clj:128)
        at rewrite_clj.parser.core$parse_next.invokeStatic(core.clj:34)
        at rewrite_clj.parser.core$parse_next.invoke(core.clj:32)
        at rewrite_clj.parser.core$parse_delim$fn__1801.invoke(core.clj:42)
        at rewrite_clj.reader$read_repeatedly$fn__891.invoke(reader.clj:141)
        at clojure.core$repeatedly$fn__6176.invoke(core.clj:5089)
        at clojure.lang.LazySeq.sval(LazySeq.java:40)
        at clojure.lang.LazySeq.seq(LazySeq.java:49)
        at clojure.lang.RT.seq(RT.java:528)
        at clojure.core$seq__5124.invokeStatic(core.clj:137)
        at clojure.core$take_while$fn__5638.invoke(core.clj:2896)
        at clojure.lang.LazySeq.sval(LazySeq.java:40)
        at clojure.lang.LazySeq.seq(LazySeq.java:49)
        at clojure.lang.Cons.next(Cons.java:39)
        at clojure.lang.RT.next(RT.java:706)
        at clojure.core$next__5108.invokeStatic(core.clj:64)
        at clojure.core$dorun.invokeStatic(core.clj:3134)
        at clojure.core$doall.invokeStatic(core.clj:3140)
        at clojure.core$doall.invoke(core.clj:3140)
        at rewrite_clj.reader$read_repeatedly.invokeStatic(reader.clj:143)
        at rewrite_clj.reader$read_repeatedly.invoke(reader.clj:137)
        at rewrite_clj.parser.core$parse_delim.invokeStatic(core.clj:43)
        at rewrite_clj.parser.core$parse_delim.invoke(core.clj:38)
        at rewrite_clj.parser.core$eval1873$fn__1874.invoke(core.clj:174)
        at clojure.lang.MultiFn.invoke(MultiFn.java:229)
        at rewrite_clj.reader$read_with_meta.invokeStatic(reader.clj:132)
        at rewrite_clj.reader$read_with_meta.invoke(reader.clj:128)
        at rewrite_clj.parser.core$parse_next.invokeStatic(core.clj:34)
        at rewrite_clj.parser.core$parse_next.invoke(core.clj:32)
        at rewrite_clj.parser.core$parse_delim$fn__1801.invoke(core.clj:42)
        at rewrite_clj.reader$read_repeatedly$fn__891.invoke(reader.clj:141)
        at clojure.core$repeatedly$fn__6176.invoke(core.clj:5089)
        at clojure.lang.LazySeq.sval(LazySeq.java:40)
        at clojure.lang.LazySeq.seq(LazySeq.java:49)
        at clojure.lang.RT.seq(RT.java:528)
        at clojure.core$seq__5124.invokeStatic(core.clj:137)
        at clojure.core$take_while$fn__5638.invoke(core.clj:2896)
        at clojure.lang.LazySeq.sval(LazySeq.java:40)
        at clojure.lang.LazySeq.seq(LazySeq.java:49)
        at clojure.lang.Cons.next(Cons.java:39)
        at clojure.lang.RT.next(RT.java:706)
        at clojure.core$next__5108.invokeStatic(core.clj:64)
        at clojure.core$dorun.invokeStatic(core.clj:3134)
        at clojure.core$doall.invokeStatic(core.clj:3140)
        at clojure.core$doall.invoke(core.clj:3140)
        at rewrite_clj.reader$read_repeatedly.invokeStatic(reader.clj:143)
        at rewrite_clj.reader$read_repeatedly.invoke(reader.clj:137)
        at rewrite_clj.parser.core$parse_delim.invokeStatic(core.clj:43)
        at rewrite_clj.parser.core$parse_delim.invoke(core.clj:38)
        at rewrite_clj.parser.core$eval1869$fn__1870.invoke(core.clj:170)
        at clojure.lang.MultiFn.invoke(MultiFn.java:229)
        at rewrite_clj.reader$read_with_meta.invokeStatic(reader.clj:132)
        at rewrite_clj.reader$read_with_meta.invoke(reader.clj:128)
        at rewrite_clj.parser.core$parse_next.invokeStatic(core.clj:34)
        at rewrite_clj.parser.core$parse_next.invoke(core.clj:32)
        at rewrite_clj.parser$parse.invokeStatic(parser.clj:13)
        at rewrite_clj.parser$parse.invoke(parser.clj:10)
        at rewrite_clj.parser$parse_all$fn__1886.invoke(parser.clj:18)
        at clojure.core$repeatedly$fn__6176.invoke(core.clj:5089)
        at clojure.lang.LazySeq.sval(LazySeq.java:40)
        at clojure.lang.LazySeq.seq(LazySeq.java:49)
        at clojure.lang.RT.seq(RT.java:528)
        at clojure.core$seq__5124.invokeStatic(core.clj:137)
        at clojure.core$take_while$fn__5638.invoke(core.clj:2896)
        at clojure.lang.LazySeq.sval(LazySeq.java:40)
        at clojure.lang.LazySeq.seq(LazySeq.java:49)
        at clojure.lang.Cons.next(Cons.java:39)
        at clojure.lang.RT.next(RT.java:706)
        at clojure.core$next__5108.invokeStatic(core.clj:64)
        at clojure.core$dorun.invokeStatic(core.clj:3134)
        at clojure.core$doall.invokeStatic(core.clj:3140)
        at clojure.core$doall.invoke(core.clj:3140)
        at rewrite_clj.parser$parse_all.invokeStatic(parser.clj:20)
        at rewrite_clj.parser$parse_all.invoke(parser.clj:15)
        at rewrite_clj.parser$parse_file_all.invokeStatic(parser.clj:49)
        at rewrite_clj.parser$parse_file_all.invoke(parser.clj:44)
        at rewrite_clj.zip.base$of_file.invokeStatic(base.clj:79)
        at rewrite_clj.zip.base$of_file.invoke(base.clj:75)
        at rewrite_clj.zip.base$of_file.invokeStatic(base.clj:77)
        at rewrite_clj.zip.base$of_file.invoke(base.clj:75)
        at mutant.internals$forms.invokeStatic(internals.clj:52)
        at mutant.internals$forms.invoke(internals.clj:49)
        at mutant.core$run$fn__3675.invoke(core.clj:10)
        at clojure.core$map$fn__5587.invoke(core.clj:2747)
        at clojure.lang.LazySeq.sval(LazySeq.java:40)
        at clojure.lang.LazySeq.seq(LazySeq.java:49)
        at clojure.lang.RT.seq(RT.java:528)
        at clojure.core$seq__5124.invokeStatic(core.clj:137)
        at clojure.core$apply.invokeStatic(core.clj:652)
        at clojure.core$mapcat.invokeStatic(core.clj:2775)
        at clojure.core$mapcat.doInvoke(core.clj:2775)
        at clojure.lang.RestFn.invoke(RestFn.java:423)
        at mutant.core$run.invokeStatic(core.clj:9)
        at mutant.core$run.invoke(core.clj:6)
        at user$eval3735$fn__3744.invoke(form-init4812278696648608213.clj:1)
        at user$eval3735.invokeStatic(form-init4812278696648608213.clj:1)
        at user$eval3735.invoke(form-init4812278696648608213.clj:1)
        at clojure.lang.Compiler.eval(Compiler.java:7062)
        at clojure.lang.Compiler.eval(Compiler.java:7052)
        at clojure.lang.Compiler.eval(Compiler.java:7052)
        at clojure.lang.Compiler.load(Compiler.java:7514)
        ... 12 more
MichaelBlume commented 6 years ago

+1

jstepien commented 6 years ago

Thanks for filing the issue @NoahTheDuke. I can reproduce it, but I'm having difficulty determining the reason of this behaviour. The project you referenced is quite complex. Would you be so kind and distill it into a minimal example reproducing the erroneous behaviour?

MichaelBlume commented 6 years ago

I had this problem as well -- my best guess was that a mutation in a macro might be producing an infinite form?

piotr-yuxuan commented 4 years ago

+1

piotr-yuxuan commented 2 years ago

+1

piotr-yuxuan commented 10 months ago

:'(