fix: use Database.Format for SQL escaping instead of manual EscapeString - #8
Merged
Conversation
h_db.Format was already used to build these queries, so the preceding EscapeString call into a separate buffer was redundant; pass the raw value straight to Format instead, which escapes %s arguments directly.
Rushaway
added a commit
that referenced
this pull request
Aug 27, 2026
…hs (#9) * fix(db): remove blocking SQL calls from connect/upgrade/fastquery paths DB_TryConnect() used a synchronous SQLite_UseDatabase()/SQL_ConnectCustom() fallback when no "shop" entry existed in databases.cfg, blocking the game thread on every (re)connect attempt in that configuration. Database.Connect() already falls back to an implicit local SQLite database for an unknown config name, so a single async call now covers both cases. DB_FastQuery() used SQL_LockDatabase()/SQL_FastQuery(), and the legacy v1->v2 schema upgrade (DB_UgradeState_1) issued a nested, fully synchronous SQL_Query() per item category while iterating the old `items` table. Both now go through Database.Query(); the per-category upgrade fetches are dispatched together and joined with a pending counter before the migration continues. Bumped plugin version to 3.0E10. * fix: declare g_iPendingCategoryFetches before first use SourcePawn requires globals to be declared before use in the same file; it was declared after DB_UgradeState_1(), which referenced it first, causing "undefined symbol" at compile time. * Remove DB_EscapeString function Removed the DB_EscapeString function that escapes strings for database queries. * fix: remove EscapeString wrapper for deleted DB_EscapeString DB_EscapeString was removed in e8d909c since PR #8 moved all query building to Database.Format. The EscapeString() wrapper in shop.sp was its only caller and has no callers of its own, so drop it too.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
player_manager.sp, the queries were already built withh_db.Format, which already escaped%sarguments; remove the now-redundantEscapeString(...)call into a separate buffer beforehand and pass the raw player name straight toFormat.SHOP_VERSION(3.0E9 -> 3.0E10).Why
Database.Formatescapes string arguments on its own, so pre-escaping into a buffer before calling it does nothing useful and adds an extra driver touchpoint. The publicEscapeString/DB_EscapeStringAPI used by other Shop_* plugins is untouched.Test plan