Fixed broken SQLite3 cache (#102)

This commit is contained in:
Roman Kelesidis 2023-04-01 12:28:10 +07:00 committed by GitHub
parent 8804a156b4
commit da382c3520
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 15 additions and 10 deletions

View File

@ -63,6 +63,11 @@ define('TOR_TYPE_SILVER', 2);
define('GUEST_UID', -1);
define('BOT_UID', -746);
function sqlite3_escape_string ($str)
{
return SQLite3::escapeString($str);
}
/**
* Database
*/

View File

@ -42,10 +42,10 @@ class cache_sqlite extends cache_common
$this->db->shard($name);
$cached_items = array();
$this->prefix_len = strlen($this->prefix);
$this->prefix_sql = SQLite3::escapeString($this->prefix);
$this->prefix_sql = sqlite3_escape_string($this->prefix);
$name_ary = $name_sql = (array) $name;
array_deep($name_sql, 'SQLite3::escapeString');
array_deep($name_sql, 'sqlite3_escape_string');
// get available items
$rowset = $this->db->fetch_rowset("
@ -85,9 +85,9 @@ class cache_sqlite extends cache_common
function set ($name, $value, $ttl = 604800)
{
$this->db->shard($this->prefix . $name);
$name_sql = SQLite3::escapeString($this->prefix . $name);
$name_sql = sqlite3_escape_string($this->prefix . $name);
$expire = TIMENOW + $ttl;
$value_sql = SQLite3::escapeString(serialize($value));
$value_sql = sqlite3_escape_string(serialize($value));
$result = $this->db->query("REPLACE INTO ". $this->cfg['table_name'] ." (cache_name, cache_expire_time, cache_value) VALUES ('$name_sql', $expire, '$value_sql')");
return (bool) $result;
@ -98,7 +98,7 @@ class cache_sqlite extends cache_common
if ($name)
{
$this->db->shard($this->prefix . $name);
$result = $this->db->query("DELETE FROM ". $this->cfg['table_name'] ." WHERE cache_name = '". SQLite3::escapeString($this->prefix . $name) ."'");
$result = $this->db->query("DELETE FROM ". $this->cfg['table_name'] ." WHERE cache_name = '". sqlite3_escape_string($this->prefix . $name) ."'");
}
else
{
@ -276,7 +276,7 @@ class sqlite_common extends cache_common
if ($name)
{
$this->db->shard($this->prefix . $name);
$result = $this->db->query("DELETE FROM ". $this->cfg['table_name'] ." WHERE cache_name = '". SQLite3::escapeString($this->prefix . $name) ."'");
$result = $this->db->query("DELETE FROM ". $this->cfg['table_name'] ." WHERE cache_name = '". sqlite3_escape_string($this->prefix . $name) ."'");
}
else
{

View File

@ -36,8 +36,8 @@ class datastore_sqlite extends datastore_common
{
$this->data[$item_name] = $item_data;
$ds_title = SQLite3::escapeString($this->prefix . $item_name);
$ds_data = SQLite3::escapeString(serialize($item_data));
$ds_title = sqlite3_escape_string($this->prefix . $item_name);
$ds_data = sqlite3_escape_string(serialize($item_data));
$result = $this->db->query("REPLACE INTO ". $this->cfg['table_name'] ." (ds_title, ds_data) VALUES ('$ds_title', '$ds_data')");
@ -54,9 +54,9 @@ class datastore_sqlite extends datastore_common
if (!$items = $this->queued_items) return;
$prefix_len = strlen($this->prefix);
$prefix_sql = SQLite3::escapeString($this->prefix);
$prefix_sql = sqlite3_escape_string($this->prefix);
array_deep($items, 'SQLite3::escapeString');
array_deep($items, 'sqlite3_escape_string');
$items_list = $prefix_sql . join("','$prefix_sql", $items);
$rowset = $this->db->fetch_rowset("SELECT ds_title, ds_data FROM ". $this->cfg['table_name'] ." WHERE ds_title IN ('$items_list')");