ページを更新するプラグインが大文字で記述されると更新が空振りする

  • ページ: BugTrack
  • 投稿者: にぶんのに
  • 優先順位: 低
  • 状態: 保留
  • カテゴリー: プラグイン
  • 投稿日: 2004-09-24 (金) 01:08:06
  • バージョン: 1.4

メッセージ

from official:質問箱/99

ページを更新用のフォームを提供するブロック型プラグインを大文字で記述した場合、登録した内容がページに反映されず、"ページが更新しました"と表示される。
※ たとえば #article ではなく、#ARTICLE と書くと発生する

該当の現象が発生するプラグインは、artice, memo, comment, insert, paint, pcomment, vote が見つかっている。

原因はプラグイン内のロジックでプラグインが大文字で記述されるケースを想定していないため。
ページを更新するプラグインでは、ページ内に同一プラグインが複数設置された場合に正しい位置を更新できるよう、更新時にページを再読み込みして、プラグインの記述箇所を探し出す。このとき、小文字で記述されている事を前提としているため、大文字で記述されていると、記述箇所の探索に失敗して更新が空振りする事が原因と思われる。

なお、PukiWiki1.3.8では大文字で記述する事を許さないため、1.4への移行時に、大文字での記述を許可するよう仕様が変更されたと思われる。


  • 対象はプラグインの一覧から怪しそうな奴をピックアップして挙げただけなので、他にも類似があるかもしれません。原因への言及は類推を多く含みます。 -- にぶんのに 2004-09-24 (金) 01:12:42
  • BugTrack/268 -- 2004-09-24 (金) 09:04:03
  • 対象となる標準プラグインと問題の行はarticle(107行目)、comment(73行目)、insert(36行目)、memo(29行目)、paint(246行目)、pcomment(360行目)、vote(21行目)です。 -- Ratbeta? 2004-09-24 (金) 14:59:29
    • メッセージの方の現象が発生するプラグインに paint,pcomment が抜けていたので追記しました。
  • 修正にはi修飾子を付加するだけでよさそうです。 -- Ratbeta? 2004-09-24 (金) 15:01:00
  • また、edit(49,86行目)、template(22行目)、tracker(88行目)で判定漏れが発生するようです。私にはこの判定自体意味があるのか分かりませんけど…。 -- Ratbeta? 2004-09-24 (金) 15:03:18
    • freezeに関しては凍結判定用のis_freezeが小文字での記述しか許しておらず、freezeのconvertでも処理は行っていないため、この3つに関しては結果オーライになっている模様です。
      放置してもOKと思いますが、記述/対応方法を揃えるという方向性もあると思います -- にぶんのに 2004-09-24 (金) 23:31:44
    • 蛇足ながらedit、template、trackerの処理について説明すると、凍結されたページ=#freezeが記述されたページなので、editのロジックはfreezeのアクションプラグイン経由で記述されるべき#freezeが、編集時に記述されないため。template、trackerのロジックはいたずら防止の為凍結されたページをテンプレートにする際、凍結されっぱなしだと使えないので、それを解除するロジックですね。 -- にぶんのに 2004-09-24 (金) 23:31:44
  • お疲れ様です :) 少なくともGETおよびPOSTで入力されるプラグインの名前については、小文字でないと受け付けない仕様になっています。init.phpでそのようにフィルタを追加しましたし、元を正せば実際のプラグインファイルが小文字で統一されており、さらに遡ると「タイピングのしやすさ」などからそのようにしたいというような欲求がきっとあるのでしょう。 -- henoheno 2004-09-25 (土) 23:12:59
  • ということで、小文字決め打ち(というより、プラグイン名はユニークなidとして使われているので、決められたとおりに固定)としないと困ってしまうのですが、その前になぜ大文字で書きたかったかをお聞きしてみたいところです -- henoheno 2004-09-25 (土) 23:23:58
plugin.php
 $name = strtolower($name);      // 大文字と小文字を区別しないファイルシステム対策
  • 原因のひとつはplugin.phpの上記のあたりではないかと思います -- henoheno 2004-09-25 (土) 23:30:29
  • もう一つは、レンダリングエンジンのどこかで #MEMO と #memo を同一視している(プラグインだと認識しているが、小文字かどうかといったチェックをしていない)部分だと思います。うーんこちらは直すのは難しいかな? (^^; -- henoheno 2004-09-25 (土) 23:32:57
  • 大文字を小文字にして保存するように対策した方が簡単ではないでしょうか。全てを大文字/小文字対応するのは、ちと手間がかかるかと・・・ -- teanan 2004-09-26 (日) 03:14:19
  • BugTrack/705 -- 2004-09-29 (水) 00:17:46
  • すいません、想像力が無い人なので「大文字を小文字にして保存」の部分のイメージをもう少し教えて下さい (^^; -- henoheno 2004-09-29 (水) 21:37:37
    • いつも舌足らずですみません (^^; 例えば、page_writeで #HogeHoge を #hogehogeに変換して保存しては、ということです。 -- teanan 2004-09-29 (水) 22:54:17
  • フォローありがとうございます (^^; まさに書き込む部分に特化した話ということで了解しました。 -- henoheno 2004-09-29 (水) 22:56:39
  • 各プラグインについて、Ratbeta?さんの言われるところのi (case-insensitive) フラグを追加しました。これで更新可能になるはずです(更新時には、プラグイン名は強制的に小文字に変換されるでしょう)。 -- henoheno 2004-10-09 (土) 17:06:25
  • #freezeについても同様にしておきました :) -- henoheno 2004-10-09 (土) 17:27:58
  • しばらくして or どなたかが試して、問題ない様だったら完了にしましょう。 -- henoheno 2004-10-09 (土) 19:02:17
  • 上記プラグインのいくつかで判定漏れが発生します。判定漏れは"#commentA"などの記述がされた行が"#comment"の前にあった場合に、"#commentA"の行の前にコメントを追加してしまう、というものです。"#commentA"というプラグインが有った場合にも勿論発生する為、注意が必要です。これを回避するには判定を従来の"/^#comment/i"から"/^#comment$/im"に変更する必要が有ります。ちなみに、#freeze判定で用いられている\s*に関しては、正常に動作しないため不要と思われますので、削除してもよいと思われます。 -- Ratbeta? 2004-10-18 (月) 19:18:21
  • ブロック型プラグインで、括弧の閉じ忘れ(例えば"#pcomment(コメント,"など)や括弧の後ろに不適当な文字があった場合にもプラグインを認識してしまいます。convert_html.phpの135行目の正規表現を
    /^\#([^\(]+)(?:\((.*)\))?$/m"
    とすることで回避できるようです。もう一件くらいありそうですね…(--; -- Ratbeta? 2004-10-18 (月) 19:56:59

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2005-04-10 (日) 21:55:32
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u1. HTML convert time: 13.677 sec.

OSDN