# \[Possible Bug?\] Weird behavior with small negative indices in findnext()

**URL:** <https://discourse.julialang.org/t/possible-bug-weird-behavior-with-small-negative-indices-in-findnext/28057>\
**Category:** Internals & Design\
**Tags:** question\
**Created:** [August 27, 2019, 6:04pm UTC](https://discourse.julialang.org/t/possible-bug-weird-behavior-with-small-negative-indices-in-findnext/28057 "2019-08-27T18:04:44Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![AndrewQuinn2020](https://avatars.discourse-cdn.com/v4/letter/a/5e9695/32.png) [@AndrewQuinn2020](https://discourse.julialang.org/u/AndrewQuinn2020)\
**Post date:** [August 27, 2019, 6:04pm UTC](https://discourse.julialang.org/t/possible-bug-weird-behavior-with-small-negative-indices-in-findnext/28057/1 "2019-08-27T18:04:44Z")

</div>

Take a look at this, y’all, and tell me if this is a bug – I’ll step up later this week to fix it and write some `@test`s for it if so.

```julia
julia> versioninfo()
Julia Version 1.2.0
Commit c6da87ff4b (2019-08-20 00:03 UTC)
Platform Info:
  OS: Windows (x86_64-w64-mingw32)
  CPU: Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-6.0.1 (ORCJIT, skylake)
Environment:
  JULIA_EDITOR = "C:\Users\Andre\AppData\Local\atom\app-1.40.1\atom.exe" -a
  JULIA_NUM_THREADS = 4

julia> 

julia> 

julia> 

julia> findnext("Kitten", "Kitten", 1)
1:6

julia> # As expected. But...

julia> findnext("Kitten", "Kitten", 0)
1:6

julia> # Weird, but not totally out of the box.

julia> findnext("Kitten", "Kitten", -1)
1:6

julia> # Wait. What?

julia> findnext("Kitten", "Kitten", -2)
1:6

julia> findnext("Kitten", "Kitten", -3)
1:6

julia> findnext("Kitten", "Kitten", -4)
1:6

julia> findnext("Kitten", "Kitten", -5)
ERROR: BoundsError: attempt to access 6-element Array{UInt8,1} at index [0]
Stacktrace:
 [1] getindex at .\array.jl:728 [inlined]
 [2] _nthbyte at .\strings\search.jl:148 [inlined]
 [3] _searchindex(::Array{UInt8,1}, ::Array{UInt8,1}, ::Int64) at .\strings\search.jl:185
 [4] _searchindex(::String, ::String, ::Int64) at .\strings\search.jl:153
 [5] _search(::String, ::String, ::Int64) at .\strings\search.jl:220
 [6] findnext(::String, ::String, ::Int64) at .\strings\search.jl:256
 [7] top-level scope at none:0

julia> # WTF.

julia> findnext("supercalifragilisticexpialidocious", "supercalifragilisticexpialidocious", -5)
1:34

julia> findnext("supercalifragilisticexpialidocious", "supercalifragilisticexpialidocious", -10)
1:34

julia> findnext("supercalifragilisticexpialidocious", "supercalifragilisticexpialidocious", -15)
1:34

julia> findnext("supercalifragilisticexpialidocious", "supercalifragilisticexpialidocious", -20)
ERROR: BoundsError: attempt to access 34-element Array{UInt8,1} at index [-16]
Stacktrace:
 [1] getindex at .\array.jl:728 [inlined]
 [2] _nthbyte at .\strings\search.jl:148 [inlined]
 [3] _searchindex(::Array{UInt8,1}, ::Array{UInt8,1}, ::Int64) at .\strings\search.jl:189
 [4] _searchindex(::String, ::String, ::Int64) at .\strings\search.jl:153
 [5] _search(::String, ::String, ::Int64) at .\strings\search.jl:220
 [6] findnext(::String, ::String, ::Int64) at .\strings\search.jl:256
 [7] top-level scope at none:0

julia> # Seems like we can index up to - floor(half(array)). But I thought we weren't using negative indices for strings?     

```

Is this normal behavior?

---

<div class="post-metadata">

**Author:** ![AndrewQuinn2020](https://avatars.discourse-cdn.com/v4/letter/a/5e9695/32.png) [@AndrewQuinn2020](https://discourse.julialang.org/u/AndrewQuinn2020)\
**Post date:** [August 27, 2019, 6:31pm UTC](https://discourse.julialang.org/t/possible-bug-weird-behavior-with-small-negative-indices-in-findnext/28057/3 "2019-08-27T18:31:27Z")

</div>

Further thinking:

IIRC, `String`s are stated in the Julia manual IIRC to always have a first index of 1.

This may or may not be the case for other iterables, but since it is the case for `String`s, I do think that either throwing a `BoundsError` for a non-positive argument, or making any non-positive argument reroute to 1 so that any negative number should work, is wise. This behavior is counterintuitive otherwise, because as it is there’s some arbitrary negative `Int` that once you pass it you get `BoundsError`s.

---

<div class="post-metadata">

**Author:** ![StefanKarpinski](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stefankarpinski/32/24_2.png) [@StefanKarpinski](https://discourse.julialang.org/u/StefanKarpinski)\
**Post date:** [August 28, 2019, 2:18am UTC](https://discourse.julialang.org/t/possible-bug-weird-behavior-with-small-negative-indices-in-findnext/28057/4 "2019-08-28T02:18:53Z")

</div>

That does seem buggy. Do you mind filing an issue on GitHub?

---

<div class="post-metadata">

**Author:** ![AndrewQuinn2020](https://avatars.discourse-cdn.com/v4/letter/a/5e9695/32.png) [@AndrewQuinn2020](https://discourse.julialang.org/u/AndrewQuinn2020)\
**Post date:** [August 28, 2019, 12:02pm UTC](https://discourse.julialang.org/t/possible-bug-weird-behavior-with-small-negative-indices-in-findnext/28057/5 "2019-08-28T12:02:03Z")

</div>

Done. 🙂

[https://github.com/JuliaLang/julia/issues/33100](https://github.com/JuliaLang/julia/issues/33100)
