Valider a4fdb3b8 rédigé par cerdic's avatar cerdic
Parcourir les fichiers

Complement de 413ca3cc : _mysql_traite_query() s'appelle recursivement, elle...

Complement de 413ca3cc : _mysql_traite_query() s'appelle recursivement, elle ne doit echapper les textes qu'au premier appel, car ensuite ce n'est plus necessaire et elle risquerait potentiellement de melanger les pourcents de substitutions/remplacement dans query_reinjecte_textes()
parent 96e283e4
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+15 −4
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -524,9 +524,10 @@ define('_SQL_PREFIXE_TABLE_MYSQL', '/([,\s])spip_/S');
 * @param string $query Requête à préparer
 * @param string $db Nom de la base de donnée
 * @param string $prefixe Préfixe de tables à appliquer
 * @param bool $echappe_textes Pour ne pas essayer de re-echapper une chaine deja echappee qu'on traite en recursif
 * @return string           Requête préparée
 */
function _mysql_traite_query($query, $db = '', $prefixe = '') {
function _mysql_traite_query($query, $db = '', $prefixe = '', $echappe_textes = true) {

	if ($GLOBALS['mysql_rappel_nom_base'] and $db) {
		$pref = '`' . $db . '`.';
@@ -547,11 +548,21 @@ function _mysql_traite_query($query, $db = '', $prefixe = '') {
		// il faut alors echapper les chaine avant de le faire, pour ne pas risquer de
		// modifier une requete qui est en fait juste du texte dans un champ
		if (stripos($suite, 'SELECT') !== false) {
			if ($echappe_textes) {
				list($suite_echap, $textes) = query_echappe_textes($suite);
			}
			else {
				$suite_echap = $suite;
			}
			if (preg_match('/^(.*?)([(]\s*SELECT\b.*)$/si', $suite_echap, $r)) {
				$suite_echap = $r[1] . _mysql_traite_query($r[2], $db, $prefixe);
				$suite_echap = $r[1] . _mysql_traite_query($r[2], $db, $prefixe, false);
				if ($echappe_textes) {
					$suite = query_reinjecte_textes($suite_echap, $textes);
				}
				else {
					$suite = $suite_echap;
				}
			}
		}
	}
	$r = preg_replace(_SQL_PREFIXE_TABLE_MYSQL, '\1' . $pref, $query) . $suite;