参照するフラグを誤っているため、2バイト文字の2バイト目を1バイト目として処理してしまっている。
文字列の最後('\0'の前)が2バイト文字だった場合、バッファの範囲外にアクセスする可能性がある。
正しいフラグを参照するように修正する。
if (!wrap) {
#ifdef JP
- if (roff_p >= roff_buf + (k_flag ? 74 : 75))
+ if (roff_p >= roff_buf + (iskanji_flag ? 74 : 75))
wrap = TRUE;
- else if ((ch == ' ') && (roff_p >= roff_buf + (k_flag ? 72 : 73)))
+ else if ((ch == ' ') && (roff_p >= roff_buf + (iskanji_flag ? 72 : 73)))
wrap = TRUE;
#else
if (roff_p >= roff_buf + 75)
#ifdef JP
bool k_flag_local;
bool iskanji_flag_local = FALSE;
- concptr tail = str + (k_flag ? 2 : 1);
+ concptr tail = str + (iskanji_flag ? 2 : 1);
#else
concptr tail = str + 1;
#endif