Open1

RubyのCGIとERBでタイムアウトが起きるパターンがあるように見える

結城浩 / Hiroshi Yuki結城浩 / Hiroshi Yuki

概要

  • Rubyで書いたCGIでERBと組み合わせて使うと、特定のテンプレートでタイムアウトが発生する。

環境

  • Ruby 3.2.0
  • WEBrick 1.8.1
  • CGI 0.3.6
  • ERB 4.0.2
  • macOS Sonoma

ソース

web.cgi

#!/usr/bin/env ruby

require "cgi"
require "erb"

cgi = CGI.new
erb = ERB.new("\nHello") # (1) NO GOOD (net::ERR_CONTENT_LENGTH_MISMATCH)
# erb = ERB.new("Hello") # (2) OK
str = erb.result(binding)
cgi.out do
  str
end

現象

  • (1) のパターンを与えてブラウザでweb.cgiにアクセスするとCGIがタイムアウトを起こす(期待していない動作)。開発者コンソールにはnet::ERR_CONTENT_LENGTH_MISMATCHと表示される。

  • (2) のパターンを与えてブラウザでweb.cgiにアクセスするとHelloが表示される(期待した動作)

推測

  • どこかでだれかが文字数のカウントに失敗している?

コメント

  • どなたか、解決のヒントがあればご教示ください。
  • "\nHello"はNO GOODですが、"Hello\n"はOKのようです。