レス削除時に一部専ブラでデータ破損扱いになる #29

Closed
opened 2023-10-14 12:44:09 +09:00 by SaturdayTheMsgr · 2 comments
Contributor

原因

レスを削除した時、datの対象レスが<><><>あぼーん<>という形式で上書きされるが
少なくともOpenJane系の専ブラでは3番目の要素<><>(ここ)<><>に何も入っていないと壊れた判定となるようです。

解決方法

単純に5ch準拠であぼーん<>あぼーん<>あぼーん<>あぼーん<>という形式にすれば直ります。
該当箇所:134f86a9d4/test/operate/control.php (L93)
コード例:c4b24ecd4c

副作用

web版ではレスが削除された時に該当レスは全く見えなくなる仕様ですが、3番目の要素に何か入ると見えるようになってしまいます。
なので必要に応じてread.jsの修正もする必要があります。

### 原因 レスを削除した時、datの対象レスが`<><><>あぼーん<>`という形式で上書きされるが 少なくともOpenJane系の専ブラでは3番目の要素`<><>(ここ)<><>`に何も入っていないと壊れた判定となるようです。 ### 解決方法 単純に5ch準拠で`あぼーん<>あぼーん<>あぼーん<>あぼーん<>`という形式にすれば直ります。 該当箇所:https://git.3chan.cc/stat2/delightly-v2fork/src/commit/134f86a9d47ad9c4b5752f30842dbb2878a3e758/test/operate/control.php#L93 コード例:https://git.3chan.cc/SaturdayTheMsgr/delightly-v2fork/commit/c4b24ecd4cec3c2ba2f282f242d20d6b2c7e6b59 ### 副作用 web版ではレスが削除された時に該当レスは全く見えなくなる仕様ですが、3番目の要素に何か入ると見えるようになってしまいます。 なので必要に応じてread.jsの修正もする必要があります。
Contributor

基本的にはその修正方向でいいかと思いますが、2点追加の修正案があります。

  • datの一行目最終項目にはスレタイが必要なので追加。多分無いと壊れます。
  • 名前欄のあぼーんはシステム由来であることを示すために細字化。

以上を踏まえて以下のような修正はいかがでしょうか。

for ($i = 0; $i < count($LOG); $i++) {
  if (
    $_POST[$i] == "checked" ||
    ($i + 1 >= $_POST['from'] && $i + 1 <= $_POST['to']) ||
    ($_POST['itti'] && strpos($LOG[$i],$_POST['itti']) !== false)
  ){
    if($i === 0){
      preg_match('/([^\<\>]*)$/', $LOG[$i], $subjectMatches);
      if($subjectMatches){
        $subject = $subjectMatches[1];
      }else{
        $subject = $SETTING['DELETED_TEXT'];
      }
    }else{
      $subject = '';
    }
    $LOG[$i] = '</b>'.$SETTING['DELETED_TEXT'].'<b><>'.str_repeat($SETTING['DELETED_TEXT'].'<>', 3)."$subject\n";
  }
}

ブラウザ版の表示については追加の修正は不必要ではないでしょうか。
専ブラはあぼーんが表示されますので統一してもいいかと思います。

基本的にはその修正方向でいいかと思いますが、2点追加の修正案があります。 - datの一行目最終項目にはスレタイが必要なので追加。多分無いと壊れます。 - 名前欄のあぼーんはシステム由来であることを示すために細字化。 以上を踏まえて以下のような修正はいかがでしょうか。 ``` for ($i = 0; $i < count($LOG); $i++) { if ( $_POST[$i] == "checked" || ($i + 1 >= $_POST['from'] && $i + 1 <= $_POST['to']) || ($_POST['itti'] && strpos($LOG[$i],$_POST['itti']) !== false) ){ if($i === 0){ preg_match('/([^\<\>]*)$/', $LOG[$i], $subjectMatches); if($subjectMatches){ $subject = $subjectMatches[1]; }else{ $subject = $SETTING['DELETED_TEXT']; } }else{ $subject = ''; } $LOG[$i] = '</b>'.$SETTING['DELETED_TEXT'].'<b><>'.str_repeat($SETTING['DELETED_TEXT'].'<>', 3)."$subject\n"; } } ``` ブラウザ版の表示については追加の修正は不必要ではないでしょうか。 専ブラはあぼーんが表示されますので統一してもいいかと思います。
Author
Contributor

修正案の提示ありがとうございます。私もブラウザ版の仕様を専ブラに合わせるのが良いと思っていた所です。
これを踏まえて修正したのを後でプルリクエストに出してみます。

修正案の提示ありがとうございます。私もブラウザ版の仕様を専ブラに合わせるのが良いと思っていた所です。 これを踏まえて修正したのを後でプルリクエストに出してみます。
Sign in to join this conversation.
No description provided.