代码之家  ›  专栏  ›  技术社区  ›  aja

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

  •  0
  • aja  · 技术社区  · 7 年前

    我使用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\U解压发送了错误的字节,那么我就出现了分段错误。错误如下所示:

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

    现在,如果我检测到未压缩的缓冲区,程序本身就会崩溃。在我将数据发送到解压缩之前,是否有任何方法可以验证我收到的数据是否已压缩?

    1 回复  |  直到 7 年前
        1
  •  3
  •   Mark Adler    7 年前

    使用 lzo1x_decompress_safe() 相反 lzo1x_decompress() 如果给定无效数据,例如不是LZO压缩数据,则可能会崩溃。看起来这就是正在发生的事情。