【发布时间】:2014-05-10 12:07:08
【问题描述】:
如何从 C 中的数据包中读取数据并将其转换为结构?我的意思是,有一个类似的结构
|=======================================================================
|0123456701234567012345670123456701234567012345670123456701234567.......
| type | length | MSG HDR | data
像结构一样
struct msg {
char type;
size_t length;
int hdr;
struct data * data;
};
下面的代码可以吗?
bool parse_packet(char * packet, size_t packet_len, struct msg * result) {
if(packet_len < 5) return false;
result->type = *packet++;
result->length = ntohl(*(int*)packet);
packet+=4;
if(result->length + 4 + 5 > packet_len)
return false;
if(result->length < 2)
return false;
result->hdr = ntohs(*(short*)packet);
packet+=2;
return parse_data(result, packet);
}
【问题讨论】:
-
您的应用程序到底在做什么?
-
您的安全问题是什么?
-
我不希望缓冲区溢出/读取溢出(例如 heartbleed)
-
@user3623227:这不是“安全的”。这只是“正确”,无论如何都是暗示的。
-
您的演员表会产生未定义的行为。
标签: c security operating-system