blob: e2b4c7b7ae09bf6eaf9a3a2a48d1da005a40f2ad [file] [log] [blame]
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