platform_system_core/libziparchive/Android.bp
Nick Kralevich 30dec070dd libziparchive: add integer checks
The code in libziparchive has lots of questionable looking but not
obviously wrong integer operations. In order to shake out integer bugs
in libziparchive (for example, commit
1ee4892e66 from bug 31251826) and provide
protection against security bugs, enable some integer sanitization
options in libziparchive.

Bug: 122975762
Bug: https://bugs.chromium.org/p/chromium/issues/detail?id=941802
Test: device boots and no obvious problems.
Change-Id: I215d81892a6eff12d692648c69a03e8200b334d7
2019-03-20 13:04:02 -07:00

179 lines
3.9 KiB
Text

//
// Copyright (C) 2013 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
cc_defaults {
name: "libziparchive_flags",
cflags: [
// ZLIB_CONST turns on const for input buffers, which is pretty standard.
"-DZLIB_CONST",
"-Werror",
"-Wall",
"-D_FILE_OFFSET_BITS=64",
],
cppflags: [
// Incorrectly warns when C++11 empty brace {} initializer is used.
// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61489
"-Wno-missing-field-initializers",
],
// Enable -Wold-style-cast only for non-Windows targets. _islower_l,
// _isupper_l etc. in MinGW locale_win32.h (included from
// libcxx/include/__locale) has an old-style-cast.
target: {
not_windows: {
cppflags: [
"-Wold-style-cast",
],
},
},
sanitize: {
misc_undefined: [
"signed-integer-overflow",
"unsigned-integer-overflow",
"shift",
"integer-divide-by-zero",
"implicit-signed-integer-truncation",
// TODO: Fix crash when we enable this option
// "implicit-unsigned-integer-truncation",
// TODO: not tested yet.
// "implicit-integer-sign-change",
],
},
}
cc_defaults {
name: "libziparchive_defaults",
srcs: [
"zip_archive.cc",
"zip_archive_stream_entry.cc",
"zip_writer.cc",
],
target: {
windows: {
cflags: ["-mno-ms-bitfields"],
enabled: true,
},
},
shared_libs: [
"libbase",
"liblog",
],
export_include_dirs: ["include"],
}
cc_library {
name: "libziparchive",
host_supported: true,
vendor_available: true,
recovery_available: true,
vndk: {
enabled: true,
},
double_loadable: true,
export_shared_lib_headers: ["libbase"],
defaults: [
"libziparchive_defaults",
"libziparchive_flags",
],
shared_libs: [
"liblog",
"libbase",
"libz",
],
target: {
linux_bionic: {
enabled: true,
},
},
}
// Tests.
cc_test {
name: "ziparchive-tests",
host_supported: true,
defaults: ["libziparchive_flags"],
data: [
"testdata/**/*",
],
srcs: [
"entry_name_utils_test.cc",
"zip_archive_test.cc",
"zip_writer_test.cc",
],
shared_libs: [
"libbase",
"liblog",
],
static_libs: [
"libziparchive",
"libz",
"libutils",
],
target: {
host: {
cppflags: ["-Wno-unnamed-type-template-args"],
},
windows: {
enabled: true,
},
},
test_suites: ["device-tests"],
}
// Performance benchmarks.
cc_benchmark {
name: "ziparchive-benchmarks",
defaults: ["libziparchive_flags"],
srcs: [
"zip_archive_benchmark.cpp",
],
shared_libs: [
"libbase",
"liblog",
],
static_libs: [
"libziparchive",
"libz",
"libutils",
],
target: {
host: {
cppflags: ["-Wno-unnamed-type-template-args"],
},
},
}
cc_binary {
name: "unzip",
defaults: ["libziparchive_flags"],
srcs: ["unzip.cpp"],
shared_libs: [
"libbase",
"libziparchive",
],
recovery_available: true,
}