enchant/Fix_back-ends_that_want_a_NUL-terminated_string.patch
2020-11-06 13:36:28 +00:00

82 lines
3.1 KiB
Diff
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

From 7e729f1fda553ad3e2dceb0d362f07e161a9615e Mon Sep 17 00:00:00 2001
From: Reuben Thomas <rrt@sc3d.org>
Date: Thu, 15 Oct 2020 15:16:32 +0100
Subject: [PATCH] Fix back-ends that want a NUL-terminated string (fix #259)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Voikko and Zembereks APIs assume a NUL-terminated string. Enchant does not
guarantee to provide one, so copy and NUL-terminate the provided string in
the check methods.
---
providers/enchant_voikko.c | 12 ++++++++----
providers/enchant_zemberek.cpp | 14 ++++++++++----
2 files changed, 18 insertions(+), 8 deletions(-)
diff --git a/providers/enchant_voikko.c b/providers/enchant_voikko.c
index 4b82395..8c5cfa8 100644
--- a/providers/enchant_voikko.c
+++ b/providers/enchant_voikko.c
@@ -48,9 +48,11 @@
*/
static int
-voikko_dict_check (EnchantDict * me, const char *const word, size_t len _GL_UNUSED_PARAMETER)
+voikko_dict_check (EnchantDict * me, const char *const word, size_t len)
{
- int result = voikkoSpellCstr((struct VoikkoHandle *)me->user_data, word);
+ char *word_nul = strndup(word, len);
+ int result = voikkoSpellCstr((struct VoikkoHandle *)me->user_data, word_nul);
+ free(word_nul);
if (result == VOIKKO_SPELL_FAILED)
return 1;
else if (result == VOIKKO_SPELL_OK)
@@ -61,9 +63,11 @@ voikko_dict_check (EnchantDict * me, const char *const word, size_t len _GL_UNUS
static char **
voikko_dict_suggest (EnchantDict * me, const char *const word,
- size_t len _GL_UNUSED_PARAMETER, size_t * out_n_suggs)
+ size_t len, size_t * out_n_suggs)
{
- char **voikko_sugg_arr = voikkoSuggestCstr((struct VoikkoHandle *)me->user_data, word);
+ char *word_nul = strndup(word, len);
+ char **voikko_sugg_arr = voikkoSuggestCstr((struct VoikkoHandle *)me->user_data, word_nul);
+ free(word_nul);
if (voikko_sugg_arr == NULL)
return NULL;
for (*out_n_suggs = 0; voikko_sugg_arr[*out_n_suggs] != NULL; (*out_n_suggs)++);
diff --git a/providers/enchant_zemberek.cpp b/providers/enchant_zemberek.cpp
index 83a895a..49ddfd7 100644
--- a/providers/enchant_zemberek.cpp
+++ b/providers/enchant_zemberek.cpp
@@ -142,18 +142,24 @@ extern "C" {
EnchantProvider *init_enchant_provider(void);
static int
-zemberek_dict_check (EnchantDict * me, const char *const word, size_t len _GL_UNUSED_PARAMETER)
+zemberek_dict_check (EnchantDict * me, const char *const word, size_t len)
{
Zemberek *checker = (Zemberek *) me->user_data;
- return checker->checkWord(word);
+ char *word_nul = g_strndup(word, len);
+ int result = checker->checkWord(word_nul);
+ free(word_nul);
+ return result;
}
static char**
zemberek_dict_suggest (EnchantDict * me, const char *const word,
- size_t len _GL_UNUSED_PARAMETER, size_t * out_n_suggs)
+ size_t len, size_t * out_n_suggs)
{
Zemberek *checker = (Zemberek *) me->user_data;
- return checker->suggestWord (word, out_n_suggs);
+ char *word_nul = g_strndup(word, len);
+ char **result = checker->suggestWord(word_nul, out_n_suggs);
+ free(word_nul);
+ return result;
}
static void