slength is advertised to return the length of a string, which it does correctly:
slength("foo") => 3
However, for non-strings, it has strange behavior (testing in 5.13.0):
slength(foo) => 4 (one too long)
slength(200) => 1 (interpreting integer as a ASCII character)
slength(200.0) => internal error
slength(300) => internal error
slength(a+b) => internal error
It should either give a clean Maxima error in all these cases, or return a reasonable result.
You might think the reasonable result would be slength(string(...)), but that would make slength("foo") => 5, which isn't right....
So I think it has to give an error when its argument is not a string.