OpenCollar / opencollar

The Open Source Role Play Device for the Metaverse.
Other
39 stars 87 forks source link

Relay - Script run-time error. Stack-Heap Collision #1007

Closed ghost closed 7 years ago

ghost commented 7 years ago

this happens when relay receives message containing many commands that contain several errors.

relay tries to notify an error, but too large message with list of all commands causes an script error.

WendyStarfall commented 7 years ago

We were able to make this happen less frequent in version 6.2 and greater but I don't have a clean solution to this problem. At the moment in version 6.4 you can set oc_relay back to running with <prefix> reboot.

GarvinTwine commented 7 years ago

Sorry that I did not look sooner into this and as I havent seen such a device yet in action this is the first hint at all that might help to find a solution, or at least an idea. You think this happens when the script wants to give the error message in Line 320 ?

RelayNotify(g_kWearer,"\n\nBad command from "+llKey2Name(kID)+".\n\nCommand: "+sIdent+","+(string)g_kWearer+","+llDumpList2String(lCommands,"|")+"\n\nFaulty subcommand: "+sCom+"\n\nPlease report to the maker of this device.\n",0);

Lets try this without repeating all the commands (no user understand anyway):

RelayNotify(g_kWearer,"\n\nBad command from "+llKey2Name(kID)+".\n\nCommand: "+sIdent+","+(string)g_kWearer+"\n\nFaulty subcommand: "+sCom+"\n\nPlease report to the maker of this device.\n",0);

Can you please check if this solves the issue at least with "your bad commanding device"?

ghost commented 7 years ago

Yes exactly, too long message, with a large list. in line 320 and 343 Remove llDumpList2String (lCommands, "|") solves the problem.

ghost commented 7 years ago

heck! wrong button

GarvinTwine commented 7 years ago

exactly! this is more of debug info anyway I think and if it can cause crashes... no reason to keep it.

WendyStarfall commented 7 years ago

These crashes happened also with the shortened message. You could try to make a generic message that clearly explains to the user that a bad source is trying to communicate through the relay to the collar.

That also means that our relay can no longer be used to debug devices that mean to make use of the relay.

WendyStarfall commented 7 years ago

How about we make a debug switch that keeps the feature (with shorter list) intact for advanced users?

<prefix> relay debug on <prefix> relay debug off

ghost commented 7 years ago

I believe it will be better