From 115c66bd741c6caa7d3078615b81f5e7a5041c9b Mon Sep 17 00:00:00 2001 From: Yu Liu Date: Mon, 10 Feb 2014 19:20:36 -0800 Subject: [PATCH] A build property's value is returned empty in runtime when its length exceeds 92 symbols (91 valid symbols + \0). It is better to catch that issue on earlier stage, i.e. fail the build with an appropriate message. For developer's build, show warning message instead of failing the build (in the latter case, as developers do not usually care about build properties too much). Change-Id: I03ced7b486d43a71b1921e0a9c48b43aa30727c7 --- tools/post_process_props.py | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/tools/post_process_props.py b/tools/post_process_props.py index 9d69736064..32146e3215 100755 --- a/tools/post_process_props.py +++ b/tools/post_process_props.py @@ -19,7 +19,27 @@ import sys # Put the modifications that you need to make into the /system/build.prop into this # function. The prop object has get(name) and put(name,value) methods. def mangle_build_prop(prop): - pass + buildprops=prop.buildprops + check_pass=True + for key in buildprops: + # Check build properties' length. + # Terminator(\0) added into the provided value of properties + # Total length (including terminator) will be no greater that PROP_VALUE_MAX(92). + if len(buildprops[key]) > 91: + # If dev build, show a warning message, otherwise fail the build with error message + if prop.get("ro.build.version.incremental").startswith("eng"): + sys.stderr.write("warning: " + key + " exceeds 91 symbols: ") + sys.stderr.write(buildprops[key]) + sys.stderr.write("(" + str(len(buildprops[key])) + ") \n") + sys.stderr.write("warning: This will cause the " + key + " ") + sys.stderr.write("property return as empty at runtime\n") + else: + check_pass=False + sys.stderr.write("error: " + key + " cannot exceed 91 symbols: ") + sys.stderr.write(buildprops[key]) + sys.stderr.write("(" + str(len(buildprops[key])) + ") \n") + if not check_pass: + sys.exit(1) # Put the modifications that you need to make into the /system/build.prop into this # function. The prop object has get(name) and put(name,value) methods. @@ -40,8 +60,19 @@ def mangle_default_prop(prop): prop.put("persist.sys.usb.config", "none"); class PropFile: + + buildprops={} + def __init__(self, lines): self.lines = [s[:-1] for s in lines] + for line in self.lines: + line=line.strip() + if not line.strip() or line.startswith("#"): + continue + index=line.find("=") + key=line[0:index] + value=line[index+1:] + self.buildprops[key]=value def get(self, name): key = name + "="