Fix the permission setting in common.ZipWriteStr()
When passing a ZipInfo instance to common.ZipWriteStr(), the
external_attr attribute should not be overwritten unless specified.
We didn't have the issue previously because we were calling
ZipFile.writestr() directly until [1] merged.
[1] commit 2ed665a033c587b276b1615516e5354e2ace47cd.
Bug: http://b/21309935
Change-Id: I374ccd40c174ff9259844f38bdbf187dfe82552d
diff --git a/tools/releasetools/common.py b/tools/releasetools/common.py
index 8af1c17..682dc45 100644
--- a/tools/releasetools/common.py
+++ b/tools/releasetools/common.py
@@ -861,7 +861,7 @@
zipfile.ZIP64_LIMIT = saved_zip64_limit
-def ZipWriteStr(zip_file, zinfo_or_arcname, data, perms=0o644,
+def ZipWriteStr(zip_file, zinfo_or_arcname, data, perms=None,
compress_type=None):
"""Wrap zipfile.writestr() function to work around the zip64 limit.
@@ -880,6 +880,8 @@
if not isinstance(zinfo_or_arcname, zipfile.ZipInfo):
zinfo = zipfile.ZipInfo(filename=zinfo_or_arcname)
zinfo.compress_type = zip_file.compression
+ if perms is None:
+ perms = 0o644
else:
zinfo = zinfo_or_arcname
@@ -887,8 +889,11 @@
if compress_type is not None:
zinfo.compress_type = compress_type
+ # If perms is given, it has a priority.
+ if perms is not None:
+ zinfo.external_attr = perms << 16
+
# Use a fixed timestamp so the output is repeatable.
- zinfo.external_attr = perms << 16
zinfo.date_time = (2009, 1, 1, 0, 0, 0)
zip_file.writestr(zinfo, data)