Random server crash on query callback
#1

Sup, I don't know why, but my code crashes server.

pawn Код:
forward OnPlayerSuccessLogin(pid, dhandle);
//(...)
public OnPlayerSuccessLogin(pid, dhandle) {
    new rows, fields;
    cache_get_data(rows, fields, dhandle);
    return 1;
}
//(...)
stock NS-><LoginPlayer(playerid)> {
    LoggedUsers{playerid} = true;
    SetPVarString(playerid, "salt", "");
    SetPVarString(playerid, "saltedpass", "");
    Database__GetPlayer(playerid, GetPVarInt(playerid, "uid"));
    return 1;
}
//(...)
stock NS-><GetPlayer(playerid, uid)> {
    new tmp[64];
    mysql_format(dbhandle, tmp, "SELECT cash, skin, lastX, lastY, lastZ, lastRot FROM `%s` WHERE uid = %d", dbtables[TB_USERS], uid);
    mysql_function_query(dbhandle, tmp, true, "OnPlayerSuccessLogin", "ii", playerid, dbhandle);
    return 1;
}
mysql_log.txt
Quote:

[23:23:30] >> mysql_format( Connection handle: 1 )
[23:23:30] >> mysql_query_callback( Connection handle: 1 )
[23:23:30] Passing query SELECT cash, skin, lastX, lastY, lastZ, lastRot FROM `users` WHERE uid = 1 | ii
[23:23:30] ProcessQueryThread(OnPlayerSuccessLogin) - Query was successful. (SELECT cash, skin, lastX, lastY, lastZ, lastRot FROM `users` WHERE uid = 1)
[23:23:30] ProcessQueryThread(OnPlayerSuccessLogin) - Data caching enabled.
[23:23:30] CMySQLHandler::StoreResult() - Result was stored.
[23:23:30] CMySQLHandler::FreeResult() - Result was successfully free'd.
[23:23:30] CMySQLHandler::ProcessQueryThread() - Data is getting passed to ->ProcessTick()
[23:23:30] OnPlayerSuccessLogin(ii) - Threaded function called.
[23:23:30] >> cache_get_data( Connection handle: 1 )
[23:23:30] ProcessTick() - The cache has been cleared.

server_log.txt
Quote:

(23:23:30) [debug] Run time error 6: "Invalid instruction"
(23:23:30) [debug] Unknown opcode 0x4000000 at address 0x00000045
(23:23:30) [debug] AMX backtrace:
(23:23:30) [debug] #0 00000045 in public FIXES_OnDialogResponse () from truck.amx
(23:23:30) [debug] #1 native CallLocalFunction () [00472c00] from samp-server.exe
(23:23:30) [debug] #2 00003314 in public OnDialogResponse () from truck.amx

No idea why. The GetPlayer function is called inside dialog response callback hook. What could cause this?
Reply
#2

Guess what. Buffer overflow in tmp[62] (query at least 74 chars long)
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)