From ca9293b3ee13390349521c83e9bb175d4c95009a Mon Sep 17 00:00:00 2001 From: Steven Wittens <steven@10.no-reply.drupal.org> Date: Thu, 27 Apr 2006 20:38:49 +0000 Subject: [PATCH] #54981: calls to db_lock_table in bootstrap.inc do not use db_prefix --- includes/database.inc | 9 +++++++++ includes/database.mysql.inc | 2 +- includes/database.mysqli.inc | 2 +- includes/database.pgsql.inc | 2 +- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/includes/database.inc b/includes/database.inc index 548e310e528d..987adbc28979 100644 --- a/includes/database.inc +++ b/includes/database.inc @@ -315,6 +315,15 @@ function db_rewrite_sql($query, $primary_table = 'n', $primary_field = 'nid', $ return $query; } +/** + * Restrict a dynamic tablename to safe characters. + * + * Only keeps alphanumeric and underscores. + */ +function db_escape_table($string) { + return preg_replace('/[^A-Za-z0-9_]+/', '', $string); +} + /** * @} End of "defgroup database". */ diff --git a/includes/database.mysql.inc b/includes/database.mysql.inc index 03e9eb21dc3c..037106b0a8d8 100644 --- a/includes/database.mysql.inc +++ b/includes/database.mysql.inc @@ -353,7 +353,7 @@ function db_escape_string($text) { * Lock a table. */ function db_lock_table($table) { - db_query('LOCK TABLES {%s} WRITE', $table); + db_query('LOCK TABLES {'. db_escape_table($table) .'} WRITE'); } /** diff --git a/includes/database.mysqli.inc b/includes/database.mysqli.inc index 9d5cf71d1df7..97a4daf2ae1f 100644 --- a/includes/database.mysqli.inc +++ b/includes/database.mysqli.inc @@ -355,7 +355,7 @@ function db_escape_string($text) { * Lock a table. */ function db_lock_table($table) { - db_query('LOCK TABLES {%s} WRITE', $table); + db_query('LOCK TABLES {'. db_escape_table($table) .'} WRITE'); } /** diff --git a/includes/database.pgsql.inc b/includes/database.pgsql.inc index 007d825a0694..dc8d081db69b 100644 --- a/includes/database.pgsql.inc +++ b/includes/database.pgsql.inc @@ -331,7 +331,7 @@ function db_escape_string($text) { * This function automatically starts a transaction. */ function db_lock_table($table) { - db_query('BEGIN; LOCK TABLE {%s} IN EXCLUSIVE MODE', $table); + db_query('BEGIN; LOCK TABLE {'. db_escape_table($table) .'} IN EXCLUSIVE MODE'); } /** -- GitLab