Commit 4ac50cd
fix(excel): fix segfault on xlsx with main content type declared via <Default>
- Wrap the <Default> branch in iterate_files_by_contenttype_expat_callback_element_start (xlsxio_read.c) with #ifndef USE_MINIZIP so the minizip backend skips the zip directory traversal at compile time; previously the traversal ran inside an expat callback while [Content_Types].xml was open for streaming read, reentering the minizip single-state handle and crashing in unzGetCurrentFileInfo (upstream issue #28, unfixed in xlsxio 0.2.36)
- Add regression sample tests/file/test_xlsxio_default_crash.xlsx whose [Content_Types].xml declares the main content type via <Default> to cover the former crash path
修复(excel): 修复 main contenttype 经 <Default> 声明的 xlsx 解析段错误
- 在 iterate_files_by_contenttype_expat_callback_element_start 的 <Default> 分支用 #ifndef USE_MINIZIP 包裹,使 minizip 后端编译期跳过 zip 目录遍历;原实现该遍历在 expat 回调内执行,而此时 [Content_Types].xml 已打开流式读取,对同一 unzFile 重入导致 minizip 单状态机冲突,在 unzGetCurrentFileInfo 处段错误(上游 issue #28,xlsxio 0.2.36 未修复)
- 新增回归样本 tests/file/test_xlsxio_default_crash.xlsx,其 [Content_Types].xml 将 main contenttype 经 <Default> 声明,覆盖原崩溃路径
Log: 修复 xlsxio 在 minizip 后端下解析 [Content_Types].xml 中经 <Default> 声明的 main contenttype 时,因目录遍历重入已打开文件的流式读取状态而在 unzGetCurrentFileInfo 处段错误的问题,并补充回归样本
Task: https://pms.uniontech.com/task-view-391297.html brechtsanders/xlsxio#281 parent 9da2bf5 commit 4ac50cd
2 files changed
Lines changed: 8 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
684 | 684 | | |
685 | 685 | | |
686 | 686 | | |
| 687 | + | |
| 688 | + | |
| 689 | + | |
| 690 | + | |
| 691 | + | |
| 692 | + | |
| 693 | + | |
687 | 694 | | |
688 | 695 | | |
689 | 696 | | |
| |||
731 | 738 | | |
732 | 739 | | |
733 | 740 | | |
| 741 | + | |
734 | 742 | | |
735 | 743 | | |
736 | 744 | | |
| |||
Binary file not shown.
0 commit comments