OSDN Git Service

RESTRICT AUTOMERGE Strict SQLiteQueryBuilder needs to be stricter.
authorJeff Sharkey <jsharkey@android.com>
Tue, 16 Jul 2019 22:50:42 +0000 (16:50 -0600)
committerBryan Ferris <bferris@google.com>
Tue, 10 Sep 2019 21:16:10 +0000 (21:16 +0000)
commit0e66ea6f3221aa8ccbb78ce38fbcaa67d8ea94f9
treed11fe2af77cd87fc40f4e3b98f92439750db7e84
parent13f49c42599dc2ea0be376be34275aefcb70d398
RESTRICT AUTOMERGE Strict SQLiteQueryBuilder needs to be stricter.

Malicious callers can leak side-channel information by using
subqueries in any untrusted inputs where SQLite allows "expr" values.

This change offers setStrictGrammar() to prevent this by outright
blocking subqueries in WHERE and HAVING clauses, and by requiring
that GROUP BY and ORDER BY clauses be composed only of valid columns.

This change also offers setStrictColumns() to require that all
untrusted column names are valid, such as those in ContentValues.

Relaxes to always allow aggregation operators on returned columns,
since untrusted callers can always calculate these manually.

Bug: 135270103135269143
Test: atest android.database.sqlite.cts.SQLiteQueryBuilderTest
Test: atest FrameworksCoreTests:android.database.sqlite.SQLiteTokenizerTest
Change-Id: I0dacb53170ce573a2fe103cbff455782bfdb5d41
core/java/android/database/sqlite/SQLiteQueryBuilder.java
core/java/android/database/sqlite/SQLiteTokenizer.java [new file with mode: 0644]
core/tests/coretests/src/android/database/sqlite/SQLiteTokenizerTest.java [new file with mode: 0644]