Перейти к содержанию
Авторизация  
DeNCHiK01

Проблема с получением данных из MySQL

Рекомендуемые сообщения

DeNCHiK01

Здравствуйте!

 

У меня при получении данных из MySQL, возникает проблема из-за которой сервер зависает(по server_log.txt):

 

[19:03:18] [debug] Run time error 3: "Stack/heap collision (insufficient stack size)"

[19:03:18] [debug] Stack pointer (STK) is 0x1CAE8, heap pointer (HEA) is 0x1CB3C

[19:03:18] [debug] AMX backtrace:

[19:03:18] [debug] #0 ???????? in public OnDialogResponse () from mod.amx

 

Как я понял, это происходит из-за того, что возникает переполнения стека.

 

Вот код:

        new query[1024];
new sqlpass[64]; 
new result[2688];
new dialog[256];
printf("Loading account");
        mysql_real_escape_string(password, sqlpass);
        format(query, sizeof(query), "SELECT * FROM `accounts` WHERE `password` = '%s' AND `ID` = '%i'", sqlpass, playerVar[playerid][aID]);

        mysql_query(query);
        mysql_store_result();
        if(mysql_num_rows() == 1)
{
       mysql_fetch_row_format(result, "|");

sscanf(result, "p<|>is[32]s[32]s[16]iiis[16]iiis[64]s[32]iiiiiiis[64]iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii",
       playerVar[playerid][aID],
       playerVar[playerid][aName],
       playerVar[playerid][aPassword],
       playerVar[playerid][aIp],
       playerVar[playerid][aDayreg],
       playerVar[playerid][aMonthreg],
          playerVar[playerid][aYearreg],
          playerVar[playerid][aIpreg],
          playerVar[playerid][aSex],
          playerVar[playerid][aModel],
          playerVar[playerid][aSkin],
                playerVar[playerid][aMail],
                playerVar[playerid][aDrug],
                playerVar[playerid][aDrugmoney],
                playerVar[playerid][aLevel],
                playerVar[playerid][aPassport],
                playerVar[playerid][aAge],
                playerVar[playerid][aExp],
                playerVar[playerid][aAdminlevel],
                playerVar[playerid][aHelperlevel],
                playerVar[playerid][aAdminkey],
и т.д.
Как я понял, это из-за длины переменной result[2688].

Если сделать её слишком маленькой, запрос не влазит, и sscanf выдает переполнение result, если слишком большой, то крашит мод.

Подскажите, как мне быть?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
DeNCHiK01

Уменьшил длину result, все заработало, но вылазит ошибка:

[18:33:10] sscanf warning: String buffer overflow.

Как я понял, опять же переполнения стринга, но по логу

31|Nickname|Password|Regip|16|12|2012|Ip|0|230|78|mail|NONE|0|1|0|0|0|0|0|adminPassword|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|0|3000|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0
т.е. как я понял длина строки, получаемой ~ символов 300, в общем, явно меньше 2048, опасен ли вообще этот варнинг и как его исправить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
DeNCHiK01

Разобрался со всем, не хватало ячеек в самом запросе в s[32], спасибо, что не откликнулись http://forum.gs-games.ru/public/style_emoticons/default/mellow.gif

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.