aboutsummaryrefslogtreecommitdiffstats
path: root/bpfix
diff options
context:
space:
mode:
authorSasha Smundak <asmundak@google.com>2019-03-08 15:43:26 -0800
committerSasha Smundak <asmundak@google.com>2019-03-11 10:11:17 -0700
commit177a1a589d97385324fe73ecc24dae0befde44b4 (patch)
treef4b9977f967cf512a70d578b4f3838622b181507 /bpfix
parentfdd1457fa683d5a7c21c471d5dc3294cdb29cf1e (diff)
downloadbuild_soong-177a1a589d97385324fe73ecc24dae0befde44b4.tar.gz
build_soong-177a1a589d97385324fe73ecc24dae0befde44b4.tar.bz2
build_soong-177a1a589d97385324fe73ecc24dae0befde44b4.zip
Fix crash in mergeListProperties
The value of a property to be merged may be a reference to a variable. When we first create an attribute for a makefile variable (e.g. we create 'android_static_libs' from LOCAL_STATIC_ANDROID_LIBRARIES), we set its type correctly. However, reparse in bpfix erases this information, so by the time 'android_static_libs' attribute is to be merged with 'static_libs', it has no type and merge occurs. It isn't easy to fix properly, so just don't merge in such case, Soong will complain and it will be fixed manually. Fixes: 125519127 Test: unit tests in androidmk_test.go Change-Id: Ic66d7ab686a2fdde987f32e2b204c72d9bf0d026
Diffstat (limited to 'bpfix')
-rw-r--r--bpfix/bpfix/bpfix.go8
1 files changed, 8 insertions, 0 deletions
diff --git a/bpfix/bpfix/bpfix.go b/bpfix/bpfix/bpfix.go
index ba6435e0..706c0ec2 100644
--- a/bpfix/bpfix/bpfix.go
+++ b/bpfix/bpfix/bpfix.go
@@ -786,6 +786,14 @@ func mergeMatchingProperties(properties *[]*parser.Property, buf []byte, patchli
}
func mergeProperties(a, b *parser.Property, buf []byte, patchlist *parser.PatchList) error {
+ // The value of one of the properties may be a variable reference with no type assigned
+ // Bail out in this case. Soong will notice duplicate entries and will tell to merge them.
+ if _, isVar := a.Value.(*parser.Variable); isVar {
+ return nil
+ }
+ if _, isVar := b.Value.(*parser.Variable); isVar {
+ return nil
+ }
if a.Value.Type() != b.Value.Type() {
return fmt.Errorf("type mismatch when merging properties %q: %s and %s", a.Name, a.Value.Type(), b.Value.Type())
}