Skip to content

[z/OS] Fix z/OS ASAN test failure#197547

Merged
amy-kwan merged 1 commit into
llvm:mainfrom
uyoyo0:fix-zos-archive-asan
May 14, 2026
Merged

[z/OS] Fix z/OS ASAN test failure#197547
amy-kwan merged 1 commit into
llvm:mainfrom
uyoyo0:fix-zos-archive-asan

Conversation

@uyoyo0

@uyoyo0 uyoyo0 commented May 13, 2026

Copy link
Copy Markdown
Contributor

Fix test failure when running zos-archive-read.test under asan.

AddressSanitizer detected a heap-buffer-overflow in ebcdicFieldToASCII() when reading z/OS archive headers. The issue occurred because ZOSArchiveMemberHeader::setMemberHeaderStrings was called even when the base ArchiveMemberHeader constructor had already set an error, causing reads past the end of fixed-size EBCDIC fields. Fixed by checking for constructor errors before calling setMemberHeaderStrings.

Original PR: #187110

@llvmorg-github-actions

Copy link
Copy Markdown

@llvm/pr-subscribers-llvm-binary-utilities

Author: Uyiosa Iyekekpolor (uyoyo0)

Changes

Fix test failure when running zos-archive-read.test under asan.

AddressSanitizer detected a heap-buffer-overflow in ebcdicFieldToASCII() when reading z/OS archive headers. The issue occurred because ZOSArchiveMemberHeader::setMemberHeaderStrings was called even when the base ArchiveMemberHeader constructor had already set an error, causing reads past the end of fixed-size EBCDIC fields. Fixed by checking for constructor errors before calling setMemberHeaderStrings.

Original PR: #187110


Full diff: https://github.com/llvm/llvm-project/pull/197547.diff

1 Files Affected:

  • (modified) llvm/lib/Object/Archive.cpp (+4)
diff --git a/llvm/lib/Object/Archive.cpp b/llvm/lib/Object/Archive.cpp
index d95f9103747aa..ae54338bb9a71 100644
--- a/llvm/lib/Object/Archive.cpp
+++ b/llvm/lib/Object/Archive.cpp
@@ -390,6 +390,10 @@ ZOSArchiveMemberHeader::ZOSArchiveMemberHeader(const Archive *Parent,
                                                uint64_t Size, Error *Err)
     : ArchiveMemberHeader(Parent, RawHeaderPtr, Size, Err) {
   ErrorAsOutParameter ErrAsOutParam(Err);
+  // If the base class constructor already detected an error
+  // do not attempt to read header fields
+  if (Err && *Err)
+    return;
   setMemberHeaderStrings(Err, Size);
 }
 

@pranavk pranavk left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm. thanks

@thurstond

Copy link
Copy Markdown
Contributor

uyoyo0 Could you please set your GitHub to use a public email address, per https://llvm.org/docs/DeveloperPolicy.html#email-addresses? Thanks!

@amy-kwan
amy-kwan merged commit 1cff315 into llvm:main May 14, 2026
12 checks passed
pedroMVicente pushed a commit to pedroMVicente/llvm-project that referenced this pull request May 19, 2026
Fix test failure when running `zos-archive-read.test` under asan. 

AddressSanitizer detected a heap-buffer-overflow in
`ebcdicFieldToASCII()` when reading z/OS archive headers. The issue
occurred because `ZOSArchiveMemberHeader::setMemberHeaderStrings` was
called even when the base `ArchiveMemberHeader` constructor had already
set an error, causing reads past the end of fixed-size EBCDIC fields.
Fixed by checking for constructor errors before calling
`setMemberHeaderStrings`.

Original PR: llvm#187110
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants