29.12.2015, 01:34
Tengo un comando de enviar a jail de un servidor Role Play, cuando se exceden en el nъmero de caracteres de bugea todo, por eso se le puso un string de 64, el problema es que "string length", para revisar la longitud no funciona. Da igual lo largo que pongas la razуn, siempre te dejarб usar el "motivo" incluso con 200 caracteres.
Aquн el CMD:
El problema es ese, el "if(strlen(reason)" nunca se cumple y permite que la longitud del "motivo" no tenga lнmite alguno, lo que ocasiona el problema de "String buffer Overflow". Usй el "IF" en comandos anteriores y me ha funciona, pero con este CMD no me va, le di mil vueltas y no llego a ver donde estб el problema. Gracias.
Aquн el CMD:
Код:
CMD:jail(playerid, params[]) { new string[120], time, giveplayerid, reason[64]; if (Info[playerid][pAdmin] < 2) return SendClientMessageEx(playerid, COLOR_GRAD2, "{FFFF00}[ERROR]:{FFFFFF} No tienes autorizaciуn a usar este comando."); if (!sscanf(params, "dds[64]", giveplayerid, time, reason)) { if(IsPlayerConnected(giveplayerid)) { ///if(strlen(reason) > 64) // Anteriormente estaba asн, pero no funcionaba. if(strlen(reason) >= sizeof(reason)) return SendClientMessageEx(playerid, COLOR_GRAD1, "{A2DC35}[INFO]:{FFFFFF} El motivo del jail no puede ocupar mбs de 64 carбcteres."); strmid(Info[giveplayerid][pJailedBy], GetPlayerNameEx(playerid), 0, strlen(GetPlayerNameEx(playerid)), MAX_PLAYER_NAME); // Obtener el nombre del que da jail. strmid(Info[giveplayerid][pJailReason], reason, 0, strlen(reason), 64); // Obtener el motivo del jail. SetPVarInt(giveplayerid, "IsInArena", 0); SetPVarInt(giveplayerid, "ArenaMode", 0); Info[giveplayerid][pJailed] = 1; PhoneOnline[giveplayerid] = 1; // Bla, bla. El cуdigo sige, lo simplifico. } else SendClientMessageEx(playerid, COLOR_GRAD2, "Esa ID es invбlida."); } else SendClientMessageEx(playerid, COLOR_GRAD2, "Utiliza: /jail (playerid) (minutos) (razуn)"); return 1; }