cmArchiveWrite: Handle NULL error string (#14882)
If archive_error_string returns NULL, use a placeholder string instead of crashing.
This commit is contained in:
parent
0b3781e4c4
commit
b508de59e8
|
@ -16,6 +16,13 @@
|
||||||
#include <cmsys/Directory.hxx>
|
#include <cmsys/Directory.hxx>
|
||||||
#include <cm_libarchive.h>
|
#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
|
class cmArchiveWrite::Entry
|
||||||
{
|
{
|
||||||
|
@ -59,7 +66,7 @@ cmArchiveWrite::cmArchiveWrite(std::ostream& os, Compress c, Type t):
|
||||||
if(archive_write_set_compression_none(this->Archive) != ARCHIVE_OK)
|
if(archive_write_set_compression_none(this->Archive) != ARCHIVE_OK)
|
||||||
{
|
{
|
||||||
this->Error = "archive_write_set_compression_none: ";
|
this->Error = "archive_write_set_compression_none: ";
|
||||||
this->Error += archive_error_string(this->Archive);
|
this->Error += cm_archive_error_string(this->Archive);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -67,7 +74,7 @@ cmArchiveWrite::cmArchiveWrite(std::ostream& os, Compress c, Type t):
|
||||||
if(archive_write_set_compression_compress(this->Archive) != ARCHIVE_OK)
|
if(archive_write_set_compression_compress(this->Archive) != ARCHIVE_OK)
|
||||||
{
|
{
|
||||||
this->Error = "archive_write_set_compression_compress: ";
|
this->Error = "archive_write_set_compression_compress: ";
|
||||||
this->Error += archive_error_string(this->Archive);
|
this->Error += cm_archive_error_string(this->Archive);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -75,7 +82,7 @@ cmArchiveWrite::cmArchiveWrite(std::ostream& os, Compress c, Type t):
|
||||||
if(archive_write_set_compression_gzip(this->Archive) != ARCHIVE_OK)
|
if(archive_write_set_compression_gzip(this->Archive) != ARCHIVE_OK)
|
||||||
{
|
{
|
||||||
this->Error = "archive_write_set_compression_gzip: ";
|
this->Error = "archive_write_set_compression_gzip: ";
|
||||||
this->Error += archive_error_string(this->Archive);
|
this->Error += cm_archive_error_string(this->Archive);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -83,7 +90,7 @@ cmArchiveWrite::cmArchiveWrite(std::ostream& os, Compress c, Type t):
|
||||||
if(archive_write_set_compression_bzip2(this->Archive) != ARCHIVE_OK)
|
if(archive_write_set_compression_bzip2(this->Archive) != ARCHIVE_OK)
|
||||||
{
|
{
|
||||||
this->Error = "archive_write_set_compression_bzip2: ";
|
this->Error = "archive_write_set_compression_bzip2: ";
|
||||||
this->Error += archive_error_string(this->Archive);
|
this->Error += cm_archive_error_string(this->Archive);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -91,7 +98,7 @@ cmArchiveWrite::cmArchiveWrite(std::ostream& os, Compress c, Type t):
|
||||||
if(archive_write_set_compression_lzma(this->Archive) != ARCHIVE_OK)
|
if(archive_write_set_compression_lzma(this->Archive) != ARCHIVE_OK)
|
||||||
{
|
{
|
||||||
this->Error = "archive_write_set_compression_lzma: ";
|
this->Error = "archive_write_set_compression_lzma: ";
|
||||||
this->Error += archive_error_string(this->Archive);
|
this->Error += cm_archive_error_string(this->Archive);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -99,7 +106,7 @@ cmArchiveWrite::cmArchiveWrite(std::ostream& os, Compress c, Type t):
|
||||||
if(archive_write_set_compression_xz(this->Archive) != ARCHIVE_OK)
|
if(archive_write_set_compression_xz(this->Archive) != ARCHIVE_OK)
|
||||||
{
|
{
|
||||||
this->Error = "archive_write_set_compression_xz: ";
|
this->Error = "archive_write_set_compression_xz: ";
|
||||||
this->Error += archive_error_string(this->Archive);
|
this->Error += cm_archive_error_string(this->Archive);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
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)
|
if (archive_read_disk_set_standard_lookup(this->Disk) != ARCHIVE_OK)
|
||||||
{
|
{
|
||||||
this->Error = "archive_read_disk_set_standard_lookup: ";
|
this->Error = "archive_read_disk_set_standard_lookup: ";
|
||||||
this->Error += archive_error_string(this->Archive);
|
this->Error += cm_archive_error_string(this->Archive);
|
||||||
return;;
|
return;;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -118,7 +125,7 @@ cmArchiveWrite::cmArchiveWrite(std::ostream& os, Compress c, Type t):
|
||||||
if(archive_write_set_format_zip(this->Archive) != ARCHIVE_OK)
|
if(archive_write_set_format_zip(this->Archive) != ARCHIVE_OK)
|
||||||
{
|
{
|
||||||
this->Error = "archive_write_set_format_zip: ";
|
this->Error = "archive_write_set_format_zip: ";
|
||||||
this->Error += archive_error_string(this->Archive);
|
this->Error += cm_archive_error_string(this->Archive);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
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)
|
if(archive_write_set_format_pax_restricted(this->Archive) != ARCHIVE_OK)
|
||||||
{
|
{
|
||||||
this->Error = "archive_write_set_format_pax_restricted: ";
|
this->Error = "archive_write_set_format_pax_restricted: ";
|
||||||
this->Error += archive_error_string(this->Archive);
|
this->Error += cm_archive_error_string(this->Archive);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
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))
|
if (archive_write_set_bytes_in_last_block(this->Archive, 1))
|
||||||
{
|
{
|
||||||
this->Error = "archive_write_set_bytes_in_last_block: ";
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -146,7 +153,7 @@ cmArchiveWrite::cmArchiveWrite(std::ostream& os, Compress c, Type t):
|
||||||
0) != ARCHIVE_OK)
|
0) != ARCHIVE_OK)
|
||||||
{
|
{
|
||||||
this->Error = "archive_write_open: ";
|
this->Error = "archive_write_open: ";
|
||||||
this->Error += archive_error_string(this->Archive);
|
this->Error += cm_archive_error_string(this->Archive);
|
||||||
return;
|
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)
|
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_read_disk_entry_from_file: ";
|
||||||
this->Error += archive_error_string(this->Disk);
|
this->Error += cm_archive_error_string(this->Disk);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// Clear acl and xattr fields not useful for distribution.
|
// 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)
|
if(archive_write_header(this->Archive, e) != ARCHIVE_OK)
|
||||||
{
|
{
|
||||||
this->Error = "archive_write_header: ";
|
this->Error = "archive_write_header: ";
|
||||||
this->Error += archive_error_string(this->Archive);
|
this->Error += cm_archive_error_string(this->Archive);
|
||||||
return false;
|
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)
|
if(archive_write_data(this->Archive, buffer, nnext) != nnext_s)
|
||||||
{
|
{
|
||||||
this->Error = "archive_write_data: ";
|
this->Error = "archive_write_data: ";
|
||||||
this->Error += archive_error_string(this->Archive);
|
this->Error += cm_archive_error_string(this->Archive);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
nleft -= nnext;
|
nleft -= nnext;
|
||||||
|
|
Loading…
Reference in New Issue