From a347b26cba2124496b1fa5adb75f43c8a05842a6 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Tue, 23 May 2023 14:30:31 +0300 Subject: [PATCH] Disable loading SQLite3 extensions when SQLite3 version is too old * src/sqlite.c (HAVE_LOAD_EXTENSION): Define to 1 only if enabling/disabling extension loading is supported as well. (load_dll_functions, Fsqlite_load_extension): Condition on HAVE_LOAD_EXTENSION, not on HAVE_SQLITE3_LOAD_EXTENSION. (Bug#63653) --- src/sqlite.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/sqlite.c b/src/sqlite.c index 77ce61ba657..852e3746ef4 100644 --- a/src/sqlite.c +++ b/src/sqlite.c @@ -32,6 +32,17 @@ YOSHIDA , which can be found at: #include +/* Support for loading SQLite extensions requires the ability to + enable and disable loading of extensions (by default this is + disabled, and we want to keep it that way). The required macro is + available since SQLite 3.13. */ +# if defined HAVE_SQLITE3_LOAD_EXTENSION && \ + defined SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION +# define HAVE_LOAD_EXTENSION 1 +# else +# define HAVE_LOAD_EXTENSION 0 +# endif + #ifdef WINDOWSNT # include @@ -77,7 +88,7 @@ DEF_DLL_FN (SQLITE_API int, sqlite3_exec, DEF_DLL_FN (SQLITE_API int, sqlite3_prepare_v2, (sqlite3*, const char*, int, sqlite3_stmt**, const char**)); -# ifdef HAVE_SQLITE3_LOAD_EXTENSION +# if HAVE_LOAD_EXTENSION DEF_DLL_FN (SQLITE_API int, sqlite3_load_extension, (sqlite3*, const char*, const char*, char**)); # undef sqlite3_load_extension @@ -175,7 +186,7 @@ load_dll_functions (HMODULE library) LOAD_DLL_FN (library, sqlite3_column_text); LOAD_DLL_FN (library, sqlite3_column_name); LOAD_DLL_FN (library, sqlite3_exec); -# ifdef HAVE_SQLITE3_LOAD_EXTENSION +# if HAVE_LOAD_EXTENSION LOAD_DLL_FN (library, sqlite3_load_extension); LOAD_DLL_FN (library, sqlite3_db_config); # endif @@ -675,7 +686,7 @@ DEFUN ("sqlite-pragma", Fsqlite_pragma, Ssqlite_pragma, 2, 2, 0, SSDATA (concat2 (build_string ("PRAGMA "), pragma))); } -#ifdef HAVE_SQLITE3_LOAD_EXTENSION +#if HAVE_LOAD_EXTENSION DEFUN ("sqlite-load-extension", Fsqlite_load_extension, Ssqlite_load_extension, 2, 2, 0, doc: /* Load an SQlite MODULE into DB. @@ -750,7 +761,7 @@ Only modules on Emacs' list of allowed modules can be loaded. */) } return Qnil; } -#endif /* HAVE_SQLITE3_LOAD_EXTENSION */ +#endif /* HAVE_LOAD_EXTENSION */ DEFUN ("sqlite-next", Fsqlite_next, Ssqlite_next, 1, 1, 0, doc: /* Return the next result set from SET. @@ -860,7 +871,7 @@ syms_of_sqlite (void) defsubr (&Ssqlite_commit); defsubr (&Ssqlite_rollback); defsubr (&Ssqlite_pragma); -#ifdef HAVE_SQLITE3_LOAD_EXTENSION +#if HAVE_LOAD_EXTENSION defsubr (&Ssqlite_load_extension); #endif defsubr (&Ssqlite_next); -- 2.39.2