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