From 6fed391e1a8baf7e08106020f50be27e026ba6ca Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 13 Oct 2025 22:25:33 +0000 Subject: [PATCH 1/3] Initial plan From 5ee1b7ee8aef63a0b911cb04b82bf4b997b97785 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 13 Oct 2025 22:53:24 +0000 Subject: [PATCH 2/3] Add enhanced error diagnostics for bundle extraction failures Co-authored-by: agocke <515774+agocke@users.noreply.github.com> --- src/native/corehost/bundle/extractor.cpp | 31 ++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/src/native/corehost/bundle/extractor.cpp b/src/native/corehost/bundle/extractor.cpp index ab2c53295055b9..31909b093386f3 100644 --- a/src/native/corehost/bundle/extractor.cpp +++ b/src/native/corehost/bundle/extractor.cpp @@ -7,6 +7,7 @@ #include "pal.h" #include "utils.h" #include +#include #ifdef __sun #include @@ -156,10 +157,20 @@ void extractor_t::extract(const file_entry_t &entry, reader_t &reader) } int produced = bufSize - zStream.availOut; - if (fwrite(buf, 1, produced, file) != (size_t)produced) + size_t written = fwrite(buf, 1, produced, file); + if (written != (size_t)produced) { CompressionNative_InflateEnd(&zStream); trace::error(_X("I/O failure when writing decompressed file.")); + if (ferror(file)) + { + int err = errno; + trace::error(_X("I/O error detected. errno: %d, %s"), err, pal::strerror(err).c_str()); + } + else + { + trace::error(_X("Short write detected. Expected: %d bytes, Written: %zu bytes"), produced, written); + } throw StatusCode::BundleExtractionIOError; } @@ -181,10 +192,26 @@ void extractor_t::extract(const file_entry_t &entry, reader_t &reader) { trace::error(_X("Failure extracting contents of the application bundle. Expected size:%" PRId64 " Actual size:%zu"), size, extracted_size); trace::error(_X("I/O failure when writing extracted files.")); + if (ferror(file)) + { + int err = errno; + trace::error(_X("I/O error detected. errno: %d, %s"), err, pal::strerror(err).c_str()); + } + else + { + trace::error(_X("Short write detected. Expected: %zu bytes, Written: %zu bytes"), cast_size, extracted_size); + } + fclose(file); throw StatusCode::BundleExtractionIOError; } - fclose(file); + if (fclose(file) != 0) + { + int err = errno; + trace::error(_X("Failure extracting contents of the application bundle.")); + trace::error(_X("Failed to close file after extraction. errno: %d, %s"), err, pal::strerror(err).c_str()); + throw StatusCode::BundleExtractionIOError; + } } void extractor_t::begin() From 38a8c4db1d7ded9d4ae206fcde1474f77072c204 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 14 Oct 2025 03:42:13 +0000 Subject: [PATCH 3/3] Address PR feedback: simplify error reporting and remove fclose checking Co-authored-by: agocke <515774+agocke@users.noreply.github.com> --- src/native/corehost/bundle/extractor.cpp | 31 ++++-------------------- 1 file changed, 5 insertions(+), 26 deletions(-) diff --git a/src/native/corehost/bundle/extractor.cpp b/src/native/corehost/bundle/extractor.cpp index 31909b093386f3..a1e085ab507d3f 100644 --- a/src/native/corehost/bundle/extractor.cpp +++ b/src/native/corehost/bundle/extractor.cpp @@ -161,16 +161,9 @@ void extractor_t::extract(const file_entry_t &entry, reader_t &reader) if (written != (size_t)produced) { CompressionNative_InflateEnd(&zStream); + int err = errno; trace::error(_X("I/O failure when writing decompressed file.")); - if (ferror(file)) - { - int err = errno; - trace::error(_X("I/O error detected. errno: %d, %s"), err, pal::strerror(err).c_str()); - } - else - { - trace::error(_X("Short write detected. Expected: %d bytes, Written: %zu bytes"), produced, written); - } + trace::error(_X("Expected: %d bytes, Written: %zu bytes, errno: %d, %s"), produced, written, err, pal::strerror(err).c_str()); throw StatusCode::BundleExtractionIOError; } @@ -190,28 +183,14 @@ void extractor_t::extract(const file_entry_t &entry, reader_t &reader) if (extracted_size != cast_size) { + int err = errno; trace::error(_X("Failure extracting contents of the application bundle. Expected size:%" PRId64 " Actual size:%zu"), size, extracted_size); - trace::error(_X("I/O failure when writing extracted files.")); - if (ferror(file)) - { - int err = errno; - trace::error(_X("I/O error detected. errno: %d, %s"), err, pal::strerror(err).c_str()); - } - else - { - trace::error(_X("Short write detected. Expected: %zu bytes, Written: %zu bytes"), cast_size, extracted_size); - } + trace::error(_X("I/O failure when writing extracted files. errno: %d, %s"), err, pal::strerror(err).c_str()); fclose(file); throw StatusCode::BundleExtractionIOError; } - if (fclose(file) != 0) - { - int err = errno; - trace::error(_X("Failure extracting contents of the application bundle.")); - trace::error(_X("Failed to close file after extraction. errno: %d, %s"), err, pal::strerror(err).c_str()); - throw StatusCode::BundleExtractionIOError; - } + fclose(file); } void extractor_t::begin()