JDimproved / JDim

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

Log_Manager::check_write: skip heading continuous newlines for early-check #1221

Closed mtasaka closed 1 year ago

mtasaka commented 1 year ago

先頭に空白行が連続する書き込みをすると、5chの仕様ではそれらを 削除したものが帰ってくるので、Log_Manager::check_write で 簡易チェックをするとき、先頭の連続する改行は読み飛ばす

不具合報告: https://next2ch.net/test/read.cgi/linux/1654053581/112-113

Closes #1220

ma8ma commented 1 year ago

パッチありがとうございます。 書き込んでテストしたところnext2ch.netへの書き込みでリグレッションを見つけました。

master [バージョン] JDim 0.10.1-20230806(git:a6bb171816)

テストケース 説明 5ch.net next2ch.net
あい 先頭に空行なし :heavy_check_mark: :heavy_check_mark:
\nかき 先頭に空行 :x: :heavy_check_mark:
\nさし 先頭に半角空白の行 :x: :heavy_check_mark:
\n たち 先頭に半角空白の行、二行目の頭に半角空白 :x: :heavy_check_mark:
\n \nなに 先頭と二行目に半角空白の行 :x: :heavy_check_mark:
\u3000\nまみ 先頭に全角空白(\u3000)の行 :heavy_check_mark: :heavy_check_mark:
\u3000 \nはひ 先頭に半角空白、全角空白、半角空白を並べた行 :heavy_check_mark: :heavy_check_mark:

1221 [バージョン] JDim 0.10.1-20230812(git:2f761b0833)

テストケース 説明 5ch.net next2ch.net
あい 先頭に空行なし :heavy_check_mark: :heavy_check_mark:
\nかき 先頭に空行 :heavy_check_mark: :heavy_check_mark:
\nさし 先頭に半角空白の行 :heavy_check_mark: :heavy_check_mark:
\n たち 先頭に半角空白の行、二行目の頭に半角空白 :heavy_check_mark: :x:
\n \nなに 先頭と二行目に半角空白の行 :heavy_check_mark: :x:
\u3000\nまみ 先頭に全角空白の行 :heavy_check_mark: :heavy_check_mark:
\u3000 \nはひ 先頭に半角空白、全角空白、半角空白を並べた行 :heavy_check_mark: :heavy_check_mark:

next2ch.netの一致しなかったケースのDATデータ

next2ch.netのDATデータは行頭の半角空白だけ取り除かれるようです。

ma8ma commented 1 year ago

うーん、書き込みとレスを比較するコードを抜き出して試すと行ごとに比較する全文チェックの処理はクリアしてるっぽいです。 LogItemクラスの簡易チェック用バッファへコピーところで事前に半角空白と改行をトリミングする方法ならいけるかもしれないと考えています。

https://github.com/JDimproved/JDim/issues/1220#issuecomment-1674778861

mtasaka commented 1 year ago

簡易チェックをする時は、「先頭の」半角空白と改行をすべて削除してから比較する、にすればいいんですかね。 こんな感じでしょうか。

ma8ma commented 1 year ago

更新ありがとうございます、書き込み試してみます。 テストで自動化できるといいのですがソースやクラスが分かれていて設定とか通信に繋がっている部分は難しい… 😫