Merge "Add a build-time flag for DICE Changes in AVF" into main
diff --git a/core/release_config.bzl b/core/release_config.bzl
index 805106f..a2f59e6 100644
--- a/core/release_config.bzl
+++ b/core/release_config.bzl
@@ -12,6 +12,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+load("//build/bazel/utils:schema_validation.bzl", "validate")
+
# Partitions that get build system flag summaries
_flag_partitions = [
"product",
@@ -28,6 +30,48 @@
_valid_types = ["NoneType", "bool", "list", "string", "int"]
+_all_flags_schema = {
+ "type": "list",
+ "of": {
+ "type": "dict",
+ "required_keys": {
+ "name": {"type": "string"},
+ "partitions": {
+ "type": "list",
+ "of": {
+ "type": "string",
+ "choices": _flag_partitions + ["all"],
+ },
+ "unique": True,
+ },
+ "default": {
+ "or": [
+ {"type": t}
+ for t in _valid_types
+ ],
+ },
+ "declared_in": {"type": "string"},
+ },
+ },
+}
+
+_all_values_schema = {
+ "type": "list",
+ "of": {
+ "type": "dict",
+ "required_keys": {
+ "name": {"type": "string"},
+ "value": {
+ "or": [
+ {"type": t}
+ for t in _valid_types
+ ],
+ },
+ "set_in": {"type": "string"},
+ },
+ },
+}
+
def flag(name, partitions, default):
"Declare a flag."
if not partitions:
@@ -69,6 +113,8 @@
def release_config(all_flags, all_values):
"Return the make variables that should be set for this release config."
+ validate(all_flags, _all_flags_schema)
+ validate(all_values, _all_values_schema)
# Validate flags
flag_names = []
@@ -82,6 +128,8 @@
for flag in all_flags:
for partition in flag["partitions"]:
if partition == "all":
+ if len(flag["partitions"]) > 1:
+ fail("\"all\" can't be combined with other partitions: " + str(flag["partitions"]))
for partition in _flag_partitions:
partitions.setdefault(partition, []).append(flag["name"])
else:
@@ -105,8 +153,6 @@
if flag["name"] in values:
val = values[flag["name"]]["value"]
set_in = values[flag["name"]]["set_in"]
- if type(val) not in _valid_types:
- fail("Invalid type of value for flag \"" + flag["name"] + "\" (" + type(val) + ")")
else:
val = flag["default"]
set_in = flag["declared_in"]
diff --git a/tools/zipalign/ZipEntry.cpp b/tools/zipalign/ZipEntry.cpp
index dd2eac6..0355e56 100644
--- a/tools/zipalign/ZipEntry.cpp
+++ b/tools/zipalign/ZipEntry.cpp
@@ -363,13 +363,22 @@
struct tm tmResult;
struct tm* ptm = localtime_r(&even, &tmResult);
- int year;
- year = ptm->tm_year;
- if (year < 80)
- year = 80;
+ // The earliest valid time for ZIP file entries is 1980-01-01. See:
+ // https://users.cs.jmu.edu/buchhofp/forensics/formats/pkzip.html.
+ // Set any time before 1980 to 1980-01-01.
+ if (ptm->tm_year < 80) {
+ ptm->tm_year = 80;
+ ptm->tm_mon = 0;
+ ptm->tm_mday = 1;
+ ptm->tm_hour = 0;
+ ptm->tm_min = 0;
+ ptm->tm_sec = 0;
+ }
- uint16_t zdate = (year - 80) << 9 | (ptm->tm_mon+1) << 5 | ptm->tm_mday;
- uint16_t ztime = ptm->tm_hour << 11 | ptm->tm_min << 5 | ptm->tm_sec >> 1;
+ uint16_t zdate = static_cast<uint16_t>(
+ (ptm->tm_year - 80) << 9 | (ptm->tm_mon + 1) << 5 | ptm->tm_mday);
+ uint16_t ztime = static_cast<uint16_t>(
+ ptm->tm_hour << 11 | ptm->tm_min << 5 | ptm->tm_sec >> 1);
mCDE.mLastModFileTime = mLFH.mLastModFileTime = ztime;
mCDE.mLastModFileDate = mLFH.mLastModFileDate = zdate;