diff options
author | Brad King <brad.king@kitware.com> | 2014-04-16 17:07:55 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2014-04-16 17:13:28 (GMT) |
commit | b508de59e852a5068f3b9838e2be8a485235b934 (patch) | |
tree | b32d63a2be2b44c5e384a10e906a3a8920fff64b /Source/cmArchiveWrite.cxx | |
parent | 0b3781e4c497566acaa504d4106d11c02a642501 (diff) | |
download | CMake-b508de59e852a5068f3b9838e2be8a485235b934.zip CMake-b508de59e852a5068f3b9838e2be8a485235b934.tar.gz CMake-b508de59e852a5068f3b9838e2be8a485235b934.tar.bz2 |
cmArchiveWrite: Handle NULL error string (#14882)
If archive_error_string returns NULL, use a placeholder string instead
of crashing.
Diffstat (limited to 'Source/cmArchiveWrite.cxx')
-rw-r--r-- | Source/cmArchiveWrite.cxx | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/Source/cmArchiveWrite.cxx b/Source/cmArchiveWrite.cxx index b410e44..18ab29e 100644 --- a/Source/cmArchiveWrite.cxx +++ b/Source/cmArchiveWrite.cxx @@ -17,6 +17,13 @@ #include <cm_libarchive.h> //---------------------------------------------------------------------------- +static std::string cm_archive_error_string(struct archive* a) +{ + const char* e = archive_error_string(a); + return e? e : "unknown error"; +} + +//---------------------------------------------------------------------------- class cmArchiveWrite::Entry { struct archive_entry* Object; @@ -59,7 +66,7 @@ cmArchiveWrite::cmArchiveWrite(std::ostream& os, Compress c, Type t): if(archive_write_set_compression_none(this->Archive) != ARCHIVE_OK) { this->Error = "archive_write_set_compression_none: "; - this->Error += archive_error_string(this->Archive); + this->Error += cm_archive_error_string(this->Archive); return; } break; @@ -67,7 +74,7 @@ cmArchiveWrite::cmArchiveWrite(std::ostream& os, Compress c, Type t): if(archive_write_set_compression_compress(this->Archive) != ARCHIVE_OK) { this->Error = "archive_write_set_compression_compress: "; - this->Error += archive_error_string(this->Archive); + this->Error += cm_archive_error_string(this->Archive); return; } break; @@ -75,7 +82,7 @@ cmArchiveWrite::cmArchiveWrite(std::ostream& os, Compress c, Type t): if(archive_write_set_compression_gzip(this->Archive) != ARCHIVE_OK) { this->Error = "archive_write_set_compression_gzip: "; - this->Error += archive_error_string(this->Archive); + this->Error += cm_archive_error_string(this->Archive); return; } break; @@ -83,7 +90,7 @@ cmArchiveWrite::cmArchiveWrite(std::ostream& os, Compress c, Type t): if(archive_write_set_compression_bzip2(this->Archive) != ARCHIVE_OK) { this->Error = "archive_write_set_compression_bzip2: "; - this->Error += archive_error_string(this->Archive); + this->Error += cm_archive_error_string(this->Archive); return; } break; @@ -91,7 +98,7 @@ cmArchiveWrite::cmArchiveWrite(std::ostream& os, Compress c, Type t): if(archive_write_set_compression_lzma(this->Archive) != ARCHIVE_OK) { this->Error = "archive_write_set_compression_lzma: "; - this->Error += archive_error_string(this->Archive); + this->Error += cm_archive_error_string(this->Archive); return; } break; @@ -99,7 +106,7 @@ cmArchiveWrite::cmArchiveWrite(std::ostream& os, Compress c, Type t): if(archive_write_set_compression_xz(this->Archive) != ARCHIVE_OK) { this->Error = "archive_write_set_compression_xz: "; - this->Error += archive_error_string(this->Archive); + this->Error += cm_archive_error_string(this->Archive); return; } break; @@ -108,7 +115,7 @@ cmArchiveWrite::cmArchiveWrite(std::ostream& os, Compress c, Type t): if (archive_read_disk_set_standard_lookup(this->Disk) != ARCHIVE_OK) { this->Error = "archive_read_disk_set_standard_lookup: "; - this->Error += archive_error_string(this->Archive); + this->Error += cm_archive_error_string(this->Archive); return;; } #endif @@ -118,7 +125,7 @@ cmArchiveWrite::cmArchiveWrite(std::ostream& os, Compress c, Type t): if(archive_write_set_format_zip(this->Archive) != ARCHIVE_OK) { this->Error = "archive_write_set_format_zip: "; - this->Error += archive_error_string(this->Archive); + this->Error += cm_archive_error_string(this->Archive); return; } break; @@ -126,7 +133,7 @@ cmArchiveWrite::cmArchiveWrite(std::ostream& os, Compress c, Type t): if(archive_write_set_format_pax_restricted(this->Archive) != ARCHIVE_OK) { this->Error = "archive_write_set_format_pax_restricted: "; - this->Error += archive_error_string(this->Archive); + this->Error += cm_archive_error_string(this->Archive); return; } break; @@ -136,7 +143,7 @@ cmArchiveWrite::cmArchiveWrite(std::ostream& os, Compress c, Type t): if (archive_write_set_bytes_in_last_block(this->Archive, 1)) { this->Error = "archive_write_set_bytes_in_last_block: "; - this->Error += archive_error_string(this->Archive); + this->Error += cm_archive_error_string(this->Archive); return; } @@ -146,7 +153,7 @@ cmArchiveWrite::cmArchiveWrite(std::ostream& os, Compress c, Type t): 0) != ARCHIVE_OK) { this->Error = "archive_write_open: "; - this->Error += archive_error_string(this->Archive); + this->Error += cm_archive_error_string(this->Archive); return; } } @@ -234,7 +241,7 @@ bool cmArchiveWrite::AddFile(const char* file, if(archive_read_disk_entry_from_file(this->Disk, e, -1, 0) != ARCHIVE_OK) { this->Error = "archive_read_disk_entry_from_file: "; - this->Error += archive_error_string(this->Disk); + this->Error += cm_archive_error_string(this->Disk); return false; } // Clear acl and xattr fields not useful for distribution. @@ -244,7 +251,7 @@ bool cmArchiveWrite::AddFile(const char* file, if(archive_write_header(this->Archive, e) != ARCHIVE_OK) { this->Error = "archive_write_header: "; - this->Error += archive_error_string(this->Archive); + this->Error += cm_archive_error_string(this->Archive); return false; } @@ -291,7 +298,7 @@ bool cmArchiveWrite::AddData(const char* file, size_t size) if(archive_write_data(this->Archive, buffer, nnext) != nnext_s) { this->Error = "archive_write_data: "; - this->Error += archive_error_string(this->Archive); + this->Error += cm_archive_error_string(this->Archive); return false; } nleft -= nnext; |