aboutsummaryrefslogtreecommitdiffstats
path: root/recipes-wam/cef/files/chromium/0001-sql-relax-constraints-on-VirtualCursor-layout.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-wam/cef/files/chromium/0001-sql-relax-constraints-on-VirtualCursor-layout.patch')
-rw-r--r--recipes-wam/cef/files/chromium/0001-sql-relax-constraints-on-VirtualCursor-layout.patch51
1 files changed, 51 insertions, 0 deletions
diff --git a/recipes-wam/cef/files/chromium/0001-sql-relax-constraints-on-VirtualCursor-layout.patch b/recipes-wam/cef/files/chromium/0001-sql-relax-constraints-on-VirtualCursor-layout.patch
new file mode 100644
index 000000000..624dd5019
--- /dev/null
+++ b/recipes-wam/cef/files/chromium/0001-sql-relax-constraints-on-VirtualCursor-layout.patch
@@ -0,0 +1,51 @@
+From 94ffefa81d00466fabcf1050080c95fa4b294dda Mon Sep 17 00:00:00 2001
+From: Elly Fong-Jones <ellyjones@chromium.org>
+Date: Thu, 2 Mar 2023 00:15:11 +0000
+Subject: [PATCH 1/9] sql: relax constraints on VirtualCursor layout
+
+VirtualCursor::FromSqliteCursor required that VirtualCursor had a
+standard layout, but in fact VirtualCursor shouldn't have a standard
+layout, and the fact that it does with libc++ is a deviation from the
+C++ standard. This change:
+
+1. Relaxes the requirement that VirtualCursor has a standard layout, and
+2. Relaxes the requirement that the sqlite_cursor_ field has to be at
+ offset 0
+
+by use of offsetof() and pointer subtraction. This change both improves
+standards compliance and makes this code build with libstdc++.
+
+Bug: 1380656
+Change-Id: I9c47abd9197b187da0360ca5619ccf7dadab4f33
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4292313
+Reviewed-by: Austin Sullivan <asully@chromium.org>
+Commit-Queue: Elly Fong-Jones <ellyjones@chromium.org>
+Cr-Commit-Position: refs/heads/main@{#1111925}
+---
+ sql/recover_module/cursor.h | 10 ++++------
+ 1 file changed, 4 insertions(+), 6 deletions(-)
+
+diff --git a/sql/recover_module/cursor.h b/sql/recover_module/cursor.h
+index 1970bdca8c6f1..4cb0655700977 100644
+--- a/sql/recover_module/cursor.h
++++ b/sql/recover_module/cursor.h
+@@ -63,12 +63,10 @@ class VirtualCursor {
+ // |sqlite_cursor| must have been returned by VirtualTable::SqliteCursor().
+ static inline VirtualCursor* FromSqliteCursor(
+ sqlite3_vtab_cursor* sqlite_cursor) {
+- static_assert(std::is_standard_layout<VirtualCursor>::value,
+- "needed for the reinterpret_cast below");
+- static_assert(offsetof(VirtualCursor, sqlite_cursor_) == 0,
+- "sqlite_cursor_ must be the first member of the class");
+- VirtualCursor* result = reinterpret_cast<VirtualCursor*>(sqlite_cursor);
+- DCHECK_EQ(sqlite_cursor, &result->sqlite_cursor_);
++ VirtualCursor* result = reinterpret_cast<VirtualCursor*>(
++ (reinterpret_cast<char*>(sqlite_cursor) -
++ offsetof(VirtualCursor, sqlite_cursor_)));
++ CHECK_EQ(sqlite_cursor, &result->sqlite_cursor_);
+ return result;
+ }
+
+--
+2.39.2
+