Skip to content

Instantly share code, notes, and snippets.

@Nyoho
Last active August 29, 2015 14:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Nyoho/6a20c0975cbeeecd6f9b to your computer and use it in GitHub Desktop.
Save Nyoho/6a20c0975cbeeecd6f9b to your computer and use it in GitHub Desktop.
hiki rack メモ

hiki のメモ <2014-12-29 Mon>

問題

hiki を rack で使おうとしたら /?c=admin;conf=hoge などでエラー

原因

Rack::Request が環境変数の QUERY_STRING を解釈するときにセパレータが & のみになっているため。 https://github.com/rack/rack/blob/master/lib/rack/request.rb#L369

よって、例えばパスが /?c=admin;conf=hoge のときに、key c の値が admin;conf=hoge となってしまっている。本当は key c の値が admin でなければならない。

変更時期はここ?

このセミコロンを外すコミットが rack 1.6.0 で取り込まれたため、8日前の bundle update hiki/hiki により rack 1.5.2 から rack 1.6.0 が使われるようになったため発生したと思われる。

ちなみに、W3C はブラウザに対してセミコロンもセパレータにするよう勧告を出している(?)(要確認)

  1. http://en.wikipedia.org/wiki/Query_string
  2. http://www.w3.org/TR/1999/REC-html401-19991224/appendix/notes.html#h-B.2.2

ちなみに、 Rack::Utils.parse_query() ではセパレータ [&;] が使われている。(ディフォルト)

再現方法

git clone https://github.com/hiki/hiki.git
cd hiki
edit hikiconf.rb # @data_path を 'data' などと変更
bundle install
ruby hiki.rb
open http://0.0.0.0:9292/

そこで例えば「管理」→「基本」や「パスワード」などに行ってみる。 http://0.0.0.0:9292/?c=admin;conf=password

解決策を考える

  1. hiki の段階で query string を & を使うものに変更するか、Rack::Request を変更するなどして解決するか 安直に一旦 gem ‘rack’, “~> 1.5.0” としてしまうとか。
  2. rack 自体に pull request するか
@Nyoho
Copy link
Author

Nyoho commented Feb 1, 2015

  • 直してみた pull request: Fix semicolons as separators for GET by Nyoho · Pull Request #781 · rack/rack - rack/rack#781
  • 関連 issue: Regression on handling of W3C HTML 4.01 compliant URL query parameters · Issue #782 · rack/rack - rack/rack#782

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment