Ok, well I found something strange to go along with this.
Using the code
Spoiler
local test="testing"
test2="Terst'n"
oldUp = string.upper
print(string.upper(test))
print(test:upper())
print(string.upper(test2))
print(test2:upper())
function string.upper() return "Ya done messed up" end
print(string.upper(test))
print(test:upper())
print(string.upper(test2))
print(test2:upper())
string.upper = function () return "Still messed up" end
print(string.upper(test))
print(test:upper())
print(string.upper(test2))
print(test2:upper())
Used it just to test everything that could mess up, When used in both ccemu and ingame it runs as expected the first time and returns
Spoiler
TESTING
TESTING
TERST'N
TERST'N
Ya done messed up
Ya done messed up
Ya done messed up
Ya done messed up
Sill messed up
Sill messed up
Sill messed up
Sill messed up
However, when ran another time after the computer has been restarted it returns
Spoiler
TESTING
Sill messed up
TERST'N
Sill messed up
Ya done messed up
Sill messed up
Ya done messed up
Sill messed up
Sill messed up
Sill messed up
Sill messed up
Sill messed up
The strVar:upper is still being overwritten
When tested on a different computer without the script on it
string.upper works as it should however strVar:upper() returns "Sill messed up"
so it is being overwritten on the entire ComputerCraft global table
Edit: In 1 of my 6 test strVar:upper() was not overwritten on the other computer, however all other tests had the effect.
Edit2: So as I have tested it appears to work with only upper, I have also tested rep and lower and it does not affect the environment of other computers nor does it change strVar:rep() / strVar:lower() at all
Edit3: A
video to prove I am not insane