diff --git a/include/ziparchive/zip_archive.h b/include/ziparchive/zip_archive.h index 7dc60aed2..4f68c3b36 100644 --- a/include/ziparchive/zip_archive.h +++ b/include/ziparchive/zip_archive.h @@ -43,8 +43,7 @@ struct ZipString { /* * entry_name has to be an c-style string with only ASCII characters. */ - explicit ZipString(const char* entry_name) - : name(reinterpret_cast(entry_name)), name_length(strlen(entry_name)) {} + explicit ZipString(const char* entry_name); bool operator==(const ZipString& rhs) const { return name && (name_length == rhs.name_length) && diff --git a/libziparchive/zip_archive.cc b/libziparchive/zip_archive.cc index 350be3157..4649a75b2 100644 --- a/libziparchive/zip_archive.cc +++ b/libziparchive/zip_archive.cc @@ -31,6 +31,7 @@ #include #include "android-base/file.h" +#include "android-base/logging.h" #include "android-base/macros.h" // TEMP_FAILURE_RETRY may or may not be in unistd #include "android-base/memory.h" #include "log/log.h" @@ -1073,3 +1074,10 @@ const char* ErrorCodeString(int32_t error_code) { int GetFileDescriptor(const ZipArchiveHandle handle) { return reinterpret_cast(handle)->fd; } + +ZipString::ZipString(const char* entry_name) + : name(reinterpret_cast(entry_name)) { + size_t len = strlen(entry_name); + CHECK_LE(len, static_cast(UINT16_MAX)); + name_length = static_cast(len); +} diff --git a/libziparchive/zip_writer.cc b/libziparchive/zip_writer.cc index 1ebed30b1..b72ed7f0f 100644 --- a/libziparchive/zip_writer.cc +++ b/libziparchive/zip_writer.cc @@ -243,8 +243,12 @@ int32_t ZipWriter::PrepareDeflate() { // Initialize the z_stream for compression. z_stream_ = std::unique_ptr(new z_stream(), DeleteZStream); +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wold-style-cast" int zerr = deflateInit2(z_stream_.get(), Z_BEST_COMPRESSION, Z_DEFLATED, -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY); +#pragma GCC diagnostic pop + if (zerr != Z_OK) { if (zerr == Z_VERSION_ERROR) { ALOGE("Installed zlib is not compatible with linked version (%s)", ZLIB_VERSION);