Improve query type detection

Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
Joas Schilling 2020-11-05 17:08:35 +01:00 committed by backportbot[bot]
parent f97048f0d0
commit ce718ebd7b
1 changed files with 9 additions and 6 deletions

View File

@ -73,8 +73,7 @@ class OC_DB {
throw new \OC\DatabaseException($e->getMessage()); throw new \OC\DatabaseException($e->getMessage());
} }
// differentiate between query and manipulation // differentiate between query and manipulation
$result = new OC_DB_StatementWrapper($result, $isManipulation); return new OC_DB_StatementWrapper($result, $isManipulation);
return $result;
} }
/** /**
@ -85,22 +84,26 @@ class OC_DB {
* @return bool * @return bool
*/ */
public static function isManipulation($sql) { public static function isManipulation($sql) {
$sql = trim($sql);
$selectOccurrence = stripos($sql, 'SELECT'); $selectOccurrence = stripos($sql, 'SELECT');
if ($selectOccurrence !== false && $selectOccurrence < 10) { if ($selectOccurrence === 0) {
return false; return false;
} }
$insertOccurrence = stripos($sql, 'INSERT'); $insertOccurrence = stripos($sql, 'INSERT');
if ($insertOccurrence !== false && $insertOccurrence < 10) { if ($insertOccurrence === 0) {
return true; return true;
} }
$updateOccurrence = stripos($sql, 'UPDATE'); $updateOccurrence = stripos($sql, 'UPDATE');
if ($updateOccurrence !== false && $updateOccurrence < 10) { if ($updateOccurrence === 0) {
return true; return true;
} }
$deleteOccurrence = stripos($sql, 'DELETE'); $deleteOccurrence = stripos($sql, 'DELETE');
if ($deleteOccurrence !== false && $deleteOccurrence < 10) { if ($deleteOccurrence === 0) {
return true; return true;
} }
\OC::$server->getLogger()->logException(new \Exception('Can not detect if query is manipulating: ' . $sql));
return false; return false;
} }