Processingのコード投げたら実行結果をgifで返してくれるbot

paiza_runというサービスがあります

twitter.com

paiza_runのことは前から知っていて、twitterでコードをリプライすると実行結果を返してくれるのは結構面白いなーって思っていたのですが、paiza_runは実行結果の標準出力しか返してくれません

標準出力も勿論必要なんだけども、ビジュアルで結果を返してくれたらもっと面白いんじゃないかなーって思ったので組んでみたということです

twitter.com
github.com


Processingは「Javaを単純化し、グラフィック機能に特化した言語」なので、Javaなコードが実行出来ます
Processing - Wikipedia

Processingの標準関数だけでもloadStringsとかcreateInputなどがあるので、完全に自由に任意コードを実行させてしまうと大変なことになってしまいます

その辺を一応対処しているつもりなのですが、java.lang.SecurityManagerとか使ったほうが良いんだろうなーとか思ったり…


近いうちに標準出力にも対応させたいなーって思ってます
DMにも対応させたいんですが、DMでgifって送れないっぽい?




色々とデバッグする過程で多くの方に協力して頂いたので、纏めておきます
デバッグしてくださった方々、本当にありがとうございました
(まだいっぱいありそうなんですが、ヤバい感じのは先に連絡を下さい…)




以下は全て対応済みなので、リプされてもエラーが返ってくると思います




まず無限ループ


今は実行時間を計測していて、長いな―って思ったら強制的に終了するように設定してます


次はmain(args)


これも応答が返ってこなくなりました
対策は無限ループと一緒です


exec系は結構やる人多かったです


今はexecは置換しているので動かないはず…


sketchPathを取得しようとする人が何人かいました


別に知られても大丈夫かなーって思ってます


確かに動作環境が分かってしまうのはマズいので対応しました
こういうところ気を付けないと…



execの対応を行っている最中にこれをやられてマジでツラかったです


execに対応したと思ったらopenを狙われました


openもexecと同じように対応済みです


今は大丈夫なんですが、このときは置換方法が悪くてこれがダメでした


execとopenに対応したらgetMethodで狙ってきます


sketchPathと同じようにdataPathも見ようとする人が多かったです


再帰的に置換していたんですが、その処理を1度しか行っていなくて、これがダメでした


createInputもヤバい…


無限ループ対策で30秒しか動作しないようにしていたんですが、それでもこれで8GB持って行かれました


Fileでファイルリスト見えたり、deleteで任意のファイルを削除出来たり…



なんかよく分からないけど、これで処理落ちしました



☆おまけ☆
僕がsystemcallを実装した直後に送られてきたリプ