From 32182d7a7a67d0d204cd0a37bd211bfd0177bc27 Mon Sep 17 00:00:00 2001 Message-ID: <32182d7a7a67d0d204cd0a37bd211bfd0177bc27.1700093066.git.vivien@planete-kraus.eu> From: Matthias Klumpp Date: Thu, 16 Nov 2023 00:59:15 +0100 Subject: [PATCH] stemmer: Resolve potential issue where stemmer may never be initialized If the initial locale was equal to the current stemming language, we may never have initialized the stemmer (which could lead to crashes or stemming being disabled). So we force the reload to always happen on initialization. CC: #558 --- src/as-stemmer.c | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/src/as-stemmer.c b/src/as-stemmer.c index 63d45267..16ebd09b 100644 --- a/src/as-stemmer.c +++ b/src/as-stemmer.c @@ -47,6 +47,8 @@ G_DEFINE_TYPE (AsStemmer, as_stemmer, G_TYPE_OBJECT) static gpointer as_stemmer_object = NULL; +static void as_stemmer_reload_internal (AsStemmer *stemmer, const gchar *locale, gboolean force); + /** * as_stemmer_finalize: **/ @@ -76,21 +78,14 @@ as_stemmer_init (AsStemmer *stemmer) /* we don't use the locale in XML, so it can be POSIX */ locale = as_get_current_locale_posix (); - stemmer->current_lang = as_utils_locale_to_language (locale); - as_stemmer_reload (stemmer, stemmer->current_lang); + /* force a reload for initialization */ + as_stemmer_reload_internal (stemmer, locale, TRUE); #endif } -/** - * as_stemmer_reload: - * @stemmer: A #AsStemmer - * @locale: The stemming language as POSIX locale. - * - * Allows realoading the #AsStemmer with a different language. - */ -void -as_stemmer_reload (AsStemmer *stemmer, const gchar *locale) +static void +as_stemmer_reload_internal (AsStemmer *stemmer, const gchar *locale, gboolean force) { #ifdef HAVE_STEMMING g_autofree gchar *lang = NULL; @@ -99,7 +94,7 @@ as_stemmer_reload (AsStemmer *stemmer, const gchar *locale) /* check if we need to reload */ lang = as_utils_locale_to_language (locale); locker = g_mutex_locker_new (&stemmer->mutex); - if (as_str_equal0 (lang, stemmer->current_lang)) { + if (!force && as_str_equal0 (lang, stemmer->current_lang)) { g_mutex_locker_free (locker); return; } @@ -119,6 +114,20 @@ as_stemmer_reload (AsStemmer *stemmer, const gchar *locale) #endif } +/** + * as_stemmer_reload: + * @stemmer: A #AsStemmer + * @locale: The stemming language as POSIX locale. + * + * Allows realoading the #AsStemmer with a different language. + * Does nothing if the stemmer is already using the selected language. + */ +void +as_stemmer_reload (AsStemmer *stemmer, const gchar *locale) +{ + as_stemmer_reload_internal (stemmer, locale, FALSE); +} + /** * as_stemmer_stem: * @stemmer: A #AsStemmer -- 2.41.0 vail'>...Ludovic Courtès 2023-06-08substitute: Gracefully retry after failed partial downloads....Ludovic Courtès 2023-05-30substitute: If a server's nar URL is 404, try the next one(s)....Ludovic Courtès 2022-09-28substitute: Retry downloading when a nar is unavailable....Ludovic Courtès 2022-09-24substitute: Test behavior with unroutable substitute server addresses....Ludovic Courtès 2022-02-14publish: Do not sign the URL/Compression/FileSize narinfo fields....Ludovic Courtès 2021-04-09daemon: 'guix substitute' replies on FD 4....Ludovic Courtès 2021-01-16guix: Move narinfo code from substitute script to module....Christopher Baines 2020-12-19tests: Check the mtime and permissions of substituted items....Ludovic Courtès 2020-12-19daemon: Let 'guix substitute' perform hash checks....Ludovic Courtès 2020-12-08daemon: Run 'guix substitute --substitute' as an agent....Ludovic Courtès 2020-12-08daemon: Use 'Agent' to spawn 'guix substitute --query'....Ludovic Courtès 2020-08-24Use "guile-zlib" and "guile-lzlib" instead of (guix config)....Mathieu Othacehe