g-hal****@fenix*****
g-hal****@fenix*****
2008年 12月 15日 (月) 22:10:43 JST
fenix.ne.jp の G-HAL です。 先に送りましたパッチに書き忘れが1件ありました。 また、先に送りました後に、別の1件のメモリ破壊バグを見つけました。 都合2件分の追加の修正パッチを送付致します。 ・ OCHAIRE に特定の学習がある状態で、特定の変換を行うと、 不正なメモリ読み出しが行われる。 → src-worddic/record.c の trie_find_longest() にて 条件に該当する項目が見つからない時に、 もし条件に該当する項目があると仮定した場合の、 想定される位置の次?の項目が返される事がある模様。 発症例: 次の2件の学習だけがある状態で、「あ」を変換すると、発生する。 ADD "OCHAIRE" S"あああ" N1 N3 S"あ" ADD "OCHAIRE" S"ああい" N1 N3 S"あ" 発症しうる最も単純な状況を追求した結果、この様な物だった為、 「OCHAIRE に1文節の学習はしない」、「その読みでその変換はしない」、 と言う突っ込みは無しでお願いします。 OCHAIRE 学習されている内容の読みが2文字だと、 アーキテクチャや OS、設定などによっては、問題を検出できません。 また、アーキテクチャや OS、設定などによっては、 OCHAIRE 学習されている内容の読みを5文字なり9文字なりなどにしないと、 問題を検出できないかもしれません。 ・ anthy-agent にて、メモリ破壊を起こす事が有る。 → src-util/input.c にて、free() した後のメモリに書き込みを行っている。 ---------------------------------------------------------------- diff -uprN anthy-9100e.debug/src-util/input.c anthy-9100e.debug2/src-util/input.c --- anthy-9100e.debug/src-util/input.c 2008-12-05 00:00:00.000000000 +0900 +++ anthy-9100e.debug2/src-util/input.c 2008-12-11 00:00:00.000000000 +0900 @@ -566,12 +566,14 @@ cmd_resize(struct anthy_input_context* i } ictx->last_gotten_cand = NTH_UNCONVERTED_CANDIDATE; - for (as = as->next; as; ) { - struct a_segment* next; - next = as->next; + as = as->next; /* メモリ破壊の修正 */ + if (as) { as->prev->next = NULL; - free(as); - as = next; + for (; as; ) { + struct a_segment* const next = as->next; + free(as); + as = next; + } } } diff -uprN anthy-9100e.debug/src-worddic/record.c anthy-9100e.debug2/src-worddic/record.c --- anthy-9100e.debug/src-worddic/record.c 2008-12-05 00:00:00.000000000 +0900 +++ anthy-9100e.debug2/src-worddic/record.c 2008-12-11 00:00:00.000000000 +0900 @@ -743,7 +743,7 @@ do_select_longest_row(struct record_sect mark = trie_find_longest(&rsc->cols, name); xs.str = name->str; - for (i = mark->row.key.len; i > 1; i--) { + for (i = (mark->row.key.len <= name->len) ? mark->row.key.len : name->len; i > 1; i--) { /* 不正なメモリアクセスの修正 */ /* ルートノードは i == 1 でマッチするので除外 * trie_key_nth_bit 参照 */ ---------------------------------------------------------------- ================================================================ (Now Printing) ================================================================