我有一个复杂的 C++ 代码。它是一个 FastCGI 程序,使用FastCGI C++ 类库。
当我要求它提供一个非常长的网址时,我得到:
*** stack smashing detected ***: ./tileserve terminated
Erreur de segmentation
对于现实生活中的应用程序,这不是问题,因为我从不使用这么长的 URL,但这意味着任何人都可以终止我的服务器……我不喜欢这样。
有没有工具可以找出这个问题出现在哪里?我该如何使用它?
编辑:已解决
我正在这样做:
int len;
char uri[200];
len = strlen(request.params[std::string("REQUEST_URI")].c_str());
printf("%d\n", len);
if (len > 200) return 1;
strcpy(uri, request.params[std::string("REQUEST_URI")].c_str());
看起来对测试200
来说太高了。len
它实际上在194
.
所以我这样做了:
if (len > 190) return 1;
现在,很好。