<pre style='margin:0'>
Clemens Lang (neverpanic) pushed a commit to branch master
in repository macports-base.

</pre>
<p><a href="https://github.com/macports/macports-base/commit/19468ac56d9635bcf08a5dd5b6647cc0a61c6f13">https://github.com/macports/macports-base/commit/19468ac56d9635bcf08a5dd5b6647cc0a61c6f13</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new 19468ac5 cregistry: Avoid segfault on extended result codes
</span>19468ac5 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit 19468ac56d9635bcf08a5dd5b6647cc0a61c6f13
</span>Author: Clemens Lang <cal@macports.org>
AuthorDate: Wed Apr 7 20:34:27 2021 +0200

<span style='display:block; white-space:pre;color:#404040;'>    cregistry: Avoid segfault on extended result codes
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    When an SQLite call returned one of the extended result codes (see
</span><span style='display:block; white-space:pre;color:#404040;'>    https://sqlite.org/rescode.html#extended_result_code_list), the existing
</span><span style='display:block; white-space:pre;color:#404040;'>    switch/case did not handle that, errPtr remained uninitialized, and
</span><span style='display:block; white-space:pre;color:#404040;'>    following code crashed with a segmentation fault.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Avoid this by handling the extended result codes just like we're
</span><span style='display:block; white-space:pre;color:#404040;'>    handling SQLITE_ERROR. Additionally, default-initialize the errPtr
</span><span style='display:block; white-space:pre;color:#404040;'>    structure to avoid crashes in the future.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    This manifested itself when attempting to uninstall ports from
</span><span style='display:block; white-space:pre;color:#404040;'>    a database that returned SQLITE_CORRUPT_INDEX (779).
</span>---
 src/cregistry/entry.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/cregistry/entry.c b/src/cregistry/entry.c
</span><span style='display:block; white-space:pre;color:#808080;'>index 017c181f..f1bf289a 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/cregistry/entry.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/cregistry/entry.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -251,6 +251,11 @@ reg_entry* reg_entry_open(reg_registry* reg, char* name, char* version,
</span> int reg_entry_delete(reg_entry* entry, reg_error* errPtr) {
     reg_registry* reg = entry->reg;
     int result = 0;
<span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    errPtr->code = REG_SQLITE_ERROR;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    errPtr->description = "an unknown sqlite error occurred";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    errPtr->free = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>     sqlite3_stmt* ports = NULL;
     sqlite3_stmt* files = NULL;
     sqlite3_stmt* dependencies = NULL;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -293,6 +298,7 @@ int reg_entry_delete(reg_entry* entry, reg_error* errPtr) {
</span>                                                         case SQLITE_BUSY:
                                                             break;
                                                         case SQLITE_ERROR:
<span style='display:block; white-space:pre;background:#e0ffe0;'>+                                                        default:
</span>                                                             reg_sqlite_error(reg->db,
                                                                     errPtr, NULL);
                                                             break;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -302,6 +308,7 @@ int reg_entry_delete(reg_entry* entry, reg_error* errPtr) {
</span>                                             case SQLITE_BUSY:
                                                 break;
                                             case SQLITE_ERROR:
<span style='display:block; white-space:pre;background:#e0ffe0;'>+                                            default:
</span>                                                 reg_sqlite_error(reg->db,
                                                         errPtr, NULL);
                                                 break;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -311,6 +318,7 @@ int reg_entry_delete(reg_entry* entry, reg_error* errPtr) {
</span>                                 case SQLITE_BUSY:
                                     break;
                                 case SQLITE_ERROR:
<span style='display:block; white-space:pre;background:#e0ffe0;'>+                                default:
</span>                                     reg_sqlite_error(reg->db, errPtr, NULL);
                                     break;
                             }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -325,6 +333,7 @@ int reg_entry_delete(reg_entry* entry, reg_error* errPtr) {
</span>                 case SQLITE_BUSY:
                     break;
                 case SQLITE_ERROR:
<span style='display:block; white-space:pre;background:#e0ffe0;'>+                default:
</span>                     reg_sqlite_error(reg->db, errPtr, NULL);
                     break;
             }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1137,6 +1146,7 @@ int reg_entry_activate(reg_entry* entry, char** files, char** as_files,
</span>                                         case SQLITE_BUSY:
                                             break;
                                         case SQLITE_ERROR:
<span style='display:block; white-space:pre;background:#e0ffe0;'>+                                        default:
</span>                                             reg_sqlite_error(reg->db, errPtr,
                                                     update_query);
                                             result = 0;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1147,6 +1157,7 @@ int reg_entry_activate(reg_entry* entry, char** files, char** as_files,
</span>                             case SQLITE_BUSY:
                                 break;
                             case SQLITE_ERROR:
<span style='display:block; white-space:pre;background:#e0ffe0;'>+                            default:
</span>                                 reg_sqlite_error(reg->db, errPtr, select_query);
                                 result = 0;
                                 break;
</pre><pre style='margin:0'>

</pre>