1. 01 Jul, 2018 1 commit
    • Kirill Smelkov's avatar
      Add support for persistent references (#37) · 84598fe1
      Kirill Smelkov authored
      * Add docstrings to types exposed in public API
      
      I was refreshing my knowled of ogórek and added them along the way.
      
      * Add support for persistent references
      
      Python has the mechanism for objects in one pickle to reference objects
      in another pickle. This mechanism is primarily used in ZODB object
      database for one object to "persistently" reference another object(*).
      
      I needed a way to load and understand objects from a ZODB database in
      Go, and hence comes this patch for ogórek that teaches it to understand
      such persistent references.
      
      Like it is already with Call and Class we add a dedicated Ref type to
      represent persistent references in pickle stream.
      
      (*) in ZODB when one object is changed, there is no need to resave
      unchanged object that is referencing it because its reference stays
      valid and pointing to changed object: the "persistent ID" in ZODB is
      only object ID and which revision of the referenced object it points to
      is implicitly follows by current transaction number view of the database.
      84598fe1
  2. 25 Apr, 2017 1 commit
  3. 05 Apr, 2017 6 commits
    • Kamil Kisiel's avatar
      Fix typo in test variable name · ec792bc6
      Kamil Kisiel authored
      ec792bc6
    • Kamil Kisiel's avatar
      Merge pull request #35 from navytux/fix1 · d9aae4c0
      Kamil Kisiel authored
      decoder: Small speedups
      d9aae4c0
    • Kirill Smelkov's avatar
      decoder: Avoid allocation in readLine · 15d618fd
      Kirill Smelkov authored
      readLine is used in many text decoders, so it pays off if we care not to
      do allocation for result on every readLine call:
      
          name      old time/op    new time/op    delta
          Speed-4      378ns ± 0%     379ns ± 1%     ~     (p=0.397 n=5+5)
          Decode-4    70.1µs ± 0%    67.3µs ± 0%   -3.97%  (p=0.008 n=5+5)
          Encode-4    16.6µs ± 0%    16.6µs ± 0%     ~     (p=0.548 n=5+5)
      
          name      old alloc/op   new alloc/op   delta
          Speed-4       280B ± 0%      280B ± 0%     ~     (all equal)
          Decode-4    32.3kB ± 0%    31.0kB ± 0%   -3.87%  (p=0.008 n=5+5)
          Encode-4    6.54kB ± 0%    6.54kB ± 0%     ~     (all equal)
      
          name      old allocs/op  new allocs/op  delta
          Speed-4       8.00 ± 0%      8.00 ± 0%     ~     (all equal)
          Decode-4       428 ± 0%       326 ± 0%  -23.83%  (p=0.008 n=5+5)
          Encode-4       297 ± 0%       297 ± 0%     ~     (all equal)
      15d618fd
    • Kirill Smelkov's avatar
      decoder: Preallocate .buf capacity when we know (approximate) size of output to it · 14aaa14f
      Kirill Smelkov authored
      This reduces allocations a bit:
      
          name      old time/op    new time/op    delta
          Speed-4      383ns ± 4%     378ns ± 0%    ~     (p=0.302 n=5+5)
          Decode-4    72.1µs ± 1%    70.1µs ± 0%  -2.76%  (p=0.008 n=5+5)
          Encode-4    16.5µs ± 0%    16.6µs ± 0%    ~     (p=0.095 n=5+5)
      
          name      old alloc/op   new alloc/op   delta
          Speed-4       280B ± 0%      280B ± 0%    ~     (all equal)
          Decode-4    35.7kB ± 0%    32.3kB ± 0%  -9.72%  (p=0.008 n=5+5)
          Encode-4    6.54kB ± 0%    6.54kB ± 0%    ~     (all equal)
      
          name      old allocs/op  new allocs/op  delta
          Speed-4       8.00 ± 0%      8.00 ± 0%    ~     (all equal)
          Decode-4       429 ± 0%       428 ± 0%  -0.23%  (p=0.008 n=5+5)
          Encode-4       297 ± 0%       297 ± 0%    ~     (all equal)
      14aaa14f
    • Kirill Smelkov's avatar
      decode: Use Decoder by pointer always · cad218c8
      Kirill Smelkov authored
      Most of the functions in ogorek.go already use Decoder by pointer, but
      NewDecoder() and Decoder.Decode() exceptionally used it by value.
      
      This was probably an oversight because when Decoder struct is used by
      value it is copied on every Decode call and also it is not possible to
      change and retain state in between calls as all changed happen to copy
      and then forgotten.
      
      This also leads to many unnnecessary allocations, i.e. memory allocated
      for stack one Decode call is not reused on next Decode call etc.
      
      So use Decoder by pointer only. This leads to the following speedup:
      
          name      old time/op    new time/op    delta
          Speed-4      377ns ± 0%     383ns ± 4%     ~     (p=0.214 n=5+5)
          Decode-4    80.4µs ± 3%    72.1µs ± 1%  -10.38%  (p=0.008 n=5+5)
          Encode-4    16.5µs ± 1%    16.5µs ± 0%     ~     (p=0.690 n=5+5)
      
          name      old alloc/op   new alloc/op   delta
          Speed-4       280B ± 0%      280B ± 0%     ~     (all equal)
          Decode-4    44.0kB ± 0%    35.7kB ± 0%  -18.77%  (p=0.008 n=5+5)
          Encode-4    6.54kB ± 0%    6.54kB ± 0%     ~     (all equal)
      
          name      old allocs/op  new allocs/op  delta
          Speed-4       8.00 ± 0%      8.00 ± 0%     ~     (all equal)
          Decode-4       502 ± 0%       429 ± 0%  -14.54%  (p=0.008 n=5+5)
          Encode-4       297 ± 0%       297 ± 0%     ~     (all equal)
      cad218c8
    • Kirill Smelkov's avatar
      tests: Add benchmarks for Decode and Encode · 3979c069
      Kirill Smelkov authored
      - use existing tests vector as input data
      - for Decode we prepare one large pickle stream from testv and decode all pickle from there
      - for Encode we prepare one lirge slice with all objects from testv and encode it
      
      On an i7-6600U currently it looks like:
      
          BenchmarkSpeed-4         5000000               387 ns/op             280 B/op          8 allocs/op
          BenchmarkDecode-4          20000             81892 ns/op           43989 B/op        502 allocs/op
          BenchmarkEncode-4         100000             16711 ns/op            6536 B/op        297 allocs/op
      3979c069
  4. 09 Mar, 2017 2 commits
  5. 08 Mar, 2017 7 commits
    • Kamil Kisiel's avatar
      Merge pull request #33 from navytux/fix2 · 1cb847a8
      Kamil Kisiel authored
      Make decode(encode(v)) to be identity + tuple
      1cb847a8
    • Kirill Smelkov's avatar
      encoder/decoder: Teach ogórek about tuple · f98f54b1
      Kirill Smelkov authored
      It is true that tuples and lists are very similar, and when e.g. a
      python function accepts tuple as input, and then uses only indexes
      access, it can be substituted with list.
      
      However some functions do `isinstance(..., tuple)` etc, and e.g. for a
      go program which wants to produce pickle for such python programs there
      is currently no way to generate pickle with tuple opcodes.
      
      So to solve this teach ogórek about tuples:
      
      - introduce simple Tuple type which has []interface{} as underlying
      - when decoding tuple opcodes produce this Tuple instead of
        []interface{} used previously.
      - when encoding encode Tuple with tuple opcodes.
      
      Otherwise Tuple can be seen and behaves like a regular go []interface{}
      slice. In fact the only difference is that runtime type of Tuple is
      different from runtime type of []interface{} but otherwise both values
      are the same and can be casted to each other if/when needed freely.
      
      NOTE opReduce decoder is adjusted to always require tuple, not list,
      because with e.g. cPickle:
      
          "c__main__\nf\n]R." -> TypeError('argument list must be a tuple', ...)
          "c__main__\nf\n)R." -> ok
      
      ( the first one uses empty list - "]", and the second one empty tuple - ")" )
      
      So it is ok and compatible to always require args to be tuple for
      reduce.
      f98f54b1
    • Kirill Smelkov's avatar
      encoder: Adjust it so that decode(encode(v)) == v · 4fd6be93
      Kirill Smelkov authored
      That is so that decode·encode becomes identity.
      
      For the other way
      
      	encode(decode(pickle)) == pickle
      
      it is generally not possible to do, because pickle machine is almost
      general machine, and it is possible to e.g. have some prefix in program
      which is NOP or result of which is no longer used, use different opcodes
      to build list or tuple etc.
      
      Adjustments to encoder are:
      
      - teach it to encode big.Int back to opLong (not some struct)
      - teach it to encode Call back to opReduce (not some struct)
      
      Tests are adjusted to verify that `decode(encode(v)) == v` holds for
      all inputs in test vector.
      4fd6be93
    • Kirill Smelkov's avatar
      decoder: tests: Don't forget to print test input name on "no EOF" case · fd5b2c0c
      Kirill Smelkov authored
      Else it prints just "no EOF" and it is not clear for which input the
      problem is there.
      fd5b2c0c
    • Kirill Smelkov's avatar
      decoder: tests: When decode result is unexpected - report it with full details · 8b9c271e
      Kirill Smelkov authored
      that is with %#v instead of %q. Because e.g. %q for nil []byte will be
      printing still as "", not nil etc. When some decode test fails here we
      want to get full information, not some pretty one.
      8b9c271e
    • Kirill Smelkov's avatar
      decoder: Don't skip errors in ASCII long format · 6d5eaca2
      Kirill Smelkov authored
      1. the number has to be terminated with 'L' - check it
         (previously last byte was simply discarded)
      
      2. big.Int.SetString() ok code has to be checked too to catch invalid
         input.
      
      big.Int.SetString() usage in test adjusted to also not skip errors
      silently.
      6d5eaca2
    • Kirill Smelkov's avatar
      decoder: Fix crashes found by fuzzer (#32) · da5f0342
      Kirill Smelkov authored
      * decoder: Don't forget to check memo for key not there on read access
      
      If we do not do reading from memo will return memo's zero value (= nil),
      which is
      
      a) not correct - many memo keys could be read this way, and
      b) nil there on stack breaks invariants of stack containing only good
         values.
      
      Furthermore, it can even lead to crashes on e.g. calling
      reflect.TypeOf(stack.top()) in the next patch.
      
      Anyway getting something from memo must be checked for whether it there
      or not for correctness.
      
      Noticed while working on fix for #30.
      
      * decoder: Fix "panic: runtime error: hash of unhashable type ..."
      
      Go specification requires that only comparable types could be used as
      map keys:
      
          https://golang.org/ref/spec#Map_types
      
      For map[interface{}]... this is checked at runtime, and if concrete
      value used as a key is not comparable it results in runtime panic, e.g.:
      
          panic: runtime error: hash of unhashable type ogórek.Call
      
          goroutine 1 [running]:
          github.com/kisielk/og-rek.(*Decoder).loadDict(0xc420084360, 0x64, 0x0)
                  /tmp/go-fuzz-build561441550/gopath/src/github.com/kisielk/og-rek/ogorek.go:655 +0x18c
          github.com/kisielk/og-rek.Decoder.Decode(0xc42001c3c0, 0x5a9300, 0x0, 0x0, 0xc4200164b0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
                  /tmp/go-fuzz-build561441550/gopath/src/github.com/kisielk/og-rek/ogorek.go:187 +0x172b
          github.com/kisielk/og-rek.Fuzz(0x7ff901592000, 0xa, 0x200000, 0x3)
                  /tmp/go-fuzz-build561441550/gopath/src/github.com/kisielk/og-rek/fuzz.go:12 +0x108
          go-fuzz-dep.Main(0x50d830)
                  /tmp/go-fuzz-build561441550/goroot/src/go-fuzz-dep/main.go:49 +0xd9
          main.main()
                  /tmp/go-fuzz-build561441550/gopath/src/github.com/kisielk/og-rek/go.fuzz.main/main.go:10 +0x2d
          exit status 2
      
      so when decoding dict and friends - all places where maps are populated - we
      have to check whether an object on stack we are going to use as key is suitable.
      
      Issue #30 contains comparison of 2 ways to do such check - catch
      runtime panic in exception style manner or use
      reflect.TypeOf(v).Comparable(). Since reflect-way turns out to be faster
      
      https://github.com/kisielk/og-rek/issues/30#issuecomment-283609067
      
      and likely will become more faster in the future:
      
      https://github.com/golang/go/issues/19361
      
      it was decided to go the reflect way (which is also a canonical way in
      go land).
      
      So audit all places where map items are set and add appropriate checks
      before them.
      
      I've verified that if we remove any of the added checks, via so far found
      crash vectors, at least one crash case will reappear in tests. This
      means that all added checks are actually test covered.
      
      Updates: #30
      
      * decoder: Don't forget to check for odd #elements in loadDict & friends
      
      e.g. for Dict opcode the expected stack state is
      
      	MARK key1 obj1 key2 obj2 ... keyN objN DICT
      
      so if in between MARK and DICT there is odd number of elements this is
      an error in input data. We also used to crash on such cases, e.g.:
      
              "(\x88d"
      
              panic: runtime error: index out of range
      
              goroutine 1 [running]:
              github.com/kisielk/og-rek.(*Decoder).loadDict(0xc420082990, 0xc42000e464, 0x0)
                      /tmp/go-fuzz-build403415384/gopath/src/github.com/kisielk/og-rek/ogorek.go:652 +0x21d
              github.com/kisielk/og-rek.Decoder.Decode(0xc42001c7e0, 0x5a9320, 0x0, 0x0, 0xc4200167b0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
                      /tmp/go-fuzz-build403415384/gopath/src/github.com/kisielk/og-rek/ogorek.go:188 +0x172d
              github.com/kisielk/og-rek.Fuzz(0x7f6d1f310000, 0x3, 0x200000, 0x3)
                      /tmp/go-fuzz-build403415384/gopath/src/github.com/kisielk/og-rek/fuzz.go:12 +0x108
              go-fuzz-dep.Main(0x50d798)
                      /tmp/go-fuzz-build403415384/goroot/src/go-fuzz-dep/main.go:49 +0xd9
              main.main()
                      /tmp/go-fuzz-build403415384/gopath/src/github.com/kisielk/og-rek/go.fuzz.main/main.go:10 +0x2d
      
      I've audited whole decoder and regarding odd #(elements) there are only 2
      places to care: loadDict and loadSetItems and crashers for all of them were
      already found by fuzz testing.
      
      Fixes #30 (for all known cases so far).
      da5f0342
  6. 01 Mar, 2017 3 commits
  7. 28 Feb, 2017 9 commits
    • Kamil Kisiel's avatar
      Update README.md · e3ff867d
      Kamil Kisiel authored
      e3ff867d
    • Kamil Kisiel's avatar
      Expanded corpus after more fuzzing · 55591958
      Kamil Kisiel authored
      55591958
    • Kamil Kisiel's avatar
      Ignore fuzz build products. · ea193550
      Kamil Kisiel authored
      ea193550
    • Kamil Kisiel's avatar
      Fix Go stack overflows resulting from printing types generated by malformed data. · 572d0a6a
      Kamil Kisiel authored
      For example:
      
      runtime: goroutine stack exceeds 1000000000-byte limit
      fatal error: stack overflow
      
      runtime stack:
      runtime.throw(0x100a3d, 0xe)
              /var/folders/dx/9jnx9d2j2kg8n35xgcsxjfyr0000gn/T/go-fuzz-build069870222/goroot/src/runtime/panic.go:566 +0x95
      runtime.newstack()
              /var/folders/dx/9jnx9d2j2kg8n35xgcsxjfyr0000gn/T/go-fuzz-build069870222/goroot/src/runtime/stack.go:1061 +0x416
      runtime.morestack()
              /var/folders/dx/9jnx9d2j2kg8n35xgcsxjfyr0000gn/T/go-fuzz-build069870222/goroot/src/runtime/asm_amd64.s:366 +0x7f
      
      goroutine 1 [running]:
      runtime.resolveNameOff(0xdeec0, 0x1916, 0x260e6ecb713)
              /var/folders/dx/9jnx9d2j2kg8n35xgcsxjfyr0000gn/T/go-fuzz-build069870222/goroot/src/runtime/type.go:168 fp=0xc4400f02c0 sp=0xc4400f02b8
      reflect.resolveNameOff(0xdeec0, 0x1916, 0x0)
              /var/folders/dx/9jnx9d2j2kg8n35xgcsxjfyr0000gn/T/go-fuzz-build069870222/goroot/src/runtime/runtime1.go:493 +0x33 fp=0xc4400f02e8 sp=0xc4400f02c0
      reflect.(*rtype).nameOff(0xdeec0, 0xc400001916, 0x0)
              /var/folders/dx/9jnx9d2j2kg8n35xgcsxjfyr0000gn/T/go-fuzz-build069870222/goroot/src/reflect/type.go:663 +0x4b fp=0xc4400f0310 sp=0xc4400f02e8
      reflect.(*rtype).String(0xdeec0, 0xc42000e9e0, 0x98)
              /var/folders/dx/9jnx9d2j2kg8n35xgcsxjfyr0000gn/T/go-fuzz-build069870222/goroot/src/reflect/type.go:733 +0x4e fp=0xc4400f0350 sp=0xc4400f0310
      fmt.(*pp).badVerb(0xc4200180c0, 0x74)
              /var/folders/dx/9jnx9d2j2kg8n35xgcsxjfyr0000gn/T/go-fuzz-build069870222/goroot/src/fmt/print.go:324 +0x590 fp=0xc4400f03e8 sp=0xc4400f0350
      fmt.(*pp).fmtString(0xc4200180c0, 0x0, 0x0, 0x74)
              /var/folders/dx/9jnx9d2j2kg8n35xgcsxjfyr0000gn/T/go-fuzz-build069870222/goroot/src/fmt/print.go:441 +0x119 fp=0xc4400f0420 sp=0xc4400f03e8
      fmt.(*pp).printValue(0xc4200180c0, 0xdeec0, 0xc42000e9e0, 0x98, 0x74, 0x108419)
              /var/folders/dx/9jnx9d2j2kg8n35xgcsxjfyr0000gn/T/go-fuzz-build069870222/goroot/src/fmt/print.go:715 +0x294d fp=0xc4400f0610 sp=0xc4400f0420
      fmt.(*pp).printValue(0xc4200180c0, 0xea6e0, 0xc42000e9e0, 0x99, 0xc400000074, 0x108418)
              /var/folders/dx/9jnx9d2j2kg8n35xgcsxjfyr0000gn/T/go-fuzz-build069870222/goroot/src/fmt/print.go:764 +0x2ec6 fp=0xc4400f0800 sp=0xc4400f0610
      fmt.(*pp).printValue(0xc4200180c0, 0xe5960, 0xc42000a5d0, 0x194, 0x74, 0x108417)
              /var/folders/dx/9jnx9d2j2kg8n35xgcsxjfyr0000gn/T/go-fuzz-build069870222/goroot/src/fmt/print.go:777 +0x24a3 fp=0xc4400f09f0 sp=0xc4400f0800
      fmt.(*pp).printValue(0xc4200180c0, 0xdd140, 0xc42000ea00, 0x97, 0xc400000074, 0x108416)
              /var/folders/dx/9jnx9d2j2kg8n35xgcsxjfyr0000gn/T/go-fuzz-build069870222/goroot/src/fmt/print.go:824 +0xf51 fp=0xc4400f0be0 sp=0xc4400f09f0
      fmt.(*pp).printValue(0xc4200180c0, 0xe5960, 0xc42000ea30, 0x194, 0x74, 0x108415)
              /var/folders/dx/9jnx9d2j2kg8n35xgcsxjfyr0000gn/T/go-fuzz-build069870222/goroot/src/fmt/print.go:777 +0x24a3 fp=0xc4400f0dd0 sp=0xc4400f0be0
      fmt.(*pp).printValue(0xc4200180c0, 0xdd140, 0xc42000ea40, 0x97, 0xc400000074, 0x108414)
              /var/folders/dx/9jnx9d2j2kg8n35xgcsxjfyr0000gn/T/go-fuzz-build069870222/goroot/src/fmt/print.go:824 +0xf51 fp=0xc4400f0fc0 sp=0xc4400f0dd0
      fmt.(*pp).printValue(0xc4200180c0, 0xe5960, 0xc4200105a0, 0x194, 0x74, 0x108413)
              /var/folders/dx/9jnx9d2j2kg8n35xgcsxjfyr0000gn/T/go-fuzz-build069870222/goroot/src/fmt/print.go:777 +0x24a3 fp=0xc4400f11b0 sp=0xc4400f0fc0
      fmt.(*pp).printValue(0xc4200180c0, 0xdd140, 0xc42000ea80, 0x97, 0xc400000074, 0x108412)
              /var/folders/dx/9jnx9d2j2kg8n35xgcsxjfyr0000gn/T/go-fuzz-build069870222/goroot/src/fmt/print.go:824 +0xf51 fp=0xc4400f13a0 sp=0xc4400f11b0
      fmt.(*pp).printValue(0xc4200180c0, 0xe5960, 0xc4200105b0, 0x194, 0x74, 0x108411)
              /var/folders/dx/9jnx9d2j2kg8n35xgcsxjfyr0000gn/T/go-fuzz-build069870222/goroot/src/fmt/print.go:777 +0x24a3 fp=0xc4400f1590 sp=0xc4400f13a0
      fmt.(*pp).printValue(0xc4200180c0, 0xdd140, 0xc42000ea80, 0x97, 0xc400000074, 0x108410)
              /var/folders/dx/9jnx9d2j2kg8n35xgcsxjfyr0000gn/T/go-fuzz-build069870222/goroot/src/fmt/print.go:824 +0xf51 fp=0xc4400f1780 sp=0xc4400f1590
      
      ... etc
      572d0a6a
    • Kamil Kisiel's avatar
      Add fuzz corpus · 80ae5a1a
      Kamil Kisiel authored
      80ae5a1a
    • Kamil Kisiel's avatar
      Add fuzz tests · ad41689a
      Kamil Kisiel authored
      ad41689a
    • Kamil Kisiel's avatar
      Merge pull request #28 from navytux/fix1 · e25dfe7a
      Kamil Kisiel authored
      decoder: Stack overflow handling fixes
      e25dfe7a
    • Kirill Smelkov's avatar
      decoder: Stack overflow handling fixes · 2a013587
      Kirill Smelkov authored
      I was going through decoder code and noticed in many places pickle
      machine stack was popped / used without checks for overflow (whether
      e.g. there are elements at all).
      
      To catch/test the bugs the following approach can be used: we take all
      our decoder test input vectors, and similar to a5094338 - where we were
      truncating it at tail to test how unexpected EOF is handled, we can cut
      some starting prefix from input and pass it to decode.
      
      This way if there was some instructions to prepare data and later to use
      the data, in skipped form there will be only "use data" instructions and
      without data on stack and proper stack overflow handling it will panic.
      
      Fix it all over the place.
      
      For the reference here is how added test fails without actual decoder
      fixes:
      
      	ogorek_test.go:112: int: panic on input[3:]: runtime error: index out of range
      	ogorek_test.go:112: float: panic on input[1:]: runtime error: index out of range
      	ogorek_test.go:112: float: panic on input[2:]: runtime error: index out of range
      	ogorek_test.go:112: float: panic on input[3:]: runtime error: index out of range
      	ogorek_test.go:112: float: panic on input[6:]: runtime error: index out of range
      	ogorek_test.go:112: long: panic on input[1:]: runtime error: index out of range
      	ogorek_test.go:112: long: panic on input[2:]: runtime error: index out of range
      	ogorek_test.go:112: long: panic on input[4:]: runtime error: index out of range
      	ogorek_test.go:112: long: panic on input[5:]: runtime error: index out of range
      	ogorek_test.go:112: long: panic on input[6:]: runtime error: index out of range
      	ogorek_test.go:112: long: panic on input[8:]: runtime error: index out of range
      	ogorek_test.go:112: long: panic on input[9:]: runtime error: index out of range
      	ogorek_test.go:112: long: panic on input[11:]: runtime error: index out of range
      	ogorek_test.go:112: long: panic on input[14:]: runtime error: index out of range
      	ogorek_test.go:112: long: panic on input[15:]: runtime error: index out of range
      	ogorek_test.go:112: long: panic on input[17:]: runtime error: index out of range
      	ogorek_test.go:112: long: panic on input[18:]: runtime error: index out of range
      	ogorek_test.go:112: long: panic on input[20:]: runtime error: slice bounds out of range
      	ogorek_test.go:112: long: panic on input[21:]: runtime error: slice bounds out of range
      	ogorek_test.go:112: long: panic on input[23:]: runtime error: index out of range
      	ogorek_test.go:112: None: panic on input[1:]: runtime error: index out of range
      	ogorek_test.go:112: empty tuple: panic on input[1:]: runtime error: index out of range
      	ogorek_test.go:112: empty tuple: panic on input[2:]: runtime error: index out of range
      	ogorek_test.go:112: tuple of two ints: panic on input[5:]: runtime error: index out of range
      	ogorek_test.go:112: tuple of two ints: panic on input[7:]: runtime error: index out of range
      	ogorek_test.go:112: tuple of two ints: panic on input[8:]: runtime error: index out of range
      	ogorek_test.go:112: tuple of two ints: panic on input[9:]: runtime error: index out of range
      	ogorek_test.go:112: tuple of two ints: panic on input[11:]: runtime error: index out of range
      	ogorek_test.go:112: nested tuples: panic on input[6:]: runtime error: index out of range
      	ogorek_test.go:112: nested tuples: panic on input[8:]: runtime error: index out of range
      	ogorek_test.go:112: nested tuples: panic on input[9:]: runtime error: index out of range
      	ogorek_test.go:112: nested tuples: panic on input[10:]: runtime error: index out of range
      	ogorek_test.go:112: nested tuples: panic on input[19:]: runtime error: index out of range
      	ogorek_test.go:112: nested tuples: panic on input[20:]: runtime error: index out of range
      	ogorek_test.go:112: nested tuples: panic on input[23:]: runtime error: index out of range
      	ogorek_test.go:112: nested tuples: panic on input[24:]: runtime error: index out of range
      	ogorek_test.go:112: nested tuples: panic on input[25:]: runtime error: index out of range
      	ogorek_test.go:112: nested tuples: panic on input[27:]: runtime error: index out of range
      	ogorek_test.go:112: tuple with top 1 items from stack: panic on input[1:]: runtime error: index out of range
      	ogorek_test.go:112: tuple with top 1 items from stack: panic on input[3:]: runtime error: slice bounds out of range
      	ogorek_test.go:112: tuple with top 1 items from stack: panic on input[4:]: runtime error: index out of range
      	ogorek_test.go:112: tuple with top 2 items from stack: panic on input[1:]: runtime error: index out of range
      	ogorek_test.go:112: tuple with top 2 items from stack: panic on input[3:]: runtime error: slice bounds out of range
      	ogorek_test.go:112: tuple with top 2 items from stack: panic on input[6:]: runtime error: slice bounds out of range
      	ogorek_test.go:112: tuple with top 2 items from stack: panic on input[7:]: runtime error: index out of range
      	ogorek_test.go:112: tuple with top 3 items from stack: panic on input[1:]: runtime error: index out of range
      	ogorek_test.go:112: tuple with top 3 items from stack: panic on input[3:]: runtime error: slice bounds out of range
      	ogorek_test.go:112: tuple with top 3 items from stack: panic on input[6:]: runtime error: slice bounds out of range
      	ogorek_test.go:112: tuple with top 3 items from stack: panic on input[7:]: runtime error: index out of range
      	ogorek_test.go:112: tuple with top 3 items from stack: panic on input[9:]: runtime error: slice bounds out of range
      	ogorek_test.go:112: tuple with top 3 items from stack: panic on input[10:]: runtime error: index out of range
      	ogorek_test.go:112: empty list: panic on input[1:]: runtime error: index out of range
      	ogorek_test.go:112: empty list: panic on input[2:]: runtime error: index out of range
      	ogorek_test.go:112: empty list: panic on input[3:]: runtime error: index out of range
      	ogorek_test.go:112: empty list: panic on input[5:]: runtime error: index out of range
      	ogorek_test.go:112: list of numbers: panic on input[1:]: runtime error: index out of range
      	ogorek_test.go:112: list of numbers: panic on input[2:]: runtime error: index out of range
      	ogorek_test.go:112: list of numbers: panic on input[3:]: runtime error: index out of range
      	ogorek_test.go:112: list of numbers: panic on input[5:]: runtime error: index out of range
      	ogorek_test.go:112: list of numbers: panic on input[8:]: runtime error: index out of range
      	ogorek_test.go:112: list of numbers: panic on input[9:]: runtime error: index out of range
      	ogorek_test.go:112: list of numbers: panic on input[10:]: runtime error: index out of range
      	ogorek_test.go:112: list of numbers: panic on input[12:]: runtime error: index out of range
      	ogorek_test.go:112: list of numbers: panic on input[13:]: runtime error: index out of range
      	ogorek_test.go:112: list of numbers: panic on input[16:]: runtime error: index out of range
      	ogorek_test.go:112: list of numbers: panic on input[17:]: runtime error: index out of range
      	ogorek_test.go:112: list of numbers: panic on input[20:]: runtime error: index out of range
      	ogorek_test.go:112: list of numbers: panic on input[21:]: runtime error: index out of range
      	ogorek_test.go:112: string: panic on input[2:]: runtime error: index out of range
      	ogorek_test.go:112: string: panic on input[7:]: runtime error: index out of range
      	ogorek_test.go:112: string: panic on input[8:]: runtime error: index out of range
      	ogorek_test.go:112: string: panic on input[10:]: runtime error: index out of range
      	ogorek_test.go:112: unicode: panic on input[2:]: runtime error: index out of range
      	ogorek_test.go:112: unicode: panic on input[5:]: runtime error: index out of range
      	ogorek_test.go:112: unicode: panic on input[8:]: runtime error: index out of range
      	ogorek_test.go:112: unicode: panic on input[11:]: runtime error: index out of range
      	ogorek_test.go:112: unicode: panic on input[14:]: runtime error: index out of range
      	ogorek_test.go:112: unicode: panic on input[16:]: runtime error: index out of range
      	ogorek_test.go:112: unicode: panic on input[18:]: runtime error: index out of range
      	ogorek_test.go:112: unicode: panic on input[20:]: runtime error: index out of range
      	ogorek_test.go:112: unicode: panic on input[21:]: runtime error: index out of range
      	ogorek_test.go:112: unicode: panic on input[23:]: runtime error: index out of range
      	ogorek_test.go:112: unicode2: panic on input[4:]: runtime error: index out of range
      	ogorek_test.go:112: unicode2: panic on input[7:]: runtime error: index out of range
      	ogorek_test.go:112: unicode2: panic on input[10:]: runtime error: index out of range
      	ogorek_test.go:112: unicode2: panic on input[12:]: runtime error: index out of range
      	ogorek_test.go:112: unicode2: panic on input[16:]: runtime error: index out of range
      	ogorek_test.go:112: unicode2: panic on input[22:]: runtime error: index out of range
      	ogorek_test.go:112: unicode2: panic on input[28:]: runtime error: index out of range
      	ogorek_test.go:112: unicode2: panic on input[30:]: runtime error: index out of range
      	ogorek_test.go:112: unicode2: panic on input[31:]: runtime error: index out of range
      	ogorek_test.go:112: unicode2: panic on input[34:]: runtime error: index out of range
      	ogorek_test.go:112: unicode2: panic on input[36:]: runtime error: index out of range
      	ogorek_test.go:112: unicode2: panic on input[40:]: runtime error: index out of range
      	ogorek_test.go:112: unicode2: panic on input[46:]: runtime error: index out of range
      	ogorek_test.go:112: unicode2: panic on input[48:]: runtime error: index out of range
      	ogorek_test.go:112: unicode2: panic on input[49:]: runtime error: index out of range
      	ogorek_test.go:112: unicode2: panic on input[52:]: runtime error: index out of range
      	ogorek_test.go:112: unicode2: panic on input[58:]: runtime error: index out of range
      	ogorek_test.go:112: unicode2: panic on input[60:]: runtime error: index out of range
      	ogorek_test.go:112: unicode2: panic on input[62:]: runtime error: index out of range
      	ogorek_test.go:112: unicode2: panic on input[64:]: runtime error: index out of range
      	ogorek_test.go:112: unicode2: panic on input[67:]: runtime error: index out of range
      	ogorek_test.go:112: unicode2: panic on input[68:]: runtime error: index out of range
      	ogorek_test.go:112: unicode2: panic on input[70:]: runtime error: index out of range
      	ogorek_test.go:112: unicode2: panic on input[73:]: runtime error: index out of range
      	ogorek_test.go:112: unicode2: panic on input[76:]: runtime error: index out of range
      	ogorek_test.go:112: unicode2: panic on input[79:]: runtime error: index out of range
      	ogorek_test.go:112: unicode2: panic on input[82:]: runtime error: index out of range
      	ogorek_test.go:112: unicode2: panic on input[86:]: runtime error: index out of range
      	ogorek_test.go:112: unicode2: panic on input[88:]: runtime error: index out of range
      	ogorek_test.go:112: unicode2: panic on input[91:]: runtime error: index out of range
      	ogorek_test.go:112: unicode2: panic on input[92:]: runtime error: index out of range
      	ogorek_test.go:112: unicode2: panic on input[94:]: runtime error: index out of range
      	ogorek_test.go:112: unicode2: panic on input[96:]: runtime error: index out of range
      	ogorek_test.go:112: unicode2: panic on input[97:]: runtime error: index out of range
      	ogorek_test.go:112: unicode2: panic on input[98:]: runtime error: index out of range
      	ogorek_test.go:112: unicode2: panic on input[100:]: runtime error: index out of range
      	ogorek_test.go:112: empty dict: panic on input[1:]: runtime error: index out of range
      	ogorek_test.go:112: empty dict: panic on input[2:]: runtime error: index out of range
      	ogorek_test.go:112: empty dict: panic on input[3:]: runtime error: index out of range
      	ogorek_test.go:112: empty dict: panic on input[5:]: runtime error: index out of range
      	ogorek_test.go:112: dict with strings: panic on input[1:]: runtime error: index out of range
      	ogorek_test.go:112: dict with strings: panic on input[2:]: runtime error: index out of range
      	ogorek_test.go:112: dict with strings: panic on input[3:]: runtime error: index out of range
      	ogorek_test.go:112: dict with strings: panic on input[5:]: runtime error: index out of range
      	ogorek_test.go:112: dict with strings: panic on input[7:]: runtime error: index out of range
      	ogorek_test.go:112: dict with strings: panic on input[10:]: runtime error: index out of range
      	ogorek_test.go:112: dict with strings: panic on input[13:]: runtime error: index out of range
      	ogorek_test.go:112: dict with strings: panic on input[18:]: runtime error: index out of range
      	ogorek_test.go:112: dict with strings: panic on input[19:]: runtime error: index out of range
      	ogorek_test.go:112: dict with strings: panic on input[21:]: runtime error: index out of range
      	ogorek_test.go:112: dict with strings: panic on input[22:]: runtime error: index out of range
      	ogorek_test.go:112: dict with strings: panic on input[27:]: runtime error: index out of range
      	ogorek_test.go:112: dict with strings: panic on input[30:]: runtime error: index out of range
      	ogorek_test.go:112: dict with strings: panic on input[32:]: runtime error: index out of range
      	ogorek_test.go:112: dict with strings: panic on input[35:]: runtime error: index out of range
      	ogorek_test.go:112: dict with strings: panic on input[38:]: runtime error: index out of range
      	ogorek_test.go:112: dict with strings: panic on input[39:]: runtime error: index out of range
      	ogorek_test.go:112: GLOBAL and REDUCE opcodes: panic on input[6:]: runtime error: index out of range
      	ogorek_test.go:112: GLOBAL and REDUCE opcodes: panic on input[7:]: runtime error: index out of range
      	ogorek_test.go:112: GLOBAL and REDUCE opcodes: panic on input[9:]: runtime error: index out of range
      	ogorek_test.go:112: GLOBAL and REDUCE opcodes: panic on input[14:]: runtime error: index out of range
      	ogorek_test.go:112: GLOBAL and REDUCE opcodes: panic on input[17:]: runtime error: slice bounds out of range
      	ogorek_test.go:112: GLOBAL and REDUCE opcodes: panic on input[18:]: runtime error: index out of range
      	ogorek_test.go:112: GLOBAL and REDUCE opcodes: panic on input[19:]: runtime error: index out of range
      	ogorek_test.go:112: LONG_BINPUT opcode: panic on input[1:]: runtime error: index out of range
      	ogorek_test.go:112: LONG_BINPUT opcode: panic on input[2:]: runtime error: index out of range
      	ogorek_test.go:112: LONG_BINPUT opcode: panic on input[3:]: runtime error: index out of range
      	ogorek_test.go:112: LONG_BINPUT opcode: panic on input[4:]: runtime error: index out of range
      	ogorek_test.go:112: LONG_BINPUT opcode: panic on input[5:]: runtime error: index out of range
      	ogorek_test.go:112: LONG_BINPUT opcode: panic on input[6:]: runtime error: index out of range
      	ogorek_test.go:112: LONG_BINPUT opcode: panic on input[7:]: runtime error: index out of range
      	ogorek_test.go:112: LONG_BINPUT opcode: panic on input[11:]: runtime error: index out of range
      	ogorek_test.go:112: LONG_BINPUT opcode: panic on input[12:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[3:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[5:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[6:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[8:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[9:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[12:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[13:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[14:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[15:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[16:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[17:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[19:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[20:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[22:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[23:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[32:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[41:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[50:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[53:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[59:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[68:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[77:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[80:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[86:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[89:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[95:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[104:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[113:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[122:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[131:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[140:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[149:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[150:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[151:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[152:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[154:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[155:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[156:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[157:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[158:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[159:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[161:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[165:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[166:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[168:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[169:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[170:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[171:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[172:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[174:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[179:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[181:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[183:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[184:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[186:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[190:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[191:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[194:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[196:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[197:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[199:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[205:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[214:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[223:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[232:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[242:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[246:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[248:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[249:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message1: panic on input[250:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[1:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[2:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[3:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[5:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[6:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[7:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[10:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[12:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[13:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[14:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[15:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[16:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[19:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[20:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[22:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[29:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[31:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[32:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[34:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[35:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[37:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[38:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[39:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[40:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[43:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[46:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[50:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[51:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[53:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[54:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[56:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[58:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[61:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[64:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[73:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[74:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[76:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[77:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[80:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[81:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[82:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[83:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[84:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[87:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[90:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[91:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[92:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[95:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[99:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[100:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[102:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[103:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[107:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[108:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[110:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[111:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[114:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[115:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[116:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[118:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[119:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[124:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[125:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[127:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[128:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[131:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[133:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[134:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[136:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[137:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[141:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[142:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[143:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[145:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[146:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[147:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[148:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[151:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[152:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[154:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[155:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[158:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[159:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[160:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[161:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[163:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[164:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[169:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[170:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[172:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[173:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[174:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[178:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[179:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[181:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[182:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[183:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[187:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[188:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[190:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[191:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[192:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[193:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[195:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[196:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[197:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[199:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[200:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[201:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[202:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[205:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[206:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[208:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[209:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[213:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[214:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[215:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[217:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[218:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[219:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[220:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[221:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[222:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[223:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[226:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[228:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[231:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[234:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[236:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[237:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[238:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[239:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[240:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[241:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[243:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[246:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[247:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[248:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[249:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[250:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[251:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[253:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[254:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[258:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[259:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[261:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[262:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[263:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[265:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[266:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[270:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[271:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[272:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[275:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[278:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[279:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message2: panic on input[280:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[1:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[2:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[5:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[6:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[7:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[8:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[10:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[14:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[15:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[16:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[18:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[19:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[20:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[23:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[26:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[27:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[28:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[31:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[32:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[35:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[36:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[37:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[39:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[41:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[42:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[43:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[47:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[50:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[52:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[53:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[54:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[58:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[59:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[60:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[61:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[63:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[64:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[67:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[70:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[71:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[74:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[75:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[76:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[77:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[81:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[84:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[85:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[86:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[88:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[89:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[90:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[91:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[92:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[95:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[98:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[99:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[100:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[103:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[104:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[107:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[109:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[110:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[111:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[115:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[116:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[117:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[118:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[119:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[120:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[121:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[122:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[123:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[125:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[128:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[129:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[130:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[132:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[133:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[136:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[137:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[138:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[140:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[141:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[142:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[143:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[144:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[148:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[151:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[152:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[153:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[154:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[155:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[157:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[158:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[161:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[163:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[164:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[165:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[169:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[170:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[171:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[172:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[173:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[175:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[178:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[182:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[183:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[186:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[187:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[188:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[190:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[191:]: runtime error: index out of range
      	ogorek_test.go:112: graphite message3: panic on input[192:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[8:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[13:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[14:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[15:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[19:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[32:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[33:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[34:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[36:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[38:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[40:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[42:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[44:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[48:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[52:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[61:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[64:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[65:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[77:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[81:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[90:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[97:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[98:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[106:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[117:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[118:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[137:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[138:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[141:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[146:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[156:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[157:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[158:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[170:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[173:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[189:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[194:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[214:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[225:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[226:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[229:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[230:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[234:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[236:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[237:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[241:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[242:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[275:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[276:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[277:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[280:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[281:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[283:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[285:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[286:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[290:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[291:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[296:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[298:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[299:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[315:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[349:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[352:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[353:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[354:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[359:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[360:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[375:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[380:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[385:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[390:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[399:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[409:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[414:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[482:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[491:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[516:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[530:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[535:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[546:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[549:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[554:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[555:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[567:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[568:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[572:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[573:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[574:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[577:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[578:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[580:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[582:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[583:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[587:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[588:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[595:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[597:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[598:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[599:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[602:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[605:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[607:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[612:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[613:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[614:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[615:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[622:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[623:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[628:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[631:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[632:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[641:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[642:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[646:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[651:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[653:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[654:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[656:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[658:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[661:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[666:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[671:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[673:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[681:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[683:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[686:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[689:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[691:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[694:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[698:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[701:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[704:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[706:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[711:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[721:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[726:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[736:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[738:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[741:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[744:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[746:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[751:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[754:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[756:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[759:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[761:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[766:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[771:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[774:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[776:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[781:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[786:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[788:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[791:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[796:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[799:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[801:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[802:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[804:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[810:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[817:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[819:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[822:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[824:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[834:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[840:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[841:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[845:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[846:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[850:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[851:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[852:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[854:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[860:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[865:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[870:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[871:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[875:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[876:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[880:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[881:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[882:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[889:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[890:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[896:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[899:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[908:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[909:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[913:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[918:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[923:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[929:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[930:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[934:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[958:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[968:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[973:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[975:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[977:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[978:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[983:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[992:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1020:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1028:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1032:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1037:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1045:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1046:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1047:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1048:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1068:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1077:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1088:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1112:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1115:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1122:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1123:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1132:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1135:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1137:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1140:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1145:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1150:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1155:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1156:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1159:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1190:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1191:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1195:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1196:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1200:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1204:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1205:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1210:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1212:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1215:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1221:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1238:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1244:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1252:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1255:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1258:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1259:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1267:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1279:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1280:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1303:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1309:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1323:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1324:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1328:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1334:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1338:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1359:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1366:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1378:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1381:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1382:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1412:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1415:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1420:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1430:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1435:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1437:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1440:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1445:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1450:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1460:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1462:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1467:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1483:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1484:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1500:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1504:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1505:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1509:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1518:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1523:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1525:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1528:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1533:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1540:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1545:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1550:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1558:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1605:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1609:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1610:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1614:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1615:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1619:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1644:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1645:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1654:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1659:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1661:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1694:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1708:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1713:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1727:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1732:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1737:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1738:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1741:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1749:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1751:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1771:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1776:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1811:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1815:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1816:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1819:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1820:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1824:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1825:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1829:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1831:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1834:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1836:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1839:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1844:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1845:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1846:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1849:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1850:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1866:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1869:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1874:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1885:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1889:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1895:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1905:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1919:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1924:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1926:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1980:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[1986:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2000:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2001:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2010:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2011:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2020:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2031:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2056:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2059:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2061:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2069:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2074:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2091:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2095:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2101:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2115:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2125:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2136:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2145:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2148:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2156:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2174:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2185:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2190:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2195:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2199:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2211:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2212:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2213:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2217:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2218:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2225:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2226:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2228:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2256:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2261:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2262:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2265:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2266:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2270:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2275:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2281:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2285:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2290:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2295:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2300:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2301:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2302:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2317:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2320:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2324:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2326:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2327:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2345:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2346:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2351:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2355:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2365:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2370:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2375:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2377:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2380:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2382:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2385:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2386:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2387:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2400:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2414:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2424:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2428:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2431:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2433:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2436:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2458:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2466:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2467:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2477:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2489:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2506:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2511:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2520:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2521:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2535:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2536:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2541:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2559:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2563:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2565:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2566:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2568:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2587:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2588:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2589:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2592:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2593:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2595:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2599:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2607:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2629:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2639:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2653:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2654:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2658:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2663:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2668:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2677:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2678:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2684:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2693:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2699:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2726:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2727:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2728:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2729:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2732:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2734:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2743:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2751:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2753:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2768:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2769:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2773:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2783:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2784:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2793:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2802:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2803:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2807:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2817:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2822:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2859:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2862:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2863:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2867:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2868:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2869:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2872:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2873:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2877:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2878:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2882:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2884:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2887:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2892:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2897:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2902:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2907:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2913:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2917:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2922:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2924:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2928:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2932:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2962:]: runtime error: index out of range
      	ogorek_test.go:112: too long line: panic on input[2970:]: runtime error: index out of range
      	ogorek_test.go:112: FRAME Opcode and int: panic on input[12:]: runtime error: index out of range
      	ogorek_test.go:112: SHORTBINUNICODE opcode: panic on input[11:]: runtime error: index out of range
      	ogorek_test.go:112: SHORTBINUNICODE opcode: panic on input[12:]: runtime error: index out of range
      2a013587
    • Kamil Kisiel's avatar
      Fix build status in README.md · be94c890
      Kamil Kisiel authored
      be94c890
  8. 16 Feb, 2017 3 commits
  9. 15 Feb, 2017 2 commits
    • Kirill Smelkov's avatar
      encoder: More unexpected EOF handling · a5094338
      Kirill Smelkov authored
      Continuing 995fce81 I've decided to rework unexpected EOF testing to run
      on truncated versions of all inputs we already have. This uncovered the
      following:
      
      - if an individual op decoder returns err=io.EOF - this is unexpected
        and should be turned into io.ErrUnexpectedEOF. If we do not do it
        shows as e.g.
      
              ogorek_test.go:91: int: no ErrUnexpectedEOF on [:1] truncated stream: v = <nil>  err = &errors.errorString{s:"EOF"}
      
      - there was a potential buffer overrun panic in loadString - the code
        there did not have proper check for line rest length after initial ".
        The panic looks like this:
      
      --- FAIL: TestDecode (0.00s)
      panic: runtime error: slice bounds out of range [recovered]
              panic: runtime error: slice bounds out of range
      
      goroutine 7 [running]:
      testing.tRunner.func1(0xc4200725b0)
              /home/kirr/src/tools/go/go/src/testing/testing.go:624 +0x267
      panic(0x5368c0, 0x603020)
              /home/kirr/src/tools/go/go/src/runtime/panic.go:489 +0x26e
      github.com/kisielk/og-rek.(*Decoder).loadString(0xc420063428, 0xc42000e153, 0x0)
              /home/kirr/src/wendelin/neo/g.neo/src/github.com/kisielk/og-rek/ogorek.go:478 +0x22d
      github.com/kisielk/og-rek.Decoder.Decode(0xc42012fbc0, 0x6248e8, 0x0, 0x0, 0xc42013ac60, 0x0, 0x0, 0x5f2480, 0xc42000e150)
              /home/kirr/src/wendelin/neo/g.neo/src/github.com/kisielk/og-rek/ogorek.go:166 +0xa83
      github.com/kisielk/og-rek.TestDecode(0xc4200725b0)
              /home/kirr/src/wendelin/neo/g.neo/src/github.com/kisielk/og-rek/ogorek_test.go:89 +0x26c7
      testing.tRunner(0xc4200725b0, 0x567618)
              /home/kirr/src/tools/go/go/src/testing/testing.go:659 +0x98
      created by testing.(*T).Run
              /home/kirr/src/tools/go/go/src/testing/testing.go:701 +0x2df
      exit status 2
      
        and can be triggered by single-character " input.
      
      - we also turn what was previously an "insecure string" into unexpected
        EOF. The reason here is: code could not find " in the end of the
        string. This can be for 2 reasons:
      
        1. EOF was reached, or
        2. EOL (end of line) was reached
      
        unfortunately since we are currently using bufio.Buffer.ReadLine()
        which does not indicate whether EOL was there or not and strips it
        from result, we cannot distinguish above cases and properly report
        "insecure string" in 2 case.
      
        However unexpected EOF even for #2 seems a bit reasonable, so I think
        the change should be ok.
      a5094338
    • Kirill Smelkov's avatar
      encoder: bytes.Buffer will never error on Write*() · d266ce2f
      Kirill Smelkov authored
      This is explicitly stated in bytes.Buffer documentation and is already
      relyed by ogórek in another place:
      
      https://github.com/kisielk/og-rek/blob/c7dbf2e4/ogorek.go#L524
      d266ce2f
  10. 14 Feb, 2017 5 commits
    • Kamil Kisiel's avatar
      Update README.md · c7dbf2e4
      Kamil Kisiel authored
      c7dbf2e4
    • Kamil Kisiel's avatar
      Update .travis.yml · 9474da06
      Kamil Kisiel authored
      9474da06
    • Kamil Kisiel's avatar
      Merge pull request #26 from navytux/fix1 · 90bef817
      Kamil Kisiel authored
      Misc fixes (error + opStop handling)
      90bef817
    • Kirill Smelkov's avatar
      decoder: Return EOF, not panic on a proper end of stream · 995fce81
      Kirill Smelkov authored
      io.EOF handling was already there in instructions decoding loop, but it
      was simply breaking out of the loop and in the end decode
      unconditionally was trying to pop top element from stack, and since
      stack is empty panicked. E.g. for "" input this way:
      
      --- FAIL: TestDecode (0.00s)
      panic: runtime error: index out of range [recovered]
              panic: runtime error: index out of range
      
      goroutine 20 [running]:
      testing.tRunner.func1(0xc4200765b0)
              /home/kirr/src/tools/go/go/src/testing/testing.go:624 +0x267
      panic(0x5368c0, 0x603010)
              /home/kirr/src/tools/go/go/src/runtime/panic.go:489 +0x26e
      github.com/kisielk/og-rek.Decoder.Decode(0xc4200ea5a0, 0x624908, 0x0, 0x0, 0xc4200e6b10, 0x52a180, 0xc4200ee308, 0x0, 0x0)
              /home/kirr/src/wendelin/neo/g.neo/src/github.com/kisielk/og-rek/ogorek.go:250 +0x4bb
      github.com/kisielk/og-rek.TestDecode(0xc4200765b0)
              /home/kirr/src/wendelin/neo/g.neo/src/github.com/kisielk/og-rek/ogorek_test.go:80 +0x232f
      testing.tRunner(0xc4200765b0, 0x567648)
              /home/kirr/src/tools/go/go/src/testing/testing.go:659 +0x98
      created by testing.(*T).Run
              /home/kirr/src/tools/go/go/src/testing/testing.go:701 +0x2df
      exit status 2
      
      Fix it via reworking EOF handling:
      
      - if we see EOF and no instructions was decoded so far - just return it
        to the caller
      
      - if we see EOF in the middle of the stream - as valid pickle streams
        end with Stop opcode - it is unexpected EOF - return it as such.
      
      A couple of tests had to be adjusted in TestDecode - as input there was
      not a valid pickle - not ending with "." (which python pickle decoder
      also does not decode at all).
      995fce81
    • Kirill Smelkov's avatar
      decoder: Really stop decoding on opStop opcode · 9f73742b
      Kirill Smelkov authored
      There was a break already on a `case opStop:` but break inside switch
      only breaks out of this switch, not outer construct - looks like it was
      a thinko.
      
      So on opStop let's explicitly break out of instruction processing loop.
      
      If we do not do so on e.g "I5\n.I7\n.N." input first call to .Decode()
      returns None (from N.), not 5 and second call to Decode() panics (for
      this see next patch).
      9f73742b
  11. 13 Feb, 2017 1 commit