Actions
Bug #1929
closedstr.dup.force_encodingが元のstrに影響を与えることがある
Description
=begin
かずひこです。
tDiary trunk 3514をruby-trunkで動かすとカテゴリプラグインで日本語カテゴリのリンクをたどると
incompatible character encodings: ASCII-8BIT and UTF-8 (Encoding::CompatibilityError)
になります。
http://www.cozmixng.org/retro/projects/tdiary/tickets/171
つきつめていくと、どうやら ERB::Util.url_encodeの
def url_encode(s)
s.to_s.dup.force_encoding("ASCII-8BIT").gsub(/[^a-zA-Z0-9_\-.]/n) {
sprintf("%%%02X", $&.unpack("C")[0])
}
end
で、元のsが影響をうけているようなのです。
http://vvvvvv.sakura.ne.jp/ds14050/diary/20090223.html#p01
例えば、url_encodeの呼び出し側を次のように修正するとエラーが再現しません。
- a = @category.map {|c| "category=#{u c}"}.join(';')
- a = @category.map {|c| "category=#{u ''+c}"}.join(';')
もしくは、url_encodeを次のように修正するとエラーが再現しません。
def url_encode(s)
"#{s}".force_encoding("ASCII-8BIT").gsub(/[^a-zA-Z0-9_\-.]/n) {
sprintf("%%%02X", $&.unpack("C")[0])
}
end
短い再現コードが書けなかったのですが、どうぞよろしくお願いします。
かずひこ
=end
Actions
Like0
Like0Like0