summaryrefslogtreecommitdiff
path: root/chromium/third_party/sqlite/patches/0014-Avoid-temp-trigger-crash.patch
blob: e2b4c7b7ae09bf6eaf9a3a2a48d1da005a40f2ad (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
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