| From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 |
| From: Darwin Huang <huangdarwin@chromium.org> |
| Date: Mon, 16 Dec 2019 13:48:39 -0800 |
| Subject: [PATCH 14/25] Avoid temp trigger crash |
| |
| Backports https://sqlite.org/src/info/c4cb9708d48ead10 |
| |
| Bug: 1028402 |
| --- |
| third_party/sqlite/patched/src/trigger.c | 8 ++++++-- |
| third_party/sqlite/patched/test/attach4.test | 19 +++++++++++++++++++ |
| 2 files changed, 25 insertions(+), 2 deletions(-) |
| |
| diff --git a/third_party/sqlite/patched/src/trigger.c b/third_party/sqlite/patched/src/trigger.c |
| index 64ccfdeb081e..8a756ca47d8e 100644 |
| --- a/third_party/sqlite/patched/src/trigger.c |
| +++ b/third_party/sqlite/patched/src/trigger.c |
| @@ -662,8 +662,12 @@ void sqlite3UnlinkAndDeleteTrigger(sqlite3 *db, int iDb, const char *zName){ |
| Table *pTab = tableOfTrigger(pTrigger); |
| if( pTab ){ |
| Trigger **pp; |
| - for(pp=&pTab->pTrigger; *pp!=pTrigger; pp=&((*pp)->pNext)); |
| - *pp = (*pp)->pNext; |
| + for(pp=&pTab->pTrigger; *pp; pp=&((*pp)->pNext)){ |
| + if( *pp==pTrigger ){ |
| + *pp = (*pp)->pNext; |
| + break; |
| + } |
| + } |
| } |
| } |
| sqlite3DeleteTrigger(db, pTrigger); |
| diff --git a/third_party/sqlite/patched/test/attach4.test b/third_party/sqlite/patched/test/attach4.test |
| index 54a2c649d5c4..958205697a15 100644 |
| --- a/third_party/sqlite/patched/test/attach4.test |
| +++ b/third_party/sqlite/patched/test/attach4.test |
| @@ -115,4 +115,23 @@ do_test 1.8 { |
| db close |
| foreach {name f} $files { forcedelete $f } |
| |
| +#------------------------------------------------------------------------- |
| +reset_db |
| +do_execsql_test 2.0 { |
| + ATTACH DATABASE '' AS aux; |
| + CREATE TABLE IF NOT EXISTS aux.t1(a, b); |
| + CREATE TEMPORARY TRIGGER tr1 DELETE ON t1 BEGIN |
| + DELETE FROM t1; |
| + END; |
| + CREATE TABLE temp.t1(a, b); |
| +} |
| + |
| +do_execsql_test 2.1 { |
| + DETACH DATABASE aux; |
| +} |
| + |
| +do_execsql_test 2.2 { |
| + DROP TRIGGER tr1; |
| +} |
| + |
| finish_test |
| -- |
| 2.25.0.rc1.283.g88dfdc4193-goog |
| |