From bf8f10bfe6999a8aa7aaef5cecb977ec616896f7 Mon Sep 17 00:00:00 2001 From: Sei Lisa Date: Wed, 1 Nov 2017 00:36:12 +0100 Subject: [PATCH] Fix several calls that had wraparound hazards. llGetSubString("abc", 3, -1) gives "abc"; llList2List(L, 1, -1) gives L when L has length 1. In general, llGetSubString or llList2List return the whole thing when the starting index is grater than the last element in the list. There were a number of spots with that hazard, so fix all we found. --- AVsitter2/Plugins/AVcamera/[AV]camera.lsl | 8 ++++---- .../AVcontrol/Xcite!-Sensations/[AV]Xcite!.lsl | 2 +- AVsitter2/Plugins/AVcontrol/[AV]root-RLV.lsl | 2 +- AVsitter2/Plugins/AVfaces/[AV]faces.lsl | 6 +++--- AVsitter2/Plugins/AVprop/[AV]menu.lsl | 8 ++++---- AVsitter2/Plugins/AVprop/[AV]prop.lsl | 6 +++--- AVsitter2/Plugins/AVsequence/[AV]sequence.lsl | 2 +- AVsitter2/Utilities/AVpos-shifter.lsl | 2 +- AVsitter2/Utilities/MLP-converter.lsl | 2 +- AVsitter2/Utilities/Missing-anim-finder.lsl | 4 ++-- AVsitter2/Utilities/Updater/update-sender.lsl | 2 +- AVsitter2/[AV]adjuster.lsl | 6 +++--- AVsitter2/[AV]select.lsl | 4 ++-- AVsitter2/[AV]sitA.lsl | 18 +++++++++--------- AVsitter2/[AV]sitB.lsl | 6 +++--- 15 files changed, 39 insertions(+), 39 deletions(-) diff --git a/AVsitter2/Plugins/AVcamera/[AV]camera.lsl b/AVsitter2/Plugins/AVcamera/[AV]camera.lsl index e8402dc..9afca52 100644 --- a/AVsitter2/Plugins/AVcamera/[AV]camera.lsl +++ b/AVsitter2/Plugins/AVcamera/[AV]camera.lsl @@ -109,7 +109,7 @@ default state_entry() { - SCRIPT_CHANNEL = (integer)llGetSubString(llGetScriptName(), llSubStringIndex(llGetScriptName(), " "), -1); + SCRIPT_CHANNEL = (integer)llGetSubString(llGetScriptName(), llSubStringIndex(llGetScriptName(), " "), 99999); notecard_key = llGetInventoryKey(notecard_name); if (llGetInventoryType(notecard_name) == INVENTORY_NOTECARD) { @@ -225,10 +225,10 @@ default } else { - data = llGetSubString(data, llSubStringIndex(data, "◆") + 1, -1); + data = llGetSubString(data, llSubStringIndex(data, "◆") + 1, 99999); data = llStringTrim(data, STRING_TRIM); string command = llGetSubString(data, 0, llSubStringIndex(data, " ") - 1); - list parts = llParseStringKeepNulls(llGetSubString(data, llSubStringIndex(data, " ") + 1, -1), [" | ", " |", "| ", "|"], []); + list parts = llParseStringKeepNulls(llGetSubString(data, llSubStringIndex(data, " ") + 1, 99999), [" | ", " |", "| ", "|"], []); string part0 = llStringTrim(llList2String(parts, 0), STRING_TRIM); if (command == "SITTER") { @@ -236,7 +236,7 @@ default } else if (notecard_section == SCRIPT_CHANNEL && command == "CAMERA") { - string part1 = llStringTrim(llDumpList2String(llList2List(parts, 1, -1), "|"), STRING_TRIM); + string part1 = llStringTrim(llDumpList2String(llList2List(parts, 1, 99999), "|"), STRING_TRIM); list sequence = llParseString2List(part1, ["|"], []); camera_triggers += part0; camera_settings += part1; diff --git a/AVsitter2/Plugins/AVcontrol/Xcite!-Sensations/[AV]Xcite!.lsl b/AVsitter2/Plugins/AVcontrol/Xcite!-Sensations/[AV]Xcite!.lsl index 6261492..11ec922 100644 --- a/AVsitter2/Plugins/AVcontrol/Xcite!-Sensations/[AV]Xcite!.lsl +++ b/AVsitter2/Plugins/AVcontrol/Xcite!-Sensations/[AV]Xcite!.lsl @@ -177,7 +177,7 @@ default { data = llStringTrim(data, STRING_TRIM); string command = llGetSubString(data, 0, llSubStringIndex(data, " ") - 1); - list parts = llParseStringKeepNulls(llGetSubString(data, llSubStringIndex(data, " ") + 1, -1), [" | ", " |", "| ", "|"], []); + list parts = llParseStringKeepNulls(llGetSubString(data, llSubStringIndex(data, " ") + 1, 99999), [" | ", " |", "| ", "|"], []); if (command == "TIMER") { TIMER_DEFAULT = llList2Integer(parts, 0); diff --git a/AVsitter2/Plugins/AVcontrol/[AV]root-RLV.lsl b/AVsitter2/Plugins/AVcontrol/[AV]root-RLV.lsl index 100077a..e825ff8 100644 --- a/AVsitter2/Plugins/AVcontrol/[AV]root-RLV.lsl +++ b/AVsitter2/Plugins/AVcontrol/[AV]root-RLV.lsl @@ -1209,7 +1209,7 @@ state running { data = llStringTrim(data, STRING_TRIM); string command = llGetSubString(data, 0, llSubStringIndex(data, " ") - 1); - list parts = llParseStringKeepNulls(llGetSubString(data, llSubStringIndex(data, " ") + 1, -1), [" | ", " |", "| ", "|"], []); + list parts = llParseStringKeepNulls(llGetSubString(data, llSubStringIndex(data, " ") + 1, 99999), [" | ", " |", "| ", "|"], []); string part0 = llStringTrim(llList2String(parts, 0), STRING_TRIM); part0 = llGetSubString(part0, 0, 22); if (command == "WAITPOSE") diff --git a/AVsitter2/Plugins/AVfaces/[AV]faces.lsl b/AVsitter2/Plugins/AVfaces/[AV]faces.lsl index 6631505..8c340dd 100644 --- a/AVsitter2/Plugins/AVfaces/[AV]faces.lsl +++ b/AVsitter2/Plugins/AVfaces/[AV]faces.lsl @@ -88,7 +88,7 @@ Readout_Say(string say, string SCRIPT_CHANNEL) string Key2Number(key objKey) { - return llGetSubString((string)llAbs((integer)("0x" + llGetSubString((string)objKey, -8, -1)) & 1073741823 ^ -1073741825), 6, -1); + return llGetSubString((string)llAbs((integer)("0x" + llGetSubString((string)objKey, -8, -1)) & 0x3FFFFFFF ^ 0xBFFFFFFF), 6, 99999); } init_sitters() @@ -416,10 +416,10 @@ default } else { - data = llGetSubString(data, llSubStringIndex(data, "◆") + 1, -1); + data = llGetSubString(data, llSubStringIndex(data, "◆") + 1, 99999); data = llStringTrim(data, STRING_TRIM); string command = llGetSubString(data, 0, llSubStringIndex(data, " ") - 1); - list parts = llParseStringKeepNulls(llGetSubString(data, llSubStringIndex(data, " ") + 1, -1), [" | ", " |", "| ", "|"], []); + list parts = llParseStringKeepNulls(llGetSubString(data, llSubStringIndex(data, " ") + 1, 99999), [" | ", " |", "| ", "|"], []); if (command == "SITTER") { notecard_section = llList2Integer(parts, 0); diff --git a/AVsitter2/Plugins/AVprop/[AV]menu.lsl b/AVsitter2/Plugins/AVprop/[AV]menu.lsl index 1e5442e..ac170ab 100644 --- a/AVsitter2/Plugins/AVprop/[AV]menu.lsl +++ b/AVsitter2/Plugins/AVprop/[AV]menu.lsl @@ -269,7 +269,7 @@ integer prop_menu(integer return_pages, key av) } else { - menu_items1 += llGetSubString(llList2String(llParseString2List(llList2String(MENU_LIST, i), ["|"], []), 0), 2, -1); + menu_items1 += llGetSubString(llList2String(llParseString2List(llList2String(MENU_LIST, i), ["|"], []), 0), 2, 99999); } } } @@ -589,15 +589,15 @@ default } else { - data = llGetSubString(data, llSubStringIndex(data, "◆") + 1, -1); + data = llGetSubString(data, llSubStringIndex(data, "◆") + 1, 99999); data = llStringTrim(data, STRING_TRIM); string command = llGetSubString(data, 0, llSubStringIndex(data, " ") - 1); - list parts = llParseStringKeepNulls(llGetSubString(data, llSubStringIndex(data, " ") + 1, -1), [" | ", " |", "| ", "|"], []); + list parts = llParseStringKeepNulls(llGetSubString(data, llSubStringIndex(data, " ") + 1, 99999), [" | ", " |", "| ", "|"], []); string part0 = llStringTrim(llList2String(parts, 0), STRING_TRIM); string part1 = llList2String(parts, 1); if (llGetListLength(parts) > 1) { - part1 = llStringTrim(llDumpList2String(llList2List(parts, 1, -1), SEP), STRING_TRIM); + part1 = llStringTrim(llDumpList2String(llList2List(parts, 1, 99999), SEP), STRING_TRIM); } if (command == "TEXT") { diff --git a/AVsitter2/Plugins/AVprop/[AV]prop.lsl b/AVsitter2/Plugins/AVprop/[AV]prop.lsl index d480b93..a686de8 100644 --- a/AVsitter2/Plugins/AVprop/[AV]prop.lsl +++ b/AVsitter2/Plugins/AVprop/[AV]prop.lsl @@ -378,7 +378,7 @@ default { if (llList2Key(SITTERS, i) == sitting_av_or_sitter || id == "" || (string)sitting_av_or_sitter == (string)i) { - remove_sitter_props_by_pose((string)i + "|" + llGetSubString(msg, 8, -1), TRUE); + remove_sitter_props_by_pose((string)i + "|" + llGetSubString(msg, 8, 99999), TRUE); } } } @@ -603,10 +603,10 @@ default return; } - data = llGetSubString(data, llSubStringIndex(data, "◆") + 1, -1); + data = llGetSubString(data, llSubStringIndex(data, "◆") + 1, 99999); data = llStringTrim(data, STRING_TRIM); string command = llGetSubString(data, 0, llSubStringIndex(data, " ") - 1); - list parts = llParseStringKeepNulls(llGetSubString(data, llSubStringIndex(data, " ") + 1, -1), [" | ", " |", "| ", "|"], []); + list parts = llParseStringKeepNulls(llGetSubString(data, llSubStringIndex(data, " ") + 1, 99999), [" | ", " |", "| ", "|"], []); if (command == "SITTER") { notecard_section = (integer)llList2String(parts, 0); diff --git a/AVsitter2/Plugins/AVsequence/[AV]sequence.lsl b/AVsitter2/Plugins/AVsequence/[AV]sequence.lsl index a570202..4488d26 100644 --- a/AVsitter2/Plugins/AVsequence/[AV]sequence.lsl +++ b/AVsitter2/Plugins/AVsequence/[AV]sequence.lsl @@ -269,7 +269,7 @@ default { list datalist = llParseString2List(data, [" "], []); string command = llList2String(datalist, 0); - data = llStringTrim(llDumpList2String(llList2List(datalist, 1, -1), " "), STRING_TRIM); + data = llStringTrim(llDumpList2String(llList2List(datalist, 1, 99999), " "), STRING_TRIM); list commands = ["PLAY", "WAIT", "SAY", "WHISPER", "SOUND", "LOOP"]; if (command == "DEBUG") { diff --git a/AVsitter2/Utilities/AVpos-shifter.lsl b/AVsitter2/Utilities/AVpos-shifter.lsl index 0ea3d60..47757e0 100644 --- a/AVsitter2/Utilities/AVpos-shifter.lsl +++ b/AVsitter2/Utilities/AVpos-shifter.lsl @@ -196,7 +196,7 @@ default { string command = llStringTrim(llGetSubString(data, 1, llSubStringIndex(data, "}") - 1), STRING_TRIM); data = llDumpList2String(llParseString2List(data, [" "], [""]), ""); - data = llGetSubString(data, llSubStringIndex(data, "}") + 1, -1); + data = llGetSubString(data, llSubStringIndex(data, "}") + 1, 99999); list parts = llParseStringKeepNulls(data, ["<"], []); vector pos = (vector)("<" + llList2String(parts, 1)); pos = (pos - target_prim_pos) / target_prim_rot; diff --git a/AVsitter2/Utilities/MLP-converter.lsl b/AVsitter2/Utilities/MLP-converter.lsl index 95add60..42380ea 100644 --- a/AVsitter2/Utilities/MLP-converter.lsl +++ b/AVsitter2/Utilities/MLP-converter.lsl @@ -147,7 +147,7 @@ default if (llGetSubString(notecard_name, 0, 9) == ".MENUITEMS") { string command = llGetSubString(data, 0, llSubStringIndex(data, " ") - 1); - list parts = llParseString2List(llGetSubString(data, llSubStringIndex(data, " ") + 1, -1), [" | ", " |", "| ", "|"], []); + list parts = llParseString2List(llGetSubString(data, llSubStringIndex(data, " ") + 1, 99999), [" | ", " |", "| ", "|"], []); if (command == "TOMENU" || command == "MENU") { } diff --git a/AVsitter2/Utilities/Missing-anim-finder.lsl b/AVsitter2/Utilities/Missing-anim-finder.lsl index 0d22671..60941d3 100644 --- a/AVsitter2/Utilities/Missing-anim-finder.lsl +++ b/AVsitter2/Utilities/Missing-anim-finder.lsl @@ -85,10 +85,10 @@ default } else { - data = llGetSubString(data, llSubStringIndex(data, "◆") + 1, -1); + data = llGetSubString(data, llSubStringIndex(data, "◆") + 1, 99999); data = llStringTrim(data, STRING_TRIM); string command = llGetSubString(data, 0, llSubStringIndex(data, " ") - 1); - list parts = llParseString2List(llGetSubString(data, llSubStringIndex(data, " ") + 1, -1), [" | ", " |", "| ", "|"], []); + list parts = llParseString2List(llGetSubString(data, llSubStringIndex(data, " ") + 1, 99999), [" | ", " |", "| ", "|"], []); if (command == "POSE" || command == "SYNC") { list anims = llList2ListStrided(llDeleteSubList(parts, 0, 0), 0, -1, 2); diff --git a/AVsitter2/Utilities/Updater/update-sender.lsl b/AVsitter2/Utilities/Updater/update-sender.lsl index ea7aec3..c4467bd 100644 --- a/AVsitter2/Utilities/Updater/update-sender.lsl +++ b/AVsitter2/Utilities/Updater/update-sender.lsl @@ -111,7 +111,7 @@ default if (distance <= mysize.x / 2) { objects_to_update += id; - objects_files += llDumpList2String(llList2List(data, 1, -1), "|"); + objects_files += llDumpList2String(llList2List(data, 1, 99999), "|"); } } } diff --git a/AVsitter2/[AV]adjuster.lsl b/AVsitter2/[AV]adjuster.lsl index e0840a1..1dee8a3 100644 --- a/AVsitter2/[AV]adjuster.lsl +++ b/AVsitter2/[AV]adjuster.lsl @@ -527,7 +527,7 @@ default else if (llGetSubString(msg, 0, 0) == "{") { msg = strReplace(msg, "{P:", "{"); - list parts = llParseStringKeepNulls(llDumpList2String(llParseString2List(llGetSubString(msg, llSubStringIndex(msg, "}") + 1, -1), [" "], [""]), ""), ["<"], []); + list parts = llParseStringKeepNulls(llDumpList2String(llParseString2List(llGetSubString(msg, llSubStringIndex(msg, "}") + 1, 99999), [" "], [""]), ""), ["<"], []); vector pos2 = (vector)("<" + llList2String(parts, 1)); vector rot2 = (vector)("<" + llList2String(parts, 2)); string result = "<" + FormatFloat(pos2.x, 3) + "," + FormatFloat(pos2.y, 3) + "," + FormatFloat(pos2.z, 3) + ">"; @@ -597,7 +597,7 @@ default if (llSubStringIndex(llList2String(SITTER_POSES, i), "P:") == 0) { type = "POSE"; - temp_pose_name = llGetSubString(temp_pose_name, 2, -1); + temp_pose_name = llGetSubString(temp_pose_name, 2, 99999); } llMessageLinked(LINK_THIS, 90301, (string)i, llList2String(SITTER_POSES, i) + "|" + llList2String(POS_LIST, i) + "|" + llList2String(ROT_LIST, i) + "|"); vector pos = llList2Vector(POS_LIST, i); @@ -910,7 +910,7 @@ default } else if (OLD_HELPER_METHOD) { - integer sitter = (integer)llGetSubString(name, llSubStringIndex(name, " ") + 1, -1); + integer sitter = (integer)llGetSubString(name, llSubStringIndex(name, " ") + 1, 99999); if (llList2String(data, 0) == "ANIMA") { llMessageLinked(LINK_THIS, 90075, (string)sitter, llList2Key(data, 1)); diff --git a/AVsitter2/[AV]select.lsl b/AVsitter2/[AV]select.lsl index 9d3364f..3ff005e 100644 --- a/AVsitter2/[AV]select.lsl +++ b/AVsitter2/[AV]select.lsl @@ -194,10 +194,10 @@ default } else { - data = llGetSubString(data, llSubStringIndex(data, "◆") + 1, -1); + data = llGetSubString(data, llSubStringIndex(data, "◆") + 1, 99999); data = llStringTrim(data, STRING_TRIM); string command = llGetSubString(data, 0, llSubStringIndex(data, " ") - 1); - list parts = llParseString2List(llGetSubString(data, llSubStringIndex(data, " ") + 1, -1), [" | ", " |", "| ", "|"], []); + list parts = llParseString2List(llGetSubString(data, llSubStringIndex(data, " ") + 1, 99999), [" | ", " |", "| ", "|"], []); string part0 = llList2String(parts, 0); if (command == "TEXT") { diff --git a/AVsitter2/[AV]sitA.lsl b/AVsitter2/[AV]sitA.lsl index 9a0c7ae..52fd5e8 100644 --- a/AVsitter2/[AV]sitA.lsl +++ b/AVsitter2/[AV]sitA.lsl @@ -221,7 +221,7 @@ sittargets() { integer next = llListFindList(SITTERS_SITTARGETS, [1000]); string desc = (string)llGetLinkPrimitiveParams(i, [PRIM_DESC]); - desc = llGetSubString(desc, llSubStringIndex(desc, "#") + 1, -1); + desc = llGetSubString(desc, llSubStringIndex(desc, "#") + 1, 99999); if (desc != "-1") { list data = llParseStringKeepNulls(desc, ["-"], []); @@ -364,7 +364,7 @@ apply_current_anim(integer broadcast) } else { - POSENAME = llGetSubString(POSENAME, 2, -1); + POSENAME = llGetSubString(POSENAME, 2, 99999); } string OLD_SYNC; if (OLD_POSE_NAME != CURRENT_POSE_NAME) @@ -454,7 +454,7 @@ default { state_entry() { - SCRIPT_CHANNEL = (integer)llGetSubString(llGetScriptName(), llSubStringIndex(llGetScriptName(), " "), -1); + SCRIPT_CHANNEL = (integer)llGetSubString(llGetScriptName(), llSubStringIndex(llGetScriptName(), " "), 99999); while (llGetInventoryType(memoryscript) != INVENTORY_SCRIPT) { llSleep(0.1); @@ -1105,7 +1105,7 @@ default string posename = CURRENT_POSE_NAME; if (llGetSubString(CURRENT_POSE_NAME, 0, 1) == "P:") { - posename = llGetSubString(CURRENT_POSE_NAME, 2, -1); + posename = llGetSubString(CURRENT_POSE_NAME, 2, 99999); } llMessageLinked(LINK_THIS, 90070, (string)SCRIPT_CHANNEL, MY_SITTER); // 90070=update SITTERS after permissions granted llMessageLinked(LINK_THIS, lnk, posename, channel_or_swap); @@ -1157,15 +1157,15 @@ default // Request next line notecard_query = llGetNotecardLine(notecard_name, ++reused_variable); - data = llGetSubString(data, llSubStringIndex(data, "◆") + 1, -1); + data = llGetSubString(data, llSubStringIndex(data, "◆") + 1, 99999); data = llStringTrim(data, STRING_TRIM_HEAD); string command = llGetSubString(data, 0, llSubStringIndex(data, " ") - 1); - list parts = llParseStringKeepNulls(llGetSubString(data, llSubStringIndex(data, " ") + 1, -1), [" | ", " |", "| ", "|"], []); + list parts = llParseStringKeepNulls(llGetSubString(data, llSubStringIndex(data, " ") + 1, 99999), [" | ", " |", "| ", "|"], []); string part0 = llStringTrim(llList2String(parts, 0), STRING_TRIM); string part1; if (llGetListLength(parts) > 1) { - part1 = llStringTrim(llDumpList2String(llList2List(parts, 1, -1), SEP), STRING_TRIM); + part1 = llStringTrim(llDumpList2String(llList2List(parts, 1, 99999), SEP), STRING_TRIM); } if (command == "SITTER") { @@ -1187,7 +1187,7 @@ default reading_notecard_section = TRUE; if (llGetListLength(parts) > 1) { - SITTER_INFO = llList2List(parts, 1, -1); + SITTER_INFO = llList2List(parts, 1, 99999); } } return; @@ -1282,7 +1282,7 @@ default if (llGetSubString(data, 0, 0) == "{") { command = llStringTrim(llGetSubString(data, 1, llSubStringIndex(data, "}") - 1), STRING_TRIM); - parts = llParseStringKeepNulls(llDumpList2String(llParseString2List(llGetSubString(data, llSubStringIndex(data, "}") + 1, -1), [" "], [""]), ""), ["<"], []); + parts = llParseStringKeepNulls(llDumpList2String(llParseString2List(llGetSubString(data, llSubStringIndex(data, "}") + 1, 99999), [" "], [""]), ""), ["<"], []); string pos = "<" + llList2String(parts, 1); string rot = "<" + llList2String(parts, 2); if (command == FIRST_POSENAME || "P:" + command == FIRST_POSENAME) diff --git a/AVsitter2/[AV]sitB.lsl b/AVsitter2/[AV]sitB.lsl index ac27fd4..009a374 100644 --- a/AVsitter2/[AV]sitB.lsl +++ b/AVsitter2/[AV]sitB.lsl @@ -193,7 +193,7 @@ integer animation_menu(integer animation_menu_function) } else { - menu_items1 += llGetSubString(m, 2, -1); + menu_items1 += llGetSubString(m, 2, 99999); } } } @@ -227,7 +227,7 @@ default state_entry() { memory(); - SCRIPT_CHANNEL = (integer)llGetSubString(llGetScriptName(), llSubStringIndex(llGetScriptName(), " "), -1); + SCRIPT_CHANNEL = (integer)llGetSubString(llGetScriptName(), llSubStringIndex(llGetScriptName(), " "), 99999); if (SCRIPT_CHANNEL) main_script += " " + (string)SCRIPT_CHANNEL; if (llGetInventoryType(main_script) == INVENTORY_SCRIPT) @@ -323,7 +323,7 @@ default } else { - current_menu = llListFindList(MENU_LIST, ["T:" + llGetSubString(llList2String(MENU_LIST, current_menu), 2, -1)]); + current_menu = llListFindList(MENU_LIST, ["T:" + llGetSubString(llList2String(MENU_LIST, current_menu), 2, 99999)]); if (current_menu != -1) { current_menu -= 1;