@BRL - request: String indexing boundary checks

BlitzMax Forums/BlitzMax Programming/@BRL - request: String indexing boundary checks

what you see above is no string specific behavior
??? What does this mean? Is this valid BlitzMax code?
Strict
Framework brl.blitz

Import brl.linkedlist

Local Text:TList = CreateList ( )
WriteStdout Text [ -5 ] + "~n" 'Danger of undefined results!
WriteStdout Text [ -4 ] + "~n" 'Danger of undefined results!
WriteStdout Text [ -3 ] + "~n" 'Danger of undefined results!
WriteStdout Text [ -2 ] + "~n" 'Danger of undefined results!
WriteStdout Text [ -1 ] + "~n" 'Danger of undefined results!
WriteStdout Text [ 0 ] + "~n" 'Ok, returns: 84  -> T
WriteStdout Text [ 1 ] + "~n" 'Ok, returns: 101 -> e
WriteStdout Text [ 2 ] + "~n" 'Ok, returns: 120 -> x
WriteStdout Text [ 3 ] + "~n" 'Ok, returns: 116 -> t
WriteStdout Text [ 4 ] + "~n" 'Danger of undefined results!
WriteStdout Text [ 5 ] + "~n" 'Danger of undefined results!
WriteStdout Text [ 6 ] + "~n" 'Danger of undefined results!
WriteStdout Text [ 7 ] + "~n" 'Danger of undefined results!
WriteStdout Text [ 8 ] + "~n" 'Danger of undefined results!
You can only index arrays, strings and pointers (as far as I know).
actually index -4 and -8 have their own needs on objects and removing that until the stuff behind...
This almost sounds like I want to remove this memory? I just want that you aren't able to access the memory by indexing. The C code, which of course needs to access to the "class" and "refs" fields (index -4 and index -8 are not the actual names) of the object won't be effected by this.
String is no array object.
Yes, that's right, however, you'll see that strings and arrays have some things in common: both have a "changing object size" (that means that different instanced of the same class can have different sizes), both are hard coded in the bcc, both are sorted collections, both can be sliced, both can be indexed. It isn't that strange to expect that both have the same security checks.

However I'm currently thinking you muddle something up: Are you aware of the difference between
Local Text$ = "Text"
WriteStdout Text [ 3 ] + "~n"
and
Local Text$ = "Text"
WriteStdout ( ( Short Ptr Byte Ptr Object Text + 2 ) [ 3 ] + "~n" )
?
Although it is doing the same it is different: The first one directly indexes the string, so this is nearly the same like indexing an array. The second one does first convert the string object to a pointer, and then indexes the pointer. This of course should never be checked, since it is simply impossible to define the boundaries of a pointer. The second one could be called a "hack", because if you're doing this way you can get really strange results as soon as you just one time aren't 100% aware of what you're doing.
Wouldn't it be easier just using the functionality that is officially in for :String instead of using hack approaches like [x] on them?
Indexing an array is the same "hack" as indexing a string.
I would think this is a bug.
Actually I thought the same (so Dream's answer really surprised me); I just had a gut feeling saying me it would be better to post this as request...