mirror of
https://we.phorge.it/source/phorge.git
synced 2025-02-22 11:39:03 +01:00
Make SELECT construction in PolicyAwareQuery safer
Summary: Depends on D19784. Ref T13217. Reduce uses of unsafe `%Q` in SELECT construction. Test Plan: This reduces the number of safety warnings when loading Phabricator home from ~900 to ~800. Reviewers: amckinley Reviewed By: amckinley Maniphest Tasks: T13217 Differential Revision: https://secure.phabricator.com/D19785
This commit is contained in:
parent
e26c4bddab
commit
64b52b9952
3 changed files with 10 additions and 19 deletions
|
@ -491,10 +491,10 @@ final class PhabricatorRepositoryQuery
|
||||||
protected function buildSelectClauseParts(AphrontDatabaseConnection $conn) {
|
protected function buildSelectClauseParts(AphrontDatabaseConnection $conn) {
|
||||||
$parts = parent::buildSelectClauseParts($conn);
|
$parts = parent::buildSelectClauseParts($conn);
|
||||||
|
|
||||||
$parts[] = 'r.*';
|
$parts[] = qsprintf($conn, 'r.*');
|
||||||
|
|
||||||
if ($this->shouldJoinSummaryTable()) {
|
if ($this->shouldJoinSummaryTable()) {
|
||||||
$parts[] = 's.*';
|
$parts[] = qsprintf($conn, 's.*');
|
||||||
}
|
}
|
||||||
|
|
||||||
return $parts;
|
return $parts;
|
||||||
|
|
|
@ -41,25 +41,16 @@ abstract class PhabricatorQuery extends Phobject {
|
||||||
/**
|
/**
|
||||||
* @task format
|
* @task format
|
||||||
*/
|
*/
|
||||||
protected function formatSelectClause(array $parts) {
|
protected function formatSelectClause(
|
||||||
|
AphrontDatabaseConnection $conn,
|
||||||
|
array $parts) {
|
||||||
|
|
||||||
$parts = $this->flattenSubclause($parts);
|
$parts = $this->flattenSubclause($parts);
|
||||||
if (!$parts) {
|
if (!$parts) {
|
||||||
throw new Exception(pht('Can not build empty select clause!'));
|
throw new Exception(pht('Can not build empty SELECT clause!'));
|
||||||
}
|
}
|
||||||
|
|
||||||
return 'SELECT '.$this->formatSelectSubclause($parts);
|
return qsprintf($conn, 'SELECT %LQ', $parts);
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @task format
|
|
||||||
*/
|
|
||||||
protected function formatSelectSubclause(array $parts) {
|
|
||||||
$parts = $this->flattenSubclause($parts);
|
|
||||||
if (!$parts) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return implode(', ', $parts);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -277,7 +277,7 @@ abstract class PhabricatorCursorPagedPolicyAwareQuery
|
||||||
*/
|
*/
|
||||||
protected function buildSelectClause(AphrontDatabaseConnection $conn) {
|
protected function buildSelectClause(AphrontDatabaseConnection $conn) {
|
||||||
$parts = $this->buildSelectClauseParts($conn);
|
$parts = $this->buildSelectClauseParts($conn);
|
||||||
return $this->formatSelectClause($parts);
|
return $this->formatSelectClause($conn, $parts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -291,7 +291,7 @@ abstract class PhabricatorCursorPagedPolicyAwareQuery
|
||||||
if ($alias) {
|
if ($alias) {
|
||||||
$select[] = qsprintf($conn, '%T.*', $alias);
|
$select[] = qsprintf($conn, '%T.*', $alias);
|
||||||
} else {
|
} else {
|
||||||
$select[] = '*';
|
$select[] = qsprintf($conn, '*');
|
||||||
}
|
}
|
||||||
|
|
||||||
$select[] = $this->buildEdgeLogicSelectClause($conn);
|
$select[] = $this->buildEdgeLogicSelectClause($conn);
|
||||||
|
|
Loading…
Add table
Reference in a new issue