prajnamort / LambdaOJ2

MIT License
3 stars 5 forks source link

Bug: 无休止的编译错误信息会导致错误 #26

Closed prajnamort closed 7 years ago

prajnamort commented 7 years ago

如提交以下 C++ 代码:(linzinan 的提交里面有很多这样的)

struct x struct z<x(x(x(x(x(x(x(x(x(x(x(x(x(x(x(x(x(y,x(y><y*,x(y*w>v<y*,w,x{}

编译器会无止境地输出编译错误信息。

然后不知道为什么 celery task 会异常退出:

ValueError: A string literal cannot contain NUL (0x00) characters.
prajnamort commented 7 years ago

@kainwen 我们的 liblambdaoj 在编译的时候有设置超时嘛?

kainwen-zz commented 7 years ago

@prajnamort 有设置超时。最大编译时间5秒。

prajnamort commented 7 years ago

image 嗯,我本地实验的时候确实没啥问题,但线上超时了以后,返回到我这边的 results 字符串是这样的。。 然后就出错了,这是为啥~?

kainwen-zz commented 7 years ago

@prajnamort 不知道。晚上回家调试一下。

kainwen-zz commented 7 years ago

@prajnamort 那个攻击代码貌似能产生二进制的文件。所以,应该这样:

prajnamort commented 7 years ago

其实,它是能被 decode('utf8') 的,你可以试试。。问题是,我本地 vagrant 里编译这个东西根本不会返回 \x00 的值,只有线上环境才会。。你的 lib 在线上表现得有区别

prajnamort commented 7 years ago

话说,而且你的 lib 返回的 results,我发现无论在什么时候,都是 bytes 类型的。 这个应该返回 string 类型?

kainwen-zz commented 7 years ago

@prajnamort 我这边改了,应该可以了。不过已经计划用docker来弄,现在不用急着上线测试。