验证数据是否使用lzo1z压缩进行压缩

时间:2018-03-08 12:17:10

标签: c zlib compression lzo

我正在使用lzo1z解压缩来解压缩通过网络发送的数据。现在我需要在解压缩数据之前检查数据是否已压缩。我的代码是这样的:

#include <lzo1z.h>
......
    if (lzo_init() != LZO_E_OK)
    {
        //Error 
    }
    else{

        // ** Validation if compressed with lzo1z **
        lzoFlag = lzo1z_decompress(buffPointer,ret_in,out,&out_len,wrkmem);
        if (lzoFlag == LZO_E_OK)
        {
            // Success
        }
        else
        {
            //Fail
        }
    }
......

在我收到的数据包的单个有效负载中发送多个数据包。如果我向lzo1z_decompress发送错误的字节,我会收到Segmentation fault。错误如下所示:

Program received signal SIGSEGV, Segmentation fault.
0x000000059a581339 in lzo1z_decompress ()
#1  0x000000059a5810f8 in decompressLZO1z (self=<optimized out>, args=<optimized out>)

现在如果我发送了未压缩的缓冲区,程序本身就会崩溃。如果在我将数据发送到解压缩之前压缩了我收到的数据,有什么方法可以验证吗?

1 个答案:

答案 0 :(得分:2)

请改用lzo1x_decompress_safe()。如果给出无效数据,lzo1x_decompress()可能会崩溃,例如不是LZO压缩数据。看起来这正是发生的事情。