1
0
mirror of https://github.com/VCMP-SqMod/SqMod.git synced 2025-02-21 20:27:13 +01:00

Fix incorrect range check when converting skin name to identifier.

This commit is contained in:
Sandu Liviu Catalin 2016-07-28 00:07:57 +03:00
parent 247ea2a357
commit 0559e224ad

View File

@ -77,12 +77,12 @@ Int32 GetSkinID(CCStr name)
// Get the most significant characters used to identify a skin // Get the most significant characters used to identify a skin
CharT a = str[0], b = 0, c = 0, d = str[len-1]; CharT a = str[0], b = 0, c = 0, d = str[len-1];
// Look for deeper specifiers // Look for deeper specifiers
if (str.length() >= 3) if (len >= 3)
{ {
b = str[1]; b = str[1];
c = str[2]; c = str[2];
} }
else if (str.length() >= 2) else if (len >= 52)
b = str[1]; b = str[1];
// Search for a pattern in the name // Search for a pattern in the name
switch (a) switch (a)
@ -109,7 +109,7 @@ Int32 GetSkinID(CCStr name)
// [B]usiness man (#1|A)/(#2|B)/(#3|C)/(#4|D)/(#5|E)/(#6|F) // [B]usiness man (#1|A)/(#2|B)/(#3|C)/(#4|D)/(#5|E)/(#6|F)
case 'b': case 'b':
// [Be]ach [g]uy (#1|A)/(#2|B)/(#3|C)/(#4|D)/(#5|E)/(#6|F)/(#7|G)/(#8|H) // [Be]ach [g]uy (#1|A)/(#2|B)/(#3|C)/(#4|D)/(#5|E)/(#6|F)/(#7|G)/(#8|H)
if (b == 'e' && (c == 'g' || (len > 4 && str[5] == 'g'))) if (b == 'e' && (c == 'g' || (len > 5 && str[5] == 'g')))
{ {
switch (d) switch (d)
{ {
@ -132,7 +132,7 @@ Int32 GetSkinID(CCStr name)
} }
} }
// [Be]ach [l]ady (#1|A)/(#2|B)/(#3|C)/(#4|D)/(#5|E)/(#6|F)/(#7|G) // [Be]ach [l]ady (#1|A)/(#2|B)/(#3|C)/(#4|D)/(#5|E)/(#6|F)/(#7|G)
else if (b == 'e' && (c == 'l' || (len > 4 && str[5] == 'l'))) else if (b == 'e' && (c == 'l' || (len > 5 && str[5] == 'l')))
{ {
switch (d) switch (d)
{ {
@ -160,14 +160,14 @@ Int32 GetSkinID(CCStr name)
else if (b == 'u' && (c && (c == 'm' || c == 'g' || c == 'l'))) else if (b == 'u' && (c && (c == 'm' || c == 'g' || c == 'l')))
{ {
// [Bum] [g]uy (#1|A)/(#2|B)/(#3|C) // [Bum] [g]uy (#1|A)/(#2|B)/(#3|C)
if (c == 'g' || (len > 2 && str[3] == 'g')) if (c == 'g' || (len > 3 && str[3] == 'g'))
{ {
if (d == '1' || d == 'a') return SQMOD_SKIN_BUM_GUY_A; if (d == '1' || d == 'a') return SQMOD_SKIN_BUM_GUY_A;
else if (d == '2' || d == 'b') return SQMOD_SKIN_BUM_GUY_B; else if (d == '2' || d == 'b') return SQMOD_SKIN_BUM_GUY_B;
else if (d == '3' || d == 'c') return SQMOD_SKIN_BUM_GUY_C; else if (d == '3' || d == 'c') return SQMOD_SKIN_BUM_GUY_C;
} }
// [Bum] [l]ady (#1|A)/(#2|B)/(#2|C)/(#3|D)/(#4|E) // [Bum] [l]ady (#1|A)/(#2|B)/(#2|C)/(#3|D)/(#4|E)
else if (c == 'l' || (len > 2 && str[3] == 'l')) else if (c == 'l' || (len > 3 && str[3] == 'l'))
{ {
if (d == '1' || d == 'a') return SQMOD_SKIN_BUM_LADY_A; if (d == '1' || d == 'a') return SQMOD_SKIN_BUM_LADY_A;
else if (d == '2' || d == 'b') return SQMOD_SKIN_BUM_LADY_B; else if (d == '2' || d == 'b') return SQMOD_SKIN_BUM_LADY_B;
@ -177,7 +177,7 @@ Int32 GetSkinID(CCStr name)
} }
} }
// [Bus]iness [m]an (#1|A)/(#2|B)/(#3|C)/(#4|D)/(#5|E)/(#6|F) // [Bus]iness [m]an (#1|A)/(#2|B)/(#3|C)/(#4|D)/(#5|E)/(#6|F)
else if (b == 'u' && (c == 's' || (len > 8 && str[9] == 'm'))) else if (b == 'u' && (c == 's' || (len > 9 && str[9] == 'm')))
{ {
switch (d) switch (d)
{ {
@ -220,10 +220,10 @@ Int32 GetSkinID(CCStr name)
// [Che][f] // [Che][f]
if (c && (c == 'e' || d == 'f')) return SQMOD_SKIN_CHEF; if (c && (c == 'e' || d == 'f')) return SQMOD_SKIN_CHEF;
// [Chu]rch [g]uy // [Chu]rch [g]uy
else if (c && ((c == 'u' && len > 5 && str[6] == 'g') || (c == 'g'))) else if (c && ((c == 'u' && len > 6 && str[6] == 'g') || (c == 'g')))
return SQMOD_SKIN_CHURCH_GUY; return SQMOD_SKIN_CHURCH_GUY;
// [Chu]rch [l]ady // [Chu]rch [l]ady
else if (c && ((c == 'u' && len > 5 && str[6] == 'l') || (c == 'l'))) else if (c && ((c == 'u' && len > 6 && str[6] == 'l') || (c == 'l')))
return SQMOD_SKIN_CHURCH_LADY; return SQMOD_SKIN_CHURCH_LADY;
} }
// [Cl]ub [l]ady // [Cl]ub [l]ady
@ -235,13 +235,13 @@ Int32 GetSkinID(CCStr name)
else if (b == 'o') else if (b == 'o')
{ {
// [Col]umbian [g]uy (#1|A)/(#2|B) // [Col]umbian [g]uy (#1|A)/(#2|B)
if (c && ((c == 'l' && len > 8 && str[9] == 'g') || (c == 'g'))) if (c && ((c == 'l' && len > 9 && str[9] == 'g') || (c == 'g')))
{ {
if (d == '1' || d == 'a') return SQMOD_SKIN_COLUMBIAN_GUY_A; if (d == '1' || d == 'a') return SQMOD_SKIN_COLUMBIAN_GUY_A;
else if (d == '2' || d == 'b') return SQMOD_SKIN_COLUMBIAN_GUY_B; else if (d == '2' || d == 'b') return SQMOD_SKIN_COLUMBIAN_GUY_B;
} }
// [Con]struction [w]orker (#1|A)/(#2|B) // [Con]struction [w]orker (#1|A)/(#2|B)
else if (c && (c == 'n' || (len > 11 && str[12] == 'g'))) else if (c && (c == 'n' || (len > 12 && str[12] == 'g')))
{ {
if (d == '1' || d == 'a') return SQMOD_SKIN_CONSTRUCTION_WORKER_A; if (d == '1' || d == 'a') return SQMOD_SKIN_CONSTRUCTION_WORKER_A;
else if (d == '2' || d == 'b') return SQMOD_SKIN_CONSTRUCTION_WORKER_B; else if (d == '2' || d == 'b') return SQMOD_SKIN_CONSTRUCTION_WORKER_B;
@ -329,7 +329,7 @@ Int32 GetSkinID(CCStr name)
} }
} }
// [Go]lf [g]uy (#1|A)/(#2|B)/(#3|C) // [Go]lf [g]uy (#1|A)/(#2|B)/(#3|C)
else if (b == 'o' && ((c == 'g') || (len > 3 && str[4] == 'g'))) else if (b == 'o' && ((c == 'g') || (len > 4 && str[4] == 'g')))
{ {
switch (d) switch (d)
{ {
@ -342,7 +342,7 @@ Int32 GetSkinID(CCStr name)
} }
} }
// [Go]lf [l]ady // [Go]lf [l]ady
else if (b == 'o' && ((c == 'l') || (len > 3 && str[4] == 'l'))) else if (b == 'o' && ((c == 'l') || (len > 4 && str[4] == 'l')))
return SQMOD_SKIN_GOLF_LADY; return SQMOD_SKIN_GOLF_LADY;
// [Gr]anny (#1|A)/(#2|B) // [Gr]anny (#1|A)/(#2|B)
else if (b == 'r') else if (b == 'r')
@ -351,10 +351,10 @@ Int32 GetSkinID(CCStr name)
else if (d == '2' || d == 'b') return SQMOD_SKIN_GRANNY_B; else if (d == '2' || d == 'b') return SQMOD_SKIN_GRANNY_B;
} }
// [Gy]m [g]uy // [Gy]m [g]uy
else if (b && (b == 'g' || (b == 'y' && len > 2 && str[3] == 'g'))) else if (b && (b == 'g' || (b == 'y' && len > 3 && str[3] == 'g')))
return SQMOD_SKIN_GYM_GUY; return SQMOD_SKIN_GYM_GUY;
// [Gy]m [l]ady // [Gy]m [l]ady
else if (b && (b == 'l' || (b == 'y' && len > 2 && str[3] == 'l'))) else if (b && (b == 'l' || (b == 'y' && len > 3 && str[3] == 'l')))
return SQMOD_SKIN_GYM_LADY; return SQMOD_SKIN_GYM_LADY;
// [H]atian (#1|A)/(#2|B)/(#3|C)/(#4|D)/(#5|E) // [H]atian (#1|A)/(#2|B)/(#3|C)/(#4|D)/(#5|E)
// [H]ilary, [H]ilary (Robber), [H]ood lady // [H]ilary, [H]ilary (Robber), [H]ood lady
@ -391,7 +391,7 @@ Int32 GetSkinID(CCStr name)
// [L]ove Fist (#1|A)/(#2|B)/(#3|C)/(#3|D) // [L]ove Fist (#1|A)/(#2|B)/(#3|C)/(#3|D)
case 'l': case 'l':
//[Lan]ce ([C]o[p]) //[Lan]ce ([C]o[p])
if ((b == 'a') && (c == 'n') && ((len > 4 && str[5] == 'c') || d == 'p')) if ((b == 'a') && (c == 'n') && ((len > 5 && str[5] == 'c') || d == 'p'))
return SQMOD_SKIN_LANCE_COP; return SQMOD_SKIN_LANCE_COP;
else if (b && (b == 'c' || (b == 'a' && (c == 'n')))) else if (b && (b == 'c' || (b == 'a' && (c == 'n'))))
return SQMOD_SKIN_LANCE_COP; return SQMOD_SKIN_LANCE_COP;
@ -436,10 +436,10 @@ Int32 GetSkinID(CCStr name)
else if (b == 'h') else if (b == 'h')
{ {
// [Ph]il ([O]ne ar[m]) // [Ph]il ([O]ne ar[m])
if (b == 'o' || (c == 'o') || (len > 3 && str[4] == 'o') || d == 'm') if (b == 'o' || (c == 'o') || (len > 4 && str[4] == 'o') || d == 'm')
return SQMOD_SKIN_PHIL_ONE_ARM; return SQMOD_SKIN_PHIL_ONE_ARM;
// [Ph]il ([R]obbe[r]) // [Ph]il ([R]obbe[r])
else if (c && (c == 'r' || d == 'r' || (len > 3 && str[4] == 'r'))) else if (c && (c == 'r' || d == 'r' || (len > 4 && str[4] == 'r')))
return SQMOD_SKIN_PHIL_ROBBER; return SQMOD_SKIN_PHIL_ROBBER;
// [Phi]l // [Phi]l
else if (c == 'i') return SQMOD_SKIN_PHIL; else if (c == 'i') return SQMOD_SKIN_PHIL;
@ -532,10 +532,10 @@ Int32 GetSkinID(CCStr name)
} }
} }
// [Sk]ate [g]uy // [Sk]ate [g]uy
else if (b == 'k' && ((c == 'g') || (len > 4 && str[5] == 'g'))) else if (b == 'k' && ((c == 'g') || (len > 5 && str[5] == 'g')))
return SQMOD_SKIN_SKATE_GUY; return SQMOD_SKIN_SKATE_GUY;
// [Sk]ate [l]ady // [Sk]ate [l]ady
else if (b == 'k' && ((c == 'l') || (len > 4 && str[5] == 'l'))) else if (b == 'k' && ((c == 'l') || (len > 5 && str[5] == 'l')))
return SQMOD_SKIN_SKATE_LADY; return SQMOD_SKIN_SKATE_LADY;
// [So]nny // [So]nny
// [So]nny guy (#1|A)/(#2|B)/(#3|C) // [So]nny guy (#1|A)/(#2|B)/(#3|C)
@ -564,7 +564,7 @@ Int32 GetSkinID(CCStr name)
} }
} }
// [Sp]andE[x] (#1|A)/(#2|B) // [Sp]andE[x] (#1|A)/(#2|B)
else if (b == 'p' && ((c == 'x') || (len > 5 && str[6] == 'x'))) else if (b == 'p' && ((c == 'x') || (len > 6 && str[6] == 'x')))
{ {
switch (d) switch (d)
{ {
@ -575,10 +575,10 @@ Int32 GetSkinID(CCStr name)
} }
} }
// [Sp]anish [g]uy // [Sp]anish [g]uy
else if (b == 'p' && ((c == 'g') || (len > 6 && str[7] == 'g'))) else if (b == 'p' && ((c == 'g') || (len > 7 && str[7] == 'g')))
return SQMOD_SKIN_SPANISH_GUY; return SQMOD_SKIN_SPANISH_GUY;
// [Sp]anish [l]ady (#1|A)/(#2|B)/(#3|C)/(#4|D) // [Sp]anish [l]ady (#1|A)/(#2|B)/(#3|C)/(#4|D)
else if (b == 'p' && ((c == 'l') || (len > 6 && str[7] == 'l'))) else if (b == 'p' && ((c == 'l') || (len > 7 && str[7] == 'l')))
{ {
switch (d) switch (d)
{ {