# Do not allow SubString to grow

**URL:** <https://discourse.julialang.org/t/do-not-allow-substring-to-grow/4438>\
**Category:** Internals & Design\
**Tags:** proposal\
**Created:** [June 24, 2017, 5:52am UTC](https://discourse.julialang.org/t/do-not-allow-substring-to-grow/4438 "2017-06-24T05:52:04Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![bkamins](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bkamins/32/208538_2.png) [@bkamins](https://discourse.julialang.org/u/bkamins)\
**Post date:** [June 24, 2017, 5:52am UTC](https://discourse.julialang.org/t/do-not-allow-substring-to-grow/4438/1 "2017-06-24T05:52:04Z")

</div>

Consider the following code

```
x = "123\n"
y = chomp(x)
display(SubString(y, 1, 10)) # "123\n"

```

We see that means that we allow `SubString` to grow beyond its end.  
Is it a planned feature?  
I would expect that it should not be allowed. To fix this the following line [https://github.com/JuliaLang/julia/blob/master/base/strings/types.jl#L30](https://github.com/JuliaLang/julia/blob/master/base/strings/types.jl#L30) should be replaced by:

```
SubString(s::SubString, i::Int, j::Int) = SubString(s.string, s.offset+i, s.offset+min(endof(s), j))

```

---

<div class="post-metadata">

**Author:** ![stevengj](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stevengj/32/71_2.png) [@stevengj](https://discourse.julialang.org/u/stevengj)\
**Post date:** [June 24, 2017, 12:23pm UTC](https://discourse.julialang.org/t/do-not-allow-substring-to-grow/4438/2 "2017-06-24T12:23:53Z")

</div>

This seems like a bug, and a PR would be welcome.

---

<div class="post-metadata">

**Author:** ![ScottPJones](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/scottpjones/32/146_2.png) [@ScottPJones](https://discourse.julialang.org/u/ScottPJones)\
**Post date:** [June 24, 2017, 5:25pm UTC](https://discourse.julialang.org/t/do-not-allow-substring-to-grow/4438/3 "2017-06-24T17:25:25Z")

</div>

git blame points to me 😉 but that’s just because I reorganized the string support in Base back for v0.4.  
I just checked, the SubArray constructor has the same behavior (at least in v0.6.0), is that also a bug, or intended behavior for array views (personally, I’d count it as a bug, but not being a mathematician, not sure if there isn’t some LinAlg reason)

---

<div class="post-metadata">

**Author:** ![bkamins](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bkamins/32/208538_2.png) [@bkamins](https://discourse.julialang.org/u/bkamins)\
**Post date:** [June 24, 2017, 6:03pm UTC](https://discourse.julialang.org/t/do-not-allow-substring-to-grow/4438/4 "2017-06-24T18:03:37Z")

</div>

I will make a PR for `SubString`.  
With `SubArray` I am pretty convinced it is a bug:

```
x = ones(10);
y = SubArray(x, (-10:20,))

```

and you get garbage in `y`. But I would recommend someone having more experience with SubArrays to fix it.

---

<div class="post-metadata">

**Author:** ![bkamins](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bkamins/32/208538_2.png) [@bkamins](https://discourse.julialang.org/u/bkamins)\
**Post date:** [June 24, 2017, 6:28pm UTC](https://discourse.julialang.org/t/do-not-allow-substring-to-grow/4438/5 "2017-06-24T18:28:31Z")

</div>

PR for SubString [#22511](https://github.com/JuliaLang/julia/pull/22511).

---

<div class="post-metadata">

**Author:** ![anon94023334](https://avatars.discourse-cdn.com/v4/letter/a/e274bd/32.png) [@anon94023334](https://discourse.julialang.org/u/anon94023334)\
**Post date:** [June 24, 2017, 9:09pm UTC](https://discourse.julialang.org/t/do-not-allow-substring-to-grow/4438/6 "2017-06-24T21:09:20Z")

</div>

> [@bkamins](#):
>
> y = SubArray(x, (-10:20,))

This may be significant, as you can modify memory outside the data structure:

```julia
julia> y[1] = 5.0
5.0

julia> y[2] = 5.0
5.0

julia> y
31-element SubArray{Float64,1,Array{Float64,1},Tuple{UnitRange{Int64}},true}:
 5.0
 5.0
 2.18291e-314
 2.21477e-314
...

```

---

<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:** [July 1, 2017, 11:46pm UTC](https://discourse.julialang.org/t/do-not-allow-substring-to-grow/4438/7 "2017-07-01T23:46:21Z")

</div>

It was by design, but that design has evolved over time and we’re much more strict with string indexing than we originally were. A PR to changing this to raise an error would be welcomed (with tests to verify that an error is raised, of course).

---

<div class="post-metadata">

**Author:** ![bkamins](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bkamins/32/208538_2.png) [@bkamins](https://discourse.julialang.org/u/bkamins)\
**Post date:** [July 2, 2017, 4:59am UTC](https://discourse.julialang.org/t/do-not-allow-substring-to-grow/4438/8 "2017-07-02T04:59:27Z")

</div>

It is proposed in [#22511](https://github.com/JuliaLang/julia/pull/22511), but I am waiting with finishing it till [#22572](https://github.com/JuliaLang/julia/pull/22511) is merged as it is an underlying issue.
