堆栈 Cookie 检测代码检测到基于堆栈的缓冲区溢出(在一个函数结束末尾花括号报错)
如下图:
经检查,没有常见的数组访问越界问题
将栈变量申请为堆变量解决问题:
void _buttonEvent(vrinputemulator::ButtonEventType eventType,uint32_t deviceId, vr::EVRButtonId buttonId, uint32_t holdTime) {
bool noHold = false;
if (eventType == vrinputemulator::ButtonEventType::ButtonPressed || eventType == vrinputemulator::ButtonEventType::ButtonTouched) {
noHold = true;
}
/***************************************************************/
/***************************************************************/
/*********************症结症结症结症结症结症结*********************/
vrinputemulator::VRInputEmulator inputEmulator;
/*********************症结症结症结症结症结症结******************/
/***************************************************************/
/***************************************************************/
inputEmulator.connect();
printf("button connect\n");
inputEmulator.openvrButtonEvent(eventType, deviceId, buttonId, 0.0);
printf("inputEmulator.openvrButtonEvent\n");
if (noHold) {
std::this_thread::sleep_for(std::chrono::milliseconds(holdTime));
if (eventType == vrinputemulator::ButtonEventType::ButtonPressed) {
eventType = vrinputemulator::ButtonEventType::ButtonUnpressed;
}
else {
eventType = vrinputemulator::ButtonEventType::ButtonUntouched;
}
inputEmulator.openvrButtonEvent(eventType, deviceId, buttonId, 0.0);
printf("inputEmulator.openvrButtonEvent\n");
}
inputEmulator.disconnect();
printf("disconnect\n");
}
改为:
void _buttonEvent(vrinputemulator::ButtonEventType eventType,uint32_t deviceId, vr::EVRButtonId buttonId, uint32_t holdTime) {
bool noHold = false;
if (eventType == vrinputemulator::ButtonEventType::ButtonPressed || eventType == vrinputemulator::ButtonEventType::ButtonTouched) {
noHold = true;
}
vrinputemulator::VRInputEmulator* inputEmulator = new vrinputemulator::VRInputEmulator;
inputEmulator->connect();
printf("button connect\n");
inputEmulator->openvrButtonEvent(eventType, deviceId, buttonId, 0.0);
printf("inputEmulator.openvrButtonEvent\n");
if (noHold) {
std::this_thread::sleep_for(std::chrono::milliseconds(holdTime));
if (eventType == vrinputemulator::ButtonEventType::ButtonPressed) {
eventType = vrinputemulator::ButtonEventType::ButtonUnpressed;
}
else {
eventType = vrinputemulator::ButtonEventType::ButtonUntouched;
}
inputEmulator->openvrButtonEvent(eventType, deviceId, buttonId, 0.0);
printf("inputEmulator.openvrButtonEvent\n");
}
inputEmulator->disconnect();
printf("disconnect\n");
}
解决问题