diff --git a/udfps/UdfpsHandler.cpp b/udfps/UdfpsHandler.cpp index aa16d66..b9c98ff 100644 --- a/udfps/UdfpsHandler.cpp +++ b/udfps/UdfpsHandler.cpp @@ -62,24 +62,23 @@ static bool readBool(int fd) { } static disp_event_resp* parseDispEvent(int fd) { - disp_event header; - ssize_t headerSize = read(fd, &header, sizeof(header)); - if (headerSize < sizeof(header)) { - LOG(ERROR) << "unexpected display event header size: " << headerSize; + char event_data[1024] = {0}; + ssize_t size; + + memset(event_data, 0x0, sizeof(event_data)); + size = read(fd, event_data, sizeof(event_data)); + if (size < 0) { + LOG(ERROR) << "read fod event failed"; return nullptr; } - struct disp_event_resp* response = - reinterpret_cast(malloc(header.length)); - response->base = header; - int dataLength = response->base.length - sizeof(response->base); - ssize_t dataSize = read(fd, &response->data, dataLength); - if (dataSize < dataLength) { - LOG(ERROR) << "unexpected display event data size: " << dataSize; + if (size < sizeof(struct disp_event)) { + LOG(ERROR) << "Invalid event size " << size << ", expect at least " + << sizeof(struct disp_event); return nullptr; } - return response; + return (struct disp_event_resp*)&event_data[0]; } } // anonymous namespace