pkgsrc-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
pkg/60727: inputmethod/anthy: crashes and hangs on its own learning record, and has wrong dictionary entries
>Number: 60727
>Category: pkg
>Synopsis: inputmethod/anthy: crashes and hangs on its own learning record, and has wrong dictionary entries
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: pkg-manager
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Mon Sep 14 13:30:01 +0000 2026
>Originator: Showta Ishizaki
>Release: NetBSD 11.0, pkgsrc as of 2026-09-14 (inputmethod/anthy last changed 2025-12-19)
>Organization:
>Environment:
System: NetBSD 11.0 amd64
Architecture: x86_64
Machine: amd64
>Description:
Five patches. Every one of them is carried by Fedora and is
in anthy-unicode, the fork that is still maintained.
Two are code, and both are set off by the learning record
under ~/.anthy rather than by anything the user types.
src-diclib/xstr.c: anthy_xstrcmp dereferences its arguments
without checking them. reorder_by_suffix hands it
anthy_get_nth_xstr(0), which returns NULL whenever the first
value of the matching SUFFIX_HISTORY row is not a string, and
anthy dies with SIGSEGV inside anthy_set_string -- so every
conversion of a word ending in a suffix takes down whatever
loaded the library. Fedora added this guard in 2013 as
anthy-fix-segfault.patch, for ibus-anthy crashing in
anthy_xstrcmp (their bug 973127). I reproduced it here and
get their backtrace frame for frame.
src-worddic/record.c: read_1_token reports the end of a line
only on '\n'. If the last line of a record has no trailing
newline, the loop in read_1_row that reads tokens until the
end of the line never ends, and anthy hangs at start-up.
Fedora has carried this as anthy-fix-eol.patch since 2024-09.
Three are dictionary data.
alt-cannadic/g_fname.t and mkworddic/name.t both give the
novelist Abe Kobo (1924-1993) as ����. He wrote his family
name ����. The neighbouring entries in both files spell
å®?å??æ??ä¸?, å®?å??æ?´æ?? and å®?å??ã?ªã?¤ã?¿ correctly, so this is an
isolated slip rather than a convention the dictionary follows.
mkworddic/compound.t has seven entries whose kanji give a
different word from the one the reading asks for:
ã??ã??ã??ã??ã??ã??ã??ã??ã?? ç??é?¢è¨¼æ?? -> ç??é?¢ç?§æ??
ã??ã??ã??ã??ã?¯ã??ã?¦ã?? é«?é??å?¤å®? -> å?¬é??å?¤å®?
ã??ã??ã??ã??ã??ã??ã??ã?? æ¶?å??ç?¨æ°´ -> æ¶?ç?«ç?¨æ°´
ã?²ã?ªã??ã??ã??ã??ã??ã?? é??é?£å¼±è?? -> é?¿é?£å¼±è??
ã?²ã?ªã??ã??ã??ã?? é??é?£é??è·¯ -> é?¿é?£é??è·¯
ã??ã?¾ã??ã??ã??ã??ã?? æ²¹è??以ä¸? -> æ²¹è??ç?°å¸¸
ã??ã??ã??ã??ã??ã??ã??ã??ã?? æ©é??æ?´å?? -> å?¨æ?²é?²é?³
The last had been given the entry for a different word
entirely; æ©é??æ?´å?? is added back under its own reading,
ã?»ã?©ã??ã??ã??ã?³. Two readings were wrong: ã??ã??ã??ã??ã?£ã?? for
ä¼?æ´¥æ¼?å?¨, which is ã??ã??ã?¥, and ã??ã??ã??ã??ã??ã??ã??ã?? for é?¢æ°´é??å±?,
which is ã??ã??ã??ã??. Seven more entries carry a part-of-speech
tag without its leading #, or #35, #T5, #T#5 where #T30 or
#T35 was meant. mkworddic takes the tag only from a token
that starts with # and then names a known type, so those
seven compounds were never registered at all.
Fedora's anthy-fix-typo-in-dict.patch also adds the # to
nine tags in mkworddic/udict. I left that part out: that
file is read with sscanf and the tag field is never looked
at, so the change makes no difference to the built
dictionary.
The patches are not all in one character set, because the
files they patch are not: alt-cannadic/g_fname.t is UTF-8,
mkworddic/name.t and compound.t are EUC-JP. That is also
why the same correction to the same name appears twice.
This report is sent as unknown-8bit for the same reason.
>How-To-Repeat:
I built anthy-9100h twice from the pristine tarball, once as
is and once with the five patches, and drove both through a
small program that links against the freshly built libanthy.
For the crash, put one line in the learning record and then
convert a word ending in a suffix. The row is keyed by the
reading of the suffix:
printf 'ADD "SUFFIX_HISTORY" S"ã??ã??"\n' \
> $HOME/.anthy/last-record2_<personality>.utf8
Converting ã??ã?ªã??ã??ã?? then dies in anthy_set_string:
#0 anthy_xstrcmp (x1=0x7f7fff1110f0, x2=0x0) at xstr.c:387
#1 reorder_by_suffix at candhistory.c:184
#2 anthy_reorder_candidates_by_history at candhistory.c:206
#3 apply_learning at candsort.c:238
#4 anthy_sort_candidate at candsort.c:264
#5 make_candidates at context.c:349
#6 anthy_do_context_set_str at context.c:366
#7 anthy_set_string at main.c:230
which is frame for frame, line for line, what the Fedora bug
shows. The unpatched build exits 139, the patched one
converts and exits 0.
That row need not be hand-made to be wrong. Any first value
that is not a string gives the same NULL and the same crash:
no values at all, an explicit E, a number, or S"" -- and S""
is what anthy's own writer emits, because write_quote_xstr
puts nothing between the quotes when the xstr it is given is
empty or damaged (the comment there calls it a countermeasure
for broken dictionary or learning data). So anthy can write
a record it will crash on when it reads it back, which fits
the Fedora reporter finding that deleting ~/.anthy stopped
the crashes. What damages a value in the first place I did
not chase down.
For the hang, the same program is run twice in one HOME. The
first run leaves the record ending in a newline; strip that
newline and run again, and the unpatched build never returns
(timeout(1) kills it after 20 s) while the patched one
converts and exits.
For the dictionary, I ran the test driver in the build tree
(test/anthy, which uses the dictionary just built) on the
readings above. The first candidate went from
ã??ã??ã??ã??ã??ã??ã??ã??ã?? ç??é?¢è¨¼æ?? -> ç??é?¢ç?§æ??
ã??ã??ã??ã??ã?¯ã??ã?¦ã?? é«?é??å?¤å®? -> å?¬é??å?¤å®?
ã??ã??ã??ã??ã??ã??ã??ã?? æ¶?å??ç?¨æ°´ -> æ¶?ç?«ç?¨æ°´
ã?²ã?ªã??ã??ã??ã??ã??ã?? é??é?£å¼±è?? -> é?¿é?£å¼±è??
ã?²ã?ªã??ã??ã??ã?? é??é?£é??è·¯ -> é?¿é?£é??è·¯
ã??ã?¾ã??ã??ã??ã??ã?? æ²¹è??以ä¸? -> æ²¹è??ç?°å¸¸
ã??ã??ã??ã??ã??ã??ã??ã??ã?? æ©é??æ?´å?? -> å?¨æ?²é?²é?³
ã??ã?¹ã??ã??ã?¼ã?? é?¿é?¨å?¬æ?¿ -> å®?é?¨å?¬æ?¿
ã??ã??ã??ã??ã??ã??ã??ã?? ç©?æ°´é??å±? -> é?¢æ°´é??å±?
ã??ã??ã??ã??ã?? å?³è·¯ç·? -> ç?¾è·¯ç·?
and ã??ã?£ã?±ã??ã??ã??ã??, ã??ã??ã?¶ã??ã??ã??ã??ã??ã?¤, ã??ã??ã?¦ã??ã??ã??ã??,
ã??ã?£ã?¡ã??ã??ã?¶ã?¶ã?? and the two 縦貫è?ªå??è»?é?? entries, whose tags
were malformed, are now offered as one compound instead of
being assembled word by word.
>Fix:
The diff below: five new patches under inputmethod/anthy/
patches (they need cvs add), distinfo, and PKGREVISION 1 -> 2.
inputmethod/anthy-elisp shares PATCHDIR and DISTINFO_FILE
through Makefile.common, so it sees these patches too, but
it installs only src-util/*.el and *.elc and none of the five
touch src-util. Its binary package is unchanged and its
PKGREVISION is left alone. That is the mirror image of
PR pkg/60650, which fixes the .el files, bumps anthy-elisp
and leaves inputmethod/anthy alone; the two do not overlap.
Checked today: all five apply to a pristine anthy-9100h with
no offset and no fuzz (24 hunks), the distinfo lines are what
makepatchsum writes, the diff applies to a fresh copy of
inputmethod/anthy with patch -p0, and make package builds
anthy-9100hnb2 on NetBSD 11.0/amd64.
diff -urN -x CVS inputmethod/anthy/Makefile inputmethod/anthy/Makefile
--- inputmethod/anthy/Makefile 2023-09-06 01:50:50.000000000 +0000
+++ inputmethod/anthy/Makefile 2026-09-14 12:18:40.747222547 +0000
@@ -2,7 +2,7 @@
.include "../../inputmethod/anthy/Makefile.common"
-PKGREVISION= 1
+PKGREVISION= 2
EXTRACT_ONLY= ${DISTNAME}.tar.gz
MAINTAINER= taya%NetBSD.org@localhost
diff -urN -x CVS inputmethod/anthy/distinfo inputmethod/anthy/distinfo
--- inputmethod/anthy/distinfo 2023-09-07 14:44:51.000000000 +0000
+++ inputmethod/anthy/distinfo 2026-09-14 13:11:23.635614507 +0000
@@ -9,4 +9,9 @@
BLAKE2s (okinawa-20090801.t) = 723e4e0e6ed7bdd5a9ee309934c2465d5040ad8a5511929dfd9346e0cabe3590
SHA512 (okinawa-20090801.t) = 03cd20ef12ea25bb462a94e77ee04825c5acd4e9281bfe9c33d390a0106d2e3113c51083389bb21996af9bcf9a74acde6fbcdc6006f737b8a74fc55abc7d6260
Size (okinawa-20090801.t) = 165520 bytes
+SHA1 (patch-alt-cannadic_g_fname.t) = 8cc6442b616c98fba935ddb7b5a474efe3b8d4b4
SHA1 (patch-anthy.el) = 3464a065d4dd25f38cd2990e0796eba53e69876a
+SHA1 (patch-mkworddic_compound.t) = 20fba0290b9b282a6b90b28b91324418b3a5bd6a
+SHA1 (patch-mkworddic_name.t) = cfb6e34cb13ffc87e6cfe51dcceac343ec458aea
+SHA1 (patch-src-diclib_xstr.c) = feb498f335c725693b44b54a50e3f7bb5a9f9a7d
+SHA1 (patch-src-worddic_record.c) = 1da8715b1f5b80e9ee2c9744d85f66d839405648
diff -urN -x CVS inputmethod/anthy/patches/patch-alt-cannadic_g_fname.t inputmethod/anthy/patches/patch-alt-cannadic_g_fname.t
--- inputmethod/anthy/patches/patch-alt-cannadic_g_fname.t 1970-01-01 00:00:00.000000000 +0000
+++ inputmethod/anthy/patches/patch-alt-cannadic_g_fname.t 2026-09-14 13:10:52.197867146 +0000
@@ -0,0 +1,25 @@
+$NetBSD$
+
+Fix the kanji for the novelist Abe Kobo (1924-1993). The entry reads
+"abekoubou" and gives ����; he wrote his family name ����.
+
+The neighbouring entries in this file already spell å®?å??æ??ä¸?, å®?å??æ?´æ??
+and å®?å??ã?ªã?¤ã?¿ correctly, so this is an isolated slip rather than a
+convention the dictionary follows. Writing a person's name with the
+wrong character is a discourtesy in Japanese, and an input method that
+offers only the wrong form makes the right one awkward to type.
+
+Taken from Fedora, which has carried this since 2010 as
+anthy-fix-typo-in-dict-name.patch.
+
+--- alt-cannadic/g_fname.t.orig
++++ alt-cannadic/g_fname.t
+@@ -82,7 +82,7 @@
+ ã??ã?¨ã??ã? ã??ã??ã?? #JN*100 #_4é?¿å??ç?°_3é«?
+ ã??ã?ªã??ã?¾ã??ã??ã?? #JN*10 #_4ç©´å±±_3å°?ä»?
+ ã??ã?³ã??ã??ã?? #JN*100 #_3ã??ã?³ã??_2å?ª
+-ã??ã?¹ã??ã??ã?¼ã?? #JN*10 #_2é?¿é?¨_4å?¬æ?¿
++ã??ã?¹ã??ã??ã?¼ã?? #JN*10 #_2å®?é?¨_4å?¬æ?¿
+ ã??ã?¹ã??ã??ã??ã?? #JN*100 #_2å®?å??_4æ??ä¸?
+ ã??ã?¹ã??ã??ã??ã?? #JN*50 #_2å®?å??_4æ?´æ??
+ ã??ã?¹ã?ªã?¤ã?¿ #JN*150 #_2å®?å??_3ã?ªã?¤ã?¿
diff -urN -x CVS inputmethod/anthy/patches/patch-mkworddic_compound.t inputmethod/anthy/patches/patch-mkworddic_compound.t
--- inputmethod/anthy/patches/patch-mkworddic_compound.t 1970-01-01 00:00:00.000000000 +0000
+++ inputmethod/anthy/patches/patch-mkworddic_compound.t 2026-09-14 13:10:52.198418331 +0000
@@ -0,0 +1,207 @@
+$NetBSD$
+
+Fix wrong kanji, wrong readings and malformed part-of-speech tags.
+
+The conversions corrected here give a different word from the one the reading
+asks for:
+
+ ¤²¤ó¤«¤ó¤·¤ç¤¦¤á¤¤ ¸¼´Ø¾ÚÌÀ -> ¸¼´Ø¾ÈÌÀ
+ ¤³¤¦¤«¤¤¤Ï¤ó¤Æ¤¤ ¹â³¬È½Äê -> ¸ø³«È½Äê
+ ¤·¤ç¤¦¤«¤è¤¦¤¹¤¤ ¾Ã²½ÍÑ¿å -> ¾Ã²ÐÍÑ¿å
+ ¤Ò¤Ê¤ó¤¸¤ã¤¯¤·¤ã ÈóÆñ¼å¼Ô -> ÈòÆñ¼å¼Ô
+ ¤Ò¤Ê¤ó¤¿¤¤¤í ÈóÆñÂàÏ© -> ÈòÆñÂàÏ©
+ ¤æ¤Þ¤¯¤¤¤¸¤ç¤¦ ÌýËì°Ê¾å -> ÌýËì°Û¾ï
+ ¤¼¤ó¤¤ç¤¯¤í¤¯¤ª¤ó ÊâÆ»À°È÷ -> Á´¶ÊÏ¿²»
+
+The last one had been given the entry for a different word entirely; ÊâÆ»À°È÷
+is added back under its own reading, ¤Û¤É¤¦¤»¤¤¤Ó.
+
+Two readings were wrong: ¤¢¤¤¤º¤·¤Ã¤ for ²ñÄż¿´ï, which is ¤¢¤¤¤Å, and
+¤«¤ó¤¹¤¤¤¤ó¤¾¤¯ for ´Ø¿å¶â°, which is ¤»¤¤¹¤¤. Seven entries carried a
+malformed part-of-speech tag (no leading #, or #35, #T5, #T#5 where #T30 or
+#T35 was meant); mkworddic takes the tag only from a token that starts with #
+and names a known type, so those compounds were never registered.
+
+Fedora has carried these since 2010, and anthy-unicode -- the fork that is
+still maintained -- has every one of them.
+
+--- mkworddic/compound.t.orig
++++ mkworddic/compound.t
+@@ -8,7 +8,6 @@
+ ¤¢¤¤¤·¤ã¤»¤¤¤·¤ó #T35 #_4°¦¼Ò_4Àº¿À
+ ¤¢¤¤¤·¤ç¤¦¤·¤ó¤À¤ó #T35 #_5ÁêÀ_4¿ÇÃÇ
+ ¤¢¤¤¤·¤ç¤¦¤á¤¤ #T35 #_5°¦¾Î_2̾
+-¤¢¤¤¤º¤·¤Ã¤ #T35 #_3²ñÄÅ_3¼¿´ï
+ ¤¢¤¤¤¼¤ó¤·¤å¤¿¤Ã¤È #CN ¥¢¥¤¥¼¥ó¥·¥å¥¿¥Ã¥È
+ ¤¢¤¤¤¾¤¦¤²¤ #T35 #_4°¦Áþ_2·à
+ ¤¢¤¤¤Á¤¤¤À¤¤ #T35 #_3°¦ÃÎ_3°åÂç
+@@ -20,6 +19,7 @@
+ ¤¢¤¤¤Á¤³¤¦¤¸¤ç¤¦ #T35 #_3°¦ÃÎ_5¹©¾ì
+ ¤¢¤¤¤Á¤³¤¦¤À¤¤ #T35 #_3°¦ÃÎ_4¹©Âç
+ ¤¢¤¤¤Á¤·¤å¤Ã¤·¤ó #T35 #_3°¦ÃÎ_5½Ð¿È
++¤¢¤¤¤Å¤·¤Ã¤ #T35 #_3²ñÄÅ_3¼¿´ï
+ ¤¢¤¤¤Å¤À¤¤¤¬¤¯ #T35 #_3²ñÄÅ_4Âç³Ø
+ ¤¢¤¤¤Å¤Æ¤Ä¤É¤¦ #T35 #_3²ñÄÅ_4Å´Æ»
+ ¤¢¤¤¤Å¤Æ¤Ä¤É¤¦¤»¤ó #T35 #_3²ñÄÅ_6Å´Æ»Àþ
+@@ -1987,7 +1987,7 @@
+ ¤¤¤Ã¤Ñ¤ó¤è¤ä¤¯¤«¤¤¤· #T35 #_4°ìÈÌ_3ͽÌó_3³«»Ï
+ ¤¤¤Ã¤Ñ¤ó¤ê¤ç¤¯ #T35 #_4°ìÈÌ_3ÎÏ
+ ¤¤¤Ã¤Ñ¤ó¤ê¤ç¤³¤¦ #T35 #_4°ìÈÌ_4ι¹Ô
+-¤¤¤Ã¤Ñ¤ó¤ê¤è¤¦ #35 #_4°ìÈÌ_3ÍøÍÑ
++¤¤¤Ã¤Ñ¤ó¤ê¤è¤¦ #T30 #_4°ìÈÌ_3ÍøÍÑ
+ ¤¤¤Ã¤Ñ¤ó¤ê¤è¤¦¤·¤ã #T35 #_4°ìÈÌ_3ÍøÍÑ_2¼Ô
+ ¤¤¤Ã¤Ñ¤ó¤ê¤è¤¦¤·¤ã¤à¤ #T35 #_4°ìÈÌ_3ÍøÍÑ_2¼Ô_2¸þ
+ ¤¤¤Ã¤Ñ¤ó¤ê¤í¤ó #T35 #_4°ìÈÌ_3ÍýÏÀ
+@@ -9714,7 +9714,6 @@
+ ¤«¤ó¤¸¤ó¤º¤â¤¦ #T35 #_4´«¿Ê_3ÁêËÐ
+ ¤«¤ó¤¸¤ó¤Á¤ç¤¦ #T35 #_4´«¿Ê_3Ä¢
+ ¤«¤ó¤¹¤¤¤«¤·¤ç #T35 #_4´§¿å_3²Õ½ê
+-¤«¤ó¤¹¤¤¤¤ó¤¾¤¯ #T35 #_4´Ø¿å_4¶â°
+ ¤«¤ó¤¹¤¤¤®¤ç #T35 #_4´¨¿å_2µû
+ ¤«¤ó¤¹¤¤¤Ð¤·¤ç #T35 #_4´§¿å_3¾ì½ê
+ ¤«¤ó¤¹¤¦¤«¤¤¤»¤ #T35 #_4´Ø¿ô_4²òÀÏ
+@@ -10235,7 +10234,7 @@
+ ¤«¤ó¤Ö¤¸¤ó¤¸ #T35 #_3´´Éô_3¿Í»ö
+ ¤«¤ó¤Ö¤Ä¤ä #T35 #_4´¥Êª_1²°
+ ¤«¤ó¤Ö¤ê #T35 #_2´¨_2¥Ö¥ê
+-¤«¤ó¤Ö¤ê¤å¤¦¤·¤å¤Ä #T#5 #_3´´Éô_6ή½Ð
++¤«¤ó¤Ö¤ê¤å¤¦¤·¤å¤Ä #T30 #_3´´Éô_6ή½Ð
+ ¤«¤ó¤Ö¤ó¤¯¤ó¤É¤¯¤¿¤¤ #T35 #_4´Áʸ_4·±ÆÉ_2ÂÎ
+ ¤«¤ó¤Ö¤ó¤Æ¤ #T35 #_4´Áʸ_2Ū
+ ¤«¤ó¤×¤¦¤²¤ #T35 #_4´°Éõ_2·à
+@@ -14320,7 +14319,7 @@
+ ¤¤ç¤¦¤È¤·¤ó¤Ö¤ó #KK #_4µþÅÔ_4¿·Ê¹
+ ¤¤ç¤¦¤È¤·¤ó¤Ö¤ó¤Ï¤¤ #T35 #_4µþÅÔ_4¿·Ê¹_2ÇÕ
+ ¤¤ç¤¦¤È¤¸¤å¤¦ #T35 #_4µþÅÔ_3Ãæ
+-¤¤ç¤¦¤È¤¸¤å¤¦¤«¤ó¤¸¤É¤¦¤·¤ã¤É¤¦ T35 #_4µþÅÔ_5½Ä´Ó_5¼«Æ°¼Ö_2Æ»
++¤¤ç¤¦¤È¤¸¤å¤¦¤«¤ó¤¸¤É¤¦¤·¤ã¤É¤¦ #T35 #_4µþÅÔ_5½Ä´Ó_5¼«Æ°¼Ö_2Æ»
+ ¤¤ç¤¦¤È¤¸¤ó #T35 #_4µþÅÔ_2¿Í
+ ¤¤ç¤¦¤È¤»¤é¤ß¤Ã¤¯ #KK #_4µþÅÔ_5¥»¥é¥ß¥Ã¥¯
+ ¤¤ç¤¦¤È¤¿¤¤¤·¤ç¤¦¤Æ¤ó #T35 #_4µþÅÔ_5Âç¾Þ_2ŵ
+@@ -19234,7 +19233,7 @@
+ ¤²¤ó¤«¤ó¤°¤Á #T35 #_4¸¼´Ø_2¸ý
+ ¤²¤ó¤«¤ó¤²¤ó¤¾¤¦ #T35 #_2¸º_2´¶_4¸½Áü
+ ¤²¤ó¤«¤ó¤µ¤ #T35 #_4¸¼´Ø_2Àè
+-¤²¤ó¤«¤ó¤·¤ç¤¦¤á¤¤ #T35 #_4¸¼´Ø_5¾ÚÌÀ
++¤²¤ó¤«¤ó¤·¤ç¤¦¤á¤¤ #T35 #_4¸¼´Ø_5¾ÈÌÀ
+ ¤²¤ó¤«¤ó¤¹¤¦ #T35 #_2¸¶_4´Ø¿ô
+ ¤²¤ó¤«¤ó¤Þ¤¨ #T35 #_4¸¼´Ø_2Á°
+ ¤²¤ó¤«¤ó¤ê¤Ë¤ó #T35 #_2¸½_3´ÉÍý_2¿Í
+@@ -19964,7 +19963,7 @@
+ ¤²¤ó¤ê¤ç¤¦¤Á¤ç¤¦¤¿¤Ä #T35 #_5¸¶ÎÁ_5Ĵã
+ ¤²¤ó¤í¤¦¤¤¤ó #T35 #_4¸µÏ·_2±¡
+ ¤²¤ó¤í¤¯¤º¤· #T35 #_4¸µÏ½_2¼÷»Ê
+-¤²¤ó¤í¤»¤ó #T5 #_2¸½_3Ï©Àþ
++¤²¤ó¤í¤»¤ó #T35 #_2¸½_3Ï©Àþ
+ ¤²¤ó¤í¤ó¤¯¤¦¤«¤ó #T35 #_4¸ÀÏÀ_4¶õ´Ö
+ ¤²¤ó¤í¤ó¤¸¤æ¤¦ #T35 #_4¸ÀÏÀ_3¼«Í³
+ ¤²¤ó¤í¤ó¤»¤¤¤²¤ó #T35 #_4¸ÀÏÀ_4À©¸Â
+@@ -20163,7 +20162,7 @@
+ ¤³¤¦¤«¤¤¤È¤¦¤í¤ó #T35 #_4¸ø³«_4ƤÏÀ
+ ¤³¤¦¤«¤¤¤Ê¤Þ¤Û¤¦¤½¤¦ #T35 #_4¸ø³«_2À¸_4ÊüÁ÷
+ ¤³¤¦¤«¤¤¤Ï¤ó #T35 #_4¹Ò³¤_2ÈÉ
+-¤³¤¦¤«¤¤¤Ï¤ó¤Æ¤¤ #T35 #_4¹â³¬_4ȽÄê
++¤³¤¦¤«¤¤¤Ï¤ó¤Æ¤¤ #T35 #_4¸ø³«_4ȽÄê
+ ¤³¤¦¤«¤¤¤Ð¤ó #T35 #_4¸ø³«_2ÈÇ
+ ¤³¤¦¤«¤¤¤Ó #T35 #_4¸ø³«_1Æü
+ ¤³¤¦¤«¤¤¤Û¤¦¤½¤¦ #T35 #_4¸ø³«_4ÊüÁ÷
+@@ -21650,7 +21649,7 @@
+ ¤³¤¦¤Æ¤¤¤Ï #T35 #_4¹ÎÄê_1ÇÉ
+ ¤³¤¦¤Æ¤¤«¤¤¤´¤Û¤±¤ó #T35 #_4¸øÅª_3²ð¸î_3Êݸ±
+ ¤³¤¦¤Æ¤¤«¤ó¤¤ó #T35 #_4¸øÅª_4´¹¶â
+-¤³¤¦¤Æ¤¤«¤ó¤è T35 #_4¸øÅª_3´ØÍ¿
++¤³¤¦¤Æ¤¤«¤ó¤è #T30 #_4¸øÅª_3´ØÍ¿
+ ¤³¤¦¤Æ¤¤¤«¤ó #T35 #_4¸øÅª_3µ¡´Ø
+ ¤³¤¦¤Æ¤¤¤»¤¤ #T35 #_4¸øÅª_3µ¬À©
+ ¤³¤¦¤Æ¤¤¤ó¤æ¤¦ #T35 #_4¸øÅª_4¶âÍ»
+@@ -30752,7 +30751,6 @@
+ ¤·¤å¤ó¤¸¤å¤¦¤»¤ó¤´¤¯¤¸¤À¤¤ #T35 #_6½Õ½©_4Àï¹ñ_3»þÂå
+ ¤·¤å¤ó¤¸¤å¤¦¤Î¤Þ #T35 #_7½Õ½©¤Î_1´Ö
+ ¤·¤å¤ó¤Æ¤¤¤¿¤¤¤µ¤¯ #T35 #_5½ÖÄä_4Âкö
+-¤·¤å¤ó¤È¤¦¤°¤ó #T35 #_5½ÙÅì_2·´
+ ¤·¤å¤ó¤Ñ¤Ä¤ê¤ç¤¯ #T35 #_5½Öȯ_3ÎÏ
+ ¤·¤å¤ó¤Ñ¤Ä¤ê¤ç¤¯¤·¤ç¤¦¤Ö #T35 #_5½Öȯ_3ÎÏ_4¾¡Éé
+ ¤·¤å¤ó¤Ó¤ó¤»¤¤ #T35 #_5½ÓÉÒ_2À
+@@ -30839,7 +30837,7 @@
+ ¤·¤ç¤¦¤«¤Ø¤¤ #T35 #_3¾®_3²ÖÊÁ
+ ¤·¤ç¤¦¤«¤Ü¤¦ #T35 #_4¾Ø²Ú_2˼
+ ¤·¤ç¤¦¤«¤è¤¦¤¤¤ó #T35 #_4¾Ã²½_4Í×°÷
+-¤·¤ç¤¦¤«¤è¤¦¤¹¤¤ #T35 #_4¾Ã²½_4ÍÑ¿å
++¤·¤ç¤¦¤«¤è¤¦¤¹¤¤ #T35 #_4¾Ã²Ð_4ÍÑ¿å
+ ¤·¤ç¤¦¤«¤ê¤ç¤¯ #T35 #_4¾Ã²½_3ÎÏ
+ ¤·¤ç¤¦¤«¤ó¤¤«¤ó #T35 #_5½þ´Ô_3´ü´Ö
+ ¤·¤ç¤¦¤«¤ó¤¤²¤ó #T35 #_5½þ´Ô_3´ü¸Â
+@@ -40405,6 +40403,7 @@
+ ¤»¤¤·¤ç¤¯¤È¤¦ #T35 #_5ÀÖ¿§_2Åô
+ ¤»¤¤¸¤Ò¤ç¤¦ #T35 #_3Àʼ¡_3ɽ
+ ¤»¤¤¸¤å¤¦¤¸¤ #T35 #_6ÀÖ½½»ú_1´ú
++¤»¤¤¹¤¤¤¤ó¤¾¤¯ #KK #_4´Ø¿å_4¶â°
+ ¤»¤¤º¤¤¤·¤ç¤¦ #T35 #_4ÀÔ¿ñ_3¾É
+ ¤»¤¤º¤¤¤½¤ó¤·¤ç¤¦ #T35 #_4ÀÔ¿ñ_5»½ý
+ ¤»¤¤º¤¤¤Ï¤ó¤·¤ã #T35 #_4ÀÔ¿ñ_4È¿¼Í
+@@ -40670,7 +40669,7 @@
+ ¤»¤Ã¤Á¤ã¤¯¤¶¤¤ #T35 #_5ÀÜÃå_2ºÞ
+ ¤»¤Ã¤Á¤ã¤¯¤¶¤¤ #T35 #_5ÀÜÃå_2ºà
+ ¤»¤Ã¤Á¤ã¤¯¤Ö #T35 #_5ÀÜÃå_1Éô
+-¤»¤Ã¤Á¤ã¤¯¤Ö¤Ö¤ó T35 #_5ÀÜÃå_3Éôʬ
++¤»¤Ã¤Á¤ã¤¯¤Ö¤Ö¤ó #T35 #_5ÀÜÃå_3Éôʬ
+ ¤»¤Ã¤Á¤ã¤¯¤á¤ó #T35 #_5ÀÜÃå_2ÌÌ
+ ¤»¤Ã¤Á¤ã¤¯¤á¤ó¤»¤ #T35 #_5ÀÜÃå_4ÌÌÀÑ
+ ¤»¤Ã¤Á¤å¤¦¤¢¤ó #T35 #_5ÀÞÃï_2°Æ
+@@ -41942,7 +41941,7 @@
+ ¤¼¤ó¤¤ç¤¯¤¹¤¦ #T35 #_5Á´¶Ê_2¿ô
+ ¤¼¤ó¤¤ç¤¯¤Á¤å¤¦ #T35 #_5Á´¶Ê_3Ãæ
+ ¤¼¤ó¤¤ç¤¯¤Ð¤ó #T35 #_5Á´¶Ê_2ÈÇ
+-¤¼¤ó¤¤ç¤¯¤í¤¯¤ª¤ó #T35 #_5ÊâÆ»_4À°È÷
++¤¼¤ó¤¤ç¤¯¤í¤¯¤ª¤ó #T30 #_5Á´¶Ê_4Ï¿²»
+ ¤¼¤ó¤¤ó¤¢¤ó¤Æ¤¤¤»¤¤ #T35 #_4Á²¶á_6°ÂÄêÀ
+ ¤¼¤ó¤¤ó¤»¤ó #T35 #_4Á²¶á_2Àþ
+ ¤¼¤ó¤¤ó¤»¤ó¤¸¤ç¤¦ #T35 #_6Á²¶áÀþ_3¾å
+@@ -46498,7 +46497,7 @@
+ ¤Á¤å¤¦¤Ð¤Á¤±¤ó #KK #_5ÃæÈ_2¸¦
+ ¤Á¤å¤¦¤Ð¤ó¤¤¤³¤¦ #T35 #_5ÃæÈ×_3°Ê¹ß
+ ¤Á¤å¤¦¤Ð¤ó¤¤¤¸¤ç¤¦ #T35 #_5ÃæÈ½_4°Ê¾å
+-¤Á¤å¤¦¤Ö¤¸¤å¤¦¤«¤ó¤¸¤É¤¦¤·¤ã¤É¤¦ T35 #_4ÃæÉô_5½Ä´Ó_5¼«Æ°¼Ö_2Æ»
++¤Á¤å¤¦¤Ö¤¸¤å¤¦¤«¤ó¤¸¤É¤¦¤·¤ã¤É¤¦ #T35 #_4ÃæÉô_5½Ä´Ó_5¼«Æ°¼Ö_2Æ»
+ ¤Á¤å¤¦¤Ö¤¼¤¤ #T35 #_4ÃæÉô_2Àª
+ ¤Á¤å¤¦¤Ö¤Á¤¯ #T35 #_4ÃæÉô_2Ã϶è
+ ¤Á¤å¤¦¤Ö¤Á¤Û¤¦ #T35 #_4ÃæÉô_3ÃÏÊý
+@@ -57562,11 +57561,11 @@
+ ¤Ò¤Ê¤ó¤´¤ä #T35 #_3ÈòÆñ_2¾®²°
+ ¤Ò¤Ê¤ó¤µ¤ #T35 #_3ÈòÆñ_2Àè
+ ¤Ò¤Ê¤ó¤·¤¨¤ó #T35 #_3ÈòÆñ_3»Ù±ç
+-¤Ò¤Ê¤ó¤¸¤ã¤¯¤·¤ã #T35 #_3ÈóÆñ_5¼å¼Ô
++¤Ò¤Ê¤ó¤¸¤ã¤¯¤·¤ã #T35 #_3ÈòÆñ_5¼å¼Ô
+ ¤Ò¤Ê¤ó¤¸¤å¤¦¤ß¤ó #T35 #_3ÈòÆñ_5½»Ì±
+ ¤Ò¤Ê¤ó¤¸¤ç #T35 #_3ÈòÆñ_2½ê
+ ¤Ò¤Ê¤ó¤»¤¤¤«¤Ä #T35 #_3ÈòÆñ_4À¸³è
+-¤Ò¤Ê¤ó¤¿¤¤¤í #T35 #_3ÈóÆñ_3ÂàÏ©
++¤Ò¤Ê¤ó¤¿¤¤¤í #T35 #_3ÈòÆñ_3ÂàÏ©
+ ¤Ò¤Ê¤ó¤Ä¤¦¤í #T35 #_3ÈòÆñ_3ÄÌÏ©
+ ¤Ò¤Ê¤ó¤Ð¤·¤ç #T35 #_3ÈòÆñ_3¾ì½ê
+ ¤Ò¤Ê¤ó¤æ¤¦¤É¤¦ #T35 #_3ÈòÆñ_4ͶƳ
+@@ -62585,6 +62584,7 @@
+ ¤Û¤È¤±¤µ¤Þ #T35 #_3Ê©_2ÍÍ
+ ¤Û¤É¤¦¤¬¤ï #T35 #_3ÊâÆ»_2¦
+ ¤Û¤É¤¦¤¸¤ç¤¦ #T35 #_3ÊâÆ»_3¾å
++¤Û¤É¤¦¤»¤¤¤Ó #T30 #_3ÊâÆ»_3À°È÷
+ ¤Û¤É¤¦¤ì¤ #T35 #_3Ê䯳_2Îò
+ ¤Û¤Ë¤å¤¦¤É¤¦¤Ö¤Ä #T35 #_4Ó®Æý_4ưʪ
+ ¤Û¤Ë¤å¤¦¤Ó¤ó #T35 #_4Ó®Æý_2ÉÓ
+@@ -66264,7 +66264,6 @@
+ ¤æ¤½¤¦¤ #T35 #_3Í¢Á÷_1µ¡
+ ¤æ¤½¤¦¤¤«¤ó #T35 #_3Í¢Á÷_3µ¡´Ø
+ ¤æ¤½¤¦¤¤Á #T35 #_3Í¢Á÷_2´ðÃÏ
+-¤æ¤½¤¦¤¤É #T35 #_3Í¢Á÷_2µ±ÅÙ
+ ¤æ¤½¤¦¤¤ç¤ê #T35 #_3Í¢Á÷_3µ÷Î¥
+ ¤æ¤½¤¦¤®¤ç¤¦¤·¤ã #T35 #_3Í¢Á÷_5¶È¼Ô
+ ¤æ¤½¤¦¤±¤¤¤«¤¯ #T35 #_3Í¢Á÷_4·×²è
+@@ -66351,7 +66350,7 @@
+ ¤æ¤Ó¤µ¤·¤«¤¯¤Ë¤ó #T35 #_4»Øº¹¤·_4³Îǧ
+ ¤æ¤Ó¤â¤¸ #T35 #_2»Ø_2ʸ»ú
+ ¤æ¤Ó¤ï¤â¤Î¤¬¤¿¤ê #T35 #_3»ØÎØ_5ʪ¸ì
+-¤æ¤Þ¤¯¤¤¤¸¤ç¤¦ #T35 #_3ÌýËì_4°Ê¾å
++¤æ¤Þ¤¯¤¤¤¸¤ç¤¦ #T35 #_3ÌýËì_4°Û¾ï
+ ¤æ¤Þ¤¯¤±¤¤¤»¤¤¤ê¤ç¤¯ #T35 #_3ÌýËì_4·ÁÀ®_3ÎÏ
+ ¤æ¤à¤é¤ª¤ó¤»¤ó #T35 #_3Åò¼_4²¹Àô
+ ¤æ¤á¤«¤«¤¯ #T35 #_2Ì´_3²Á³Ê
diff -urN -x CVS inputmethod/anthy/patches/patch-mkworddic_name.t inputmethod/anthy/patches/patch-mkworddic_name.t
--- inputmethod/anthy/patches/patch-mkworddic_name.t 1970-01-01 00:00:00.000000000 +0000
+++ inputmethod/anthy/patches/patch-mkworddic_name.t 2026-09-14 13:10:52.198107178 +0000
@@ -0,0 +1,25 @@
+$NetBSD$
+
+Fix the kanji for the novelist Abe Kobo (1924-1993). The entry reads
+"abekoubou" and gives °¤Éô¸øË¼; he wrote his family name °ÂÉô¸øË¼.
+
+The neighbouring entries in this file already spell °ÂÇÜ¿¸»°, °ÂÇÜÀ²ÌÀ
+and °ÂÇÜ¤Ê¤Ä¤ß correctly, so this is an isolated slip rather than a
+convention the dictionary follows. Writing a person's name with the
+wrong character is a discourtesy in Japanese, and an input method that
+offers only the wrong form makes the right one awkward to type.
+
+Taken from Fedora, which has carried this since 2010 as
+anthy-fix-typo-in-dict-name.patch.
+
+--- mkworddic/name.t.orig
++++ mkworddic/name.t
+@@ -43,7 +43,7 @@
+ ¤¢¤È¤¦¤À¤¿¤«¤· #JN #_4°¤ÅáÅÄ_3¹â
+ ¤¢¤Ê¤ó #JN ¥¢¥Ê¥ó
+ ¤¢¤Ó¤ë¤æ¤¦ #JN #_3¤¢¤Ó¤ë_2Í¥
+-¤¢¤Ù¤³¤¦¤Ü¤¦ #JN #_2°¤Éô_4¸øË¼
++¤¢¤Ù¤³¤¦¤Ü¤¦ #JN #_2°ÂÉô_4¸øË¼
+ ¤¢¤Ù¤·¤å¤·¤ç¤¦ #JN #_2°ÂÇÜ_5¼óÁê
+ ¤¢¤Ù¤·¤ó¤¾¤¦ #JN #_2°ÂÇÜ_4¿¸»°
+ ¤¢¤Ù¤½¤¦¤ê #JN #_2°ÂÇÜ_3ÁíÍý
diff -urN -x CVS inputmethod/anthy/patches/patch-src-diclib_xstr.c inputmethod/anthy/patches/patch-src-diclib_xstr.c
--- inputmethod/anthy/patches/patch-src-diclib_xstr.c 1970-01-01 00:00:00.000000000 +0000
+++ inputmethod/anthy/patches/patch-src-diclib_xstr.c 2026-09-14 13:10:52.198566366 +0000
@@ -0,0 +1,27 @@
+$NetBSD$
+
+Do not dereference a NULL xstr. reorder_by_suffix passes anthy_xstrcmp the
+result of anthy_get_nth_xstr(0), which is NULL whenever the first value of
+the matching SUFFIX_HISTORY row is not a string, and anthy then dies with
+SIGSEGV inside anthy_set_string -- so every conversion of a word ending in a
+suffix takes down whatever loaded the library. anthy's own record writer can
+produce such a row: write_quote_xstr puts nothing between the quotes when the
+value it is handed is empty or damaged.
+
+Fedora added this guard in 2013 as anthy-fix-segfault.patch, for ibus-anthy
+crashing in anthy_xstrcmp (their bug 973127), and anthy-unicode -- the fork
+that is still maintained -- has the same guard in src-diclib/xstr.c.
+
+--- src-diclib/xstr.c.orig
++++ src-diclib/xstr.c
+@@ -384,6 +384,10 @@
+ anthy_xstrcmp(xstr *x1, xstr *x2)
+ {
+ int i, m;
++ if (!x1)
++ return -1;
++ if (!x2)
++ return 1;
+ if (x1->len < x2->len) {
+ m = x1->len;
+ }else{
diff -urN -x CVS inputmethod/anthy/patches/patch-src-worddic_record.c inputmethod/anthy/patches/patch-src-worddic_record.c
--- inputmethod/anthy/patches/patch-src-worddic_record.c 1970-01-01 00:00:00.000000000 +0000
+++ inputmethod/anthy/patches/patch-src-worddic_record.c 2026-09-14 13:10:52.198777024 +0000
@@ -0,0 +1,21 @@
+$NetBSD$
+
+Treat EOF as the end of a line. read_1_token reports the end of a line only
+on '\n', so when the last line of a record file (~/.anthy/last-record2_*) has
+no trailing newline, the loop in read_1_row that reads tokens up to the end
+of the line never terminates, and anthy hangs at start-up.
+
+Fedora carries this as anthy-fix-eol.patch (2024), and anthy-unicode has the
+same change in src-worddic/record.c.
+
+--- src-worddic/record.c.orig
++++ src-worddic/record.c
+@@ -1043,7 +1043,7 @@
+ if (s) {
+ s[len] = '\0';
+ }
+- *eol = (c == '\n');
++ *eol = (c == '\n' || c == EOF);
+ return s;
+ }
+
Home |
Main Index |
Thread Index |
Old Index