From: Rudolf Polzer Date: Sat, 29 Jan 2011 08:28:35 +0000 (+0100) Subject: do some sanity checking when getting player entity from # spec X-Git-Tag: xonotic-v0.5.0~316^2~5^2~1 X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=commitdiff_plain;h=5282c14c1d05ab55753a3f694398862fa299fc9b do some sanity checking when getting player entity from # spec --- diff --git a/qcsrc/server/miscfunctions.qc b/qcsrc/server/miscfunctions.qc index 849dcdab45..112162e407 100644 --- a/qcsrc/server/miscfunctions.qc +++ b/qcsrc/server/miscfunctions.qc @@ -2862,65 +2862,65 @@ void SoundEntity_Detach(entity pl) float ParseCommandPlayerSlotTarget_firsttoken; entity GetCommandPlayerSlotTargetFromTokenizedCommand(float tokens, float idx) // idx = start index { - string s; - entity e, head; - float n; + string s; + entity e, head; + float n; - s = string_null; + s = string_null; - ParseCommandPlayerSlotTarget_firsttoken = -1; + ParseCommandPlayerSlotTarget_firsttoken = -1; - if (tokens > idx) - { - if (substring(argv(idx), 0, 1) == "#") - { - s = substring(argv(idx), 1, -1); - ++idx; - if (s == "") - if (tokens > idx) - { - s = argv(idx); - ++idx; - } + if (tokens > idx) + { + if (substring(argv(idx), 0, 1) == "#") + { + s = substring(argv(idx), 1, -1); + ++idx; + if (s == "") if (tokens > idx) + { + s = argv(idx); + ++idx; + } ParseCommandPlayerSlotTarget_firsttoken = idx; - if (s == ftos(stof(s))) - { - e = edict_num(stof(s)); - if (e.flags & FL_CLIENT) - return e; - } - } - else - { - // it must be a nick name - s = argv(idx); - ++idx; + n = stof(s); + if (s == ftos(n) && n > 0 && n <= maxclients) + { + e = edict_num(n); + if (e.flags & FL_CLIENT) + return e; + } + } + else + { + // it must be a nick name + s = argv(idx); + ++idx; ParseCommandPlayerSlotTarget_firsttoken = idx; - n = 0; - FOR_EACH_CLIENT(head) - if (head.netname == s) - { - e = head; - ++n; - } - if (n == 1) - return e; + n = 0; + FOR_EACH_CLIENT(head) + if (head.netname == s) + { + e = head; + ++n; + } + if (n == 1) + return e; - s = strdecolorize(s); - n = 0; - FOR_EACH_CLIENT(head) - if (strdecolorize(head.netname) == s) - { - e = head; - ++n; - } - if (n == 1) - return e; - } - } + s = strdecolorize(s); + n = 0; + FOR_EACH_CLIENT(head) + if (strdecolorize(head.netname) == s) + { + e = head; + ++n; + } + if (n == 1) + return e; + } + } - return world; + return world; } .float scale2;