emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/jinx d7c2af7f0b 3/3: Avoid error if enchant_dict_get_ex


From: ELPA Syncer
Subject: [elpa] externals/jinx d7c2af7f0b 3/3: Avoid error if enchant_dict_get_extra_word_characters does not return UTF-8
Date: Mon, 27 Mar 2023 05:58:08 -0400 (EDT)

branch: externals/jinx
commit d7c2af7f0be5217d6374069b57d9c802020aad76
Author: Daniel Mendler <mail@daniel-mendler.de>
Commit: Daniel Mendler <mail@daniel-mendler.de>

    Avoid error if enchant_dict_get_extra_word_characters does not return UTF-8
    
    This is a bug in Enchant fixed in version 2.3.1. See #5.
---
 CHANGELOG.org |  1 +
 jinx-mod.c    | 12 +++++++++---
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/CHANGELOG.org b/CHANGELOG.org
index a4832d2410..d05d42b3ca 100644
--- a/CHANGELOG.org
+++ b/CHANGELOG.org
@@ -6,6 +6,7 @@
 
 - =jinx-languages=: Fall back to =$LANG= environment variable, since
   =current-locale-environment= is an Emacs 29 addition.
+- =jinx--mod-wordchars=: Handle non-UTF8 return values gracefully.
 
 * Version 0.3 (2023-03-27)
 
diff --git a/jinx-mod.c b/jinx-mod.c
index 1374ee876e..69d1958fc8 100644
--- a/jinx-mod.c
+++ b/jinx-mod.c
@@ -122,9 +122,15 @@ static emacs_value jinx_add(emacs_env* env, ptrdiff_t 
jinx_unused(nargs),
 static emacs_value jinx_wordchars(emacs_env* env, ptrdiff_t jinx_unused(nargs),
                                   emacs_value args[], void* jinx_unused(data)) 
{
     EnchantDict* dict = env->get_user_ptr(env, args[0]);
-    return dict
-        ? jinx_str(env, enchant_dict_get_extra_word_characters(dict))
-        : env->intern(env, "nil");
+    if (dict) {
+        // Enchant older than 2.3.1 sometimes does not return UTF-8
+        // See https://github.com/AbiWord/enchant/blob/master/NEWS
+        emacs_value str = jinx_str(env, 
enchant_dict_get_extra_word_characters(dict));
+        if (env->non_local_exit_check(env) == emacs_funcall_exit_return)
+            return str;
+        env->non_local_exit_clear(env);
+    }
+    return env->intern(env, "nil");
 }
 
 static emacs_value jinx_suggest(emacs_env* env, ptrdiff_t jinx_unused(nargs),



reply via email to

[Prev in Thread] Current Thread [Next in Thread]