JDimproved / JDim

2ch browser for linux
https://jdimproved.github.io/JDim/
GNU General Public License v2.0
44 stars 11 forks source link

書き込みログを表示したときスレタイに入っている絵文字が文字参照のまま表示される #1319

Closed ma8ma closed 6 months ago

ma8ma commented 6 months ago

書き込みログを表示したときスレタイに入っている絵文字が文字参照のまま表示される

バグの説明

書き込みログを表示したときスレタイに入っている絵文字が文字参照のまま表示されると報告がありました。

https://next2ch.net/test/read.cgi/linux/1654053581/184

スレタイに絵文字が入ってると 書き込みログのスレタイの絵文字が&#128025みたいになる

本文のほうは絵文字も表示されます

再現の方法

  1. JDimを起動する
  2. メニューバーの設定(C)一般(G)にある書き込みログを保存する(A)をチェックする
  3. スレタイに絵文字が入っているスレを開く
  4. レスを書き込む
  5. メニューバーのツール(T)にある書き込みログの表示(P)を選択してログを表示する
  6. スレURLの下、板名の右側にあるスレタイにある絵文字が文字参照で表示される

やりたかったこと・期待する結果

ログを表示したとき文字参照ではなく絵文字で表示する

スクリーンショット

なし

動作環境

[バージョン] JDim 0.11.0-beta20240107(git:f6562adfde)
[ディストリ ] Ubuntu 23.10 (x86_64)
[パッケージ] バイナリ/ソース( <配布元> )
[ DE/WM ] KDE
[ gtkmm  ] 3.24.8
[ glibmm  ] 2.66.6
[ TLS lib ] GnuTLS 3.8.1
[オプション ] '--with-alsa''--with-pangolayout'
[ そ の 他 ]

追加の情報

書き込みログの保存処理を調べたところ問題点がありました。 JDimの書き込みビューに入力されたUTF-8テキストをログのデータとして保存しますが スレタイだけDATに由来するUTF-8テキストでShift_JISにない文字が文字参照にエスケープされています。

https://github.com/JDimproved/JDim/blob/f6562adfde04f57a71d9e70d4b6c194db0b86723/src/message/messageviewbase.cpp#L1070-L1076

ログの保存形式はHTMLなので保存するとき特殊文字を文字参照にするエスケープ処理が入りますが エスケープ済のスレタイは二重にエスケープ(&&amp;)されてしまいログを表示するとき(&amp;&)に文字化けしているようです。

https://github.com/JDimproved/JDim/blob/f6562adfde04f57a71d9e70d4b6c194db0b86723/src/message/logmanager.cpp#L315-L322

対応策としてはHTMLに保存する前にスレタイに含まれる文字参照をデコードしてUTF-8テキストにすることで二重エスケープを回避します。 ただし、これまでに保存されたログは文字参照のまま表示されるためログのHTMLファイルを手動で編集して直さないといけません。