Thread: [Solved] Database.Escape weird result
View Single Post
N0B0DY1x
Junior Member
Join Date: Jul 2014
Location: France
Old 05-05-2020 , 16:31   Re: Database.Escape weird result
Reply With Quote #3

Ok, I updated the script like this :

PHP Code:
#include <sourcemod>

public Plugin myinfo =
{
    
name "Database.Escape test",
    
author "Nobody-x",
    
version "1"
};

Database g_hDatabase;

public 
void OnPluginStart() {
    
Database.Connect(OnDBConnect"levels_ranks");

    
RegConsoleCmd("sm_test"Cmd_Test)
    
RegConsoleCmd("sm_test2"Cmd_Test2)
}

Action Cmd_Test(int clientint args) {
    if (
g_hDatabase == null) {
        return 
Plugin_Continue;
    }

    
char sName[65];
    
GetClientName(clientsName32);

    
LogMessage("Client name : \"%s\""sName);

    
int written;
    
bool bReturn g_hDatabase.Escape(sNamesNamesizeof(sName), written);

    
LogMessage("Escaped name : \"%s\" (Return : %s, written : %i)"sNamebReturn "true" "false"written);

    return 
Plugin_Changed;
}

Action Cmd_Test2(int clientint args) {
    if (
g_hDatabase == null) {
        return 
Plugin_Continue;
    }

    
char sName[65];
    
GetClientName(clientsName32);

    
LogMessage("Client name : \"%s\""sName);

    
int written;
    
bool bReturn SQL_EscapeString(g_hDatabasesNamesNamesizeof(sName), written);

    
LogMessage("Escaped name : \"%s\" (Return : %s, written : %i)"sNamebReturn "true" "false"written);

    return 
Plugin_Changed;
}

public 
void OnDBConnect(Database db, const char[] errorany data)
{
    if (
db == null)
    {
        
LogError("Database failure: %s"error);
        return;
    }

    
g_hDatabase db;

Here are the outputs :

Code:
L 05/05/2020 - 22:29:56: [test_escape.smx] Client name : "No'"
L 05/05/2020 - 22:29:56: [test_escape.smx] Escaped name : "No\'" (Return : true, written : 4)
L 05/05/2020 - 22:29:58: [test_escape.smx] Client name : "No'"
L 05/05/2020 - 22:29:58: [test_escape.smx] Escaped name : "No\'" (Return : true, written : 4)
L 05/05/2020 - 22:30:28: [playercommands.smx] "No'<6><STEAM_1:1:74713004><>" renamed "No'<6><STEAM_1:1:74713004><>" (to "Everything's gonna be alright")
L 05/05/2020 - 22:30:30: [test_escape.smx] Client name : "Everything's gonna be alright"
L 05/05/2020 - 22:30:30: [test_escape.smx] Escaped name : "Everything\'\'\\\'\\\\\\\'\\\\\\\\\\\\\\\'\\\\\\" (Return : true, written : 48)
L 05/05/2020 - 22:30:32: [test_escape.smx] Client name : "Everything's gonna be alright"
L 05/05/2020 - 22:30:32: [test_escape.smx] Escaped name : "Everything\'\'\\\'\\\\\\\'\\\\\\\\\\\\\\\'\\\\\\" (Return : true, written : 48)
PS: I'm testing both commands in the order sm_test then sm_test2 (but Database.Escape() and SQL_EscapeString() do exactly the same thing right ?).
PS2: For the size of the buffer, the GetClientName call is done with a max size of 32 and the buffer total size is 65 (32*2+1) which is used into the escape function. That's extracted from LevelsRanks plugin.

Last edited by N0B0DY1x; 05-05-2020 at 16:43.
N0B0DY1x is offline