讨论广场 问答详情
4.0release act测试中出现ActsZlibTest#ActsZlibTestGzUnGetc段错误,求助
A107A107 2024-09-10 09:45:34
93 评论 分享

日志:

[2024-09-10 09:32:35,406] [3372] [Parser] [DEBUG] [[ RUN      ] ActsZlibTest.ActsZlibTestGzUnGetc]
[2024-09-10 09:32:35,406] [3372] [Listener] [DEBUG] [TestStarted(ActsZlibTest#ActsZlibTestGzUnGetc)]
[2024-09-10 09:32:35,649] [3372] [Parser] [DEBUG] [Signal 11 ]
[2024-09-10 09:32:35,654] [3372] [ParserLite] [DEBUG] [Result code is: ]


测试代码:

HWTEST_F(ActsZlibTest, ActsZlibTestGzUnGetc, Function | MediumTest | Level2)
{
#ifdef Z_SOLO
    fprintf(stderr, "*********ActsZlibTestGzUnGetc Z_SOLO**********\n");
#else
    std::lock_guard<std::mutex> lock(file_mutex);
    gzFile file;
    file = gzopen(TESTFILE, "rb");
    ASSERT_TRUE(file != NULL);
    ASSERT_FALSE(gzungetc('a', file) != 'a');
    char sz_read[5] = {0};
    gzread(file, sz_read, 1);
    ASSERT_TRUE(sz_read[0] == 'a');
    gzclose(file);
#endif
}

 

93 评论 分享
写回答
全部评论(3)
2 楼
2024-09-10 20:17:57
2024-09-11 09:27:30
收到,感谢!
2024-09-11 09:27:30

在4.0 release的Act测试中,遇到ActsZlibTest#ActsZlibTestGzUnGetc段错误,日志显示信号11(通常表示Segmentation Fault或访问越界异常)。从提供的代码片段来看,该测试尝试使用gzungetc函数读取压缩文件,并检查其行为。问题可能出在以下几个方面:

  1. 内存管理gzungetc可能导致内部缓冲区溢出,如果数据量过大或者处理不当,可能会访问到未初始化或已释放的内存区域。
  2. 资源关闭:在使用完gzFile后,如果没有正确调用gzclose,可能导致资源泄露并影响后续操作。
  3. 并发问题:尽管代码中使用了std::lock_guard来保护文件操作(针对非Z_SOLO环境),但在多线程或并发环境下,如果其他线程同时访问该文件,可能会引发竞态条件。

为了解决这个问题,你可以尝试以下步骤:

  • 检查资源管理:确保在测试结束后正确关闭了gzFile
  • 边界检查:添加额外的边界检查来防止读取超出压缩数据范围。
  • 并发问题排查:如果是多线程环境,确认文件操作是否在互斥锁保护下进行。
  • 日志和调试:增加更多的日志输出,跟踪gzungetcgzread的具体行为,以便定位异常发生的位置。

如果问题依然存在,可能需要深入检查Zlib库的实现或者OpenHarmony内核中与压缩文件操作相关的部分,确保其在4.0 release版本下兼容性和稳定性。同时,可以查阅相关文档或社区论坛,看看是否有其他开发者遇到过类似的问题并找到了解决方案。

2024-09-10 11:20:49