Increase get_amxstring buffer size (bug 5901, r=ds)

This commit is contained in:
Arkshine 2014-04-30 15:22:55 +02:00
parent a86ca1491f
commit ce4ef6e272
2 changed files with 10 additions and 32 deletions

View File

@ -179,38 +179,9 @@ normal_string:
char *get_amxstring(AMX *amx, cell amx_addr, int id, int& len) char *get_amxstring(AMX *amx, cell amx_addr, int id, int& len)
{ {
static char buffor[4][3072]; static char buffer[4][16384];
register cell* source = (cell *)(amx->base + (int)(((AMX_HEADER *)amx->base)->dat + amx_addr)); len = get_amxstring_r(amx, amx_addr, buffer[id], sizeof(buffer[id]) - 1);
register char* dest = buffor[id]; return buffer[id];
char* start = dest;
if ( (amx->flags & AMX_FLAG_OLDFILE) &&
(*source & BCOMPAT_TRANSLATE_BITS) )
{
const char *def, *key;
if (!translate_bcompat(amx, source, &key, &def))
{
goto normal_string;
}
while ( (*dest++ = (*def++)) );
len = --dest - start;
} else {
normal_string:
while ((*dest++=(char)(*source++)));
len = --dest - start;
}
#if defined BINLOG_ENABLED
if (g_binlog_level & 2)
{
CPluginMngr::CPlugin *pl = g_plugins.findPluginFast(amx);
if (pl)
g_BinLog.WriteOp(BinLog_GetString, pl->getId(), amx_addr, start);
}
#endif
return start;
} }
void copy_amxmemory(cell* dest, cell* src, int len) void copy_amxmemory(cell* dest, cell* src, int len)

View File

@ -13,6 +13,13 @@
#include <svn_version> #include <svn_version>
/**
* This is the buffer size AMX Mod X uses internally to retrieve strings from plugins.
* Most natives that take strings as arguments will implicitly truncate those to this maximum length.
* This has been raised to the current value with AMXX 1.8.3. Previously the limit was 3072.
*/
#define MAX_STRING_LENGTH 16384
#define M_PI 3.1415926535 #define M_PI 3.1415926535
#define ADMIN_ALL 0 /* everyone */ #define ADMIN_ALL 0 /* everyone */