「なでしこ」バグ&要望掲示板

なでしこのバグや実現して欲しい機能の要望を行う掲示板です。
[一覧へ] > (@785) [中] [未処理]
@785■ (#2471) なでしこCGIで大ファイルを受信するとデータが途切れる - NON (2015-11-10 22:26) /中 未処理
【症状】
cnakoのCGIモードにおいて、FormのPOSTで大き目のデータを受け取ると、128KB弱でデータが途切れてしまいます。
正確に言うと、データはサイズ通り受信されるのですが、上記のサイズを超えた部分がすべてNULLになってしまいます。


【再現方法】サンプルソース、再現手順など

標準添付サンプルの「sendfile」で確認できます。


【要望】どのような解決が望ましいか?

サイズの制限をなくす。


【バージョン】
なでしこ:1.5332, 1.553
Web鯖:04WebServer
OS:Windows 7 SP1 64bit / Windows Server 2008 SP2 32bit


【その他】

ひょっとすると04WebServerの問題?という可能性もないとは言えないのですが・・・。

(#2519) Perlでは問題なし - NON (2015-12-29 14:37) /中 未処理
ActivePerlと04WebServerでテストしたところ、正常に受信できたことから、おそらくなでしこCGI特有の問題かと思います。

対応頂けると有難いです。

(#2678) IISでも再現 - こころ (2016-10-07 22:32) /中 未処理
IIS 10.0,なでしこ1.562,Windows 10 Pro
では524288バイト(524KB,512Kib)で途切れました.
何度か試しましたがこの上限は変わらず.
maxrequestlengthは設定していません.

(#2682) Re: なでしこCGIで大ファイルを受信するとデータが途切れる - うぇいく (2016-10-19 21:23) /中 未処理
まだ確認できてないのですが、どうも、指定サイズを標準入力から読み込む命令にて、1命令での処理分は1度に読み込もうとしていて、これに失敗した場合に、中途半端に読めている状態のまま進んでしまうようです。
その際、サイズだけは、予定サイズになっているために、ゴミが残っているようです。

POST内容の受信サイズの確認と受信については、cgi.nakoで行っているので、おお担ファイルを受信する場合には、cgi.nakoを改造したほうがよさそうです。
(今は、POSTされた内容をすべてオンメモリで変数に入れて処理しようとしています。結果、32bitsアプリなのに、数メガとか数ギガのメモリを確保しに行く可能性があります)
なお、POSTによるファイルの添付がある場合、大抵のライブラリでは、添付されたファイルは、変数には持たず、いったん一時ファイルに書き出してしまう方法が一般的かと思いますが、一時ファイルの管理・処理が必要となるので、汎用的なライブラリにするのは難しいです。必要に応じて、各々でカスタマイズ(受信してほしい場所と名前で保存するようにする)がよさそうです。

とりあえず、標準入力からの読み取り失敗については、エラーとする方向で考えています。(メモリが足りている限りは)受信可能にできるかどうかは、思い当るふしはあるのですが、試してみないとわかりません。

(#2707) どう改造すればよいのでしょうか - NON (2016-12-01 19:09) /中 未処理
おお、しばらく見ないうちに返信が!

最新版(なでしこ1.562、04WebServer、Win7)では、変わらず128KBが上限のようでした。こころさんとの違いは、サーバソフトなのか、OSなのか…。


> おお担ファイルを受信する場合には、cgi.nakoを改造したほうがよさそうです。

どのように改造すればよいのでしょうか?
以前に確認した時は「標準入力取得」で途切れてしまっているようでしたので、そもそも取得できていない以上、外部ファイルに書き出すも何もできないと思うのですが…。

(#2471)へ返信する:

名前
タイトル
本文
優先度
状態
確認キー お手数ですが、いたずら防止のために、「真夏」の読み方を記入してください。
編集キー 編集時に使うキーを入力(省略可能)
添付ファイル 画像ファイル(最大300KB)を添付可能