我正在阅读从udp流中捕获的jpg片段,我有以下内容:
#define BUF_SIZ 1066
int main(int argc, char *argv[])
{
int ptr;
uint8_t buf[BUF_SIZ];
uint8_t jpg[BUF_SIZ * 256];
repeat:
//... Check if first packet
//... fill buf after finding first packet
// append buf array to jpg array passing header
memcpy(&jpg[ptr], &buf[46], numbytes - 46);
ptr += (numbytes - 46);
... check if last packet.
... goto repeat if not last packet
ending:
... process jpg array
这是有效的,但我认为它不对(我是c的新手),而且我偶尔会出现随机段错误。
我在数据包之间做其他事情所以我需要尽快完成捕获包
答案 0 :(得分:1)
在做memcpy之前要检查的事情:
ptr >= 0
ptr+numbytes < BUF_SIZ * 256
numbytes >= 46
ptr+numbytes > 0
最后一个可能看起来很奇怪,但可能有数字的值在那里失败,但满足其他三个检查。 (但如果你能证明数字远低于INT_MAX你就不需要进行检查)