Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Not return response body under certain conditions. #229

Closed
littlekbt opened this issue Nov 8, 2016 · 13 comments
Closed

Not return response body under certain conditions. #229

littlekbt opened this issue Nov 8, 2016 · 13 comments

Comments

@littlekbt
Copy link

初めまして、普段よりngx_mrubyを使わせていただいております。

こういったOSSにissueを立てさせていただくのは初めてなので、至らない点があったら申し訳ありません。

Raspberry Pi Model B Revision 2.0にngx_mrubyを入れて動かしたところ、以下の2つの条件で予期しない挙動を致しました。

ビルドは

git clone git://github.com/matsumoto-r/ngx_mruby.git
sh build.sh
make install

で行いました。

#環境
ハード: Raspberry Pi Model B Revision 2.0
OS: Raspbian GNU/Linux 8.0

まず、以下の条件では、Nginx.echoをしたところ、文字列が出力されませんでした。

#conf/nginx.conf

...

	location /mruby {
	    mruby_content_handler '/usr/local/etc/ngx_mruby/build/nginx/ruby/tst.rb';
	}

...

#ruby/tst.rb

Nginx.echo 'hello'

pi@raspberrypi:~ $ curl http://127.0.0.1/mruby

このように、echoで出力する文字列のはじめを hとすると何も出力されず

以下のようにすると、出力されます。

#ruby/tst.rb

Nginx.echo 'ello'

値が出力されます。

pi@raspberrypi:~ $ curl http://127.0.0.1/mruby
ello

エラーログなどには何も出力されておりません。

また、以下の条件では、SIGSEGVが発生しました。

#conf/nginx.conf

...

	location /mruby {
	    mruby_content_handler '/usr/local/etc/ngx_mruby/build/nginx/ruby/tst.rb';
	}

...

#ruby/tst.rb

Nginx.echo '{"hello": "world"}'

pi@raspberrypi:~ $ curl http://127.0.0.1/mruby
curl: (52) Empty reply from server
#log/error.log

2016/11/08 14:12:48 [alert] 868#0: worker process 1448 exited on signal 11

どちらの条件も、MacOS sierra で動かした場合は値が出力されています。

僕の技術不足で原因もわかりません。よろしくお願いいたします。

@matsumotory
Copy link
Owner

ご報告ありがとうございます。不思議な挙動ですね。調査します。

@hfm
Copy link
Collaborator

hfm commented Nov 17, 2016

Raspberry Pi 1 Model Bを使って再現を試みたところ、 @littlekbt さんと同じ環境を再現できました。

# curl localhost/mruby_hello で何も出力されない
location /mruby_hello { mruby_content_handler_code "Nginx.echo 'hello'"; }

# curl localhost/mruby_ello で ello が出力される
location /mruby_ello { mruby_content_handler_code "Nginx.echo 'ello'"; }

64bit版のRaspberry Piで同じ現象が起きるのかわかりませんが、ARMv6およびARMv7では起きるということですえね。困ったな 😕

debugログに気になる差は見られず。

debugログ

2016/11/17 16:48:02 [info] 11672#0: *12 hooked mruby inline content code: Nginx.echo 'hello', client: 127.0.0.1, server: localhost, request: "GET /mruby_hello HTTP/1.1", host: "localhost"
2016/11/17 16:48:02 [info] 11672#0: *12 client 127.0.0.1 closed keepalive connection
2016/11/17 16:48:09 [info] 11672#0: *13 hooked mruby inline content code: Nginx.echo 'ello', client: 127.0.0.1, server: localhost, request: "GET /mruby_ello HTTP/1.1", host: "localhost"
2016/11/17 16:48:09 [info] 11672#0: *13 client 127.0.0.1 closed keepalive connection

h が先頭にある文字列をecho出来ない、という現象らしい。 g i などほかの英文字は出力できるが、 h から始まる1文字以上の英字はムリそうだった。

location /mruby { mruby_content_handler_code "Nginx.echo 'h'"; }

念のため(なんの?)に mruby のバイナリでputs してみたけど、こっちは普通に出るので、nginxのどこかを経由する段階でおかしくなってるのだな。

# sample.rb
puts "h"
pi@raspberrypi:~/ngx_mruby $ mruby/bin/mruby sample.rb
h

@hfm
Copy link
Collaborator

hfm commented Nov 17, 2016

また、ハッシュっぽい文字列の出力で落ちる現象も再現済み。こっちは { という文字がダメ。

# SEGVするコードの再現
location /hash { mruby_content_handler_code "Nginx.echo '{\"hello\": \"world\"}'"; }
location /hash { mruby_content_handler_code "Nginx.echo '{'"; }

@matsumotory
Copy link
Owner

mrubyのビルドの仕方を、mrbconf.hを弄って変えることで解決しないかなぁ

https://github.com/mruby/mruby/blob/master/include/mrbconf.h

@yyamano
Copy link
Collaborator

yyamano commented Nov 18, 2016

@hfm ハッシュでsegvした時のバックトレースってとれないんでしょうか?

@yyamano
Copy link
Collaborator

yyamano commented Nov 18, 2016

@littlekbt @hfm 以下の変更を試してみてもらえませんか。

yyamano@676d7fb

i386(32ビット)のlinuxでも再現して、僕の手元では上の変更で直りました。

includeの順番が原因でoff_tが32ビットでコンパイルされる.oと64ビットでコンパイルされる.oが混在しており、そのせいでメモリを壊していました。潜在的な問題がある可能性もあるので、他の.cファイルも見直したほうが良いと思います。僕はちょっと時間が取れません。

@hfm
Copy link
Collaborator

hfm commented Nov 18, 2016

うおーあざます帰宅したら試します!

@matsumotory
Copy link
Owner

すごい!

@littlekbt
Copy link
Author

@yyamano さん

僕の環境でも直りました!
ありがとうございます!!

@hfm
Copy link
Collaborator

hfm commented Nov 19, 2016

同じく直りました!

@matsumotory
Copy link
Owner

ありがとうございます。どなたかPR頂けると幸いです。

@yyamano
Copy link
Collaborator

yyamano commented Nov 28, 2016

@matsumotory 僕の修正だけで良いならプルリクエストしますけど。

@matsumotory
Copy link
Owner

一旦それで大丈夫です。随時対応していく形で。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants