diff options
author | Andrey Andreev <narf@devilix.net> | 2017-10-16 10:11:00 +0200 |
---|---|---|
committer | Andrey Andreev <narf@devilix.net> | 2017-10-16 10:11:00 +0200 |
commit | 7907f98a963c0cb8625ecbb4d8a178c6d769339a (patch) | |
tree | 0ae85eb89a0d774d36eaf0ddba9509cdced973d8 /system/database/DB_driver.php | |
parent | 61dfda5953f99813f8309a4fa843c255b6631224 (diff) | |
parent | d282d07dfba94b5395d1dd989bdb958c972bb7cf (diff) |
Merge branch '3.1-stable' into develop
Diffstat (limited to 'system/database/DB_driver.php')
-rw-r--r-- | system/database/DB_driver.php | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/system/database/DB_driver.php b/system/database/DB_driver.php index 54740c309..8ab5d762e 100644 --- a/system/database/DB_driver.php +++ b/system/database/DB_driver.php @@ -1867,15 +1867,19 @@ abstract class CI_DB_driver { $i++; } + // dbprefix may've already been applied, with or without the identifier escaped + $ec = '(?<ec>'.preg_quote(is_array($this->_escape_char) ? $this->_escape_char[0] : $this->_escape_char).')?'; + isset($ec[0]) && $ec .= '?'; // Just in case someone has disabled escaping by forcing an empty escape character + // Verify table prefix and replace if necessary - if ($this->swap_pre !== '' && strpos($parts[$i], $this->swap_pre) === 0) + if ($this->swap_pre !== '' && preg_match('#^'.$ec.preg_quote($this->swap_pre).'#', $parts[$i])) { - $parts[$i] = preg_replace('/^'.$this->swap_pre.'(\S+?)/', $this->dbprefix.'\\1', $parts[$i]); + $parts[$i] = preg_replace('#^'.$ec.preg_quote($this->swap_pre).'(\S+?)#', '\\1'.$this->dbprefix.'\\2', $parts[$i]); } // We only add the table prefix if it does not already exist - elseif (strpos($parts[$i], $this->dbprefix) !== 0) + else { - $parts[$i] = $this->dbprefix.$parts[$i]; + preg_match('#^'.$ec.preg_quote($this->dbprefix).'#', $parts[$i]) OR $parts[$i] = $this->dbprefix.$parts[$i]; } // Put the parts back together |