All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] data_smart: Fix inactive overide accidental variable value corruption
@ 2021-08-02 15:42 Richard Purdie
  2021-08-02 15:46 ` [bitbake-devel] " Konrad Weihmann
  2021-08-03  8:39 ` Peter Kjellerstedt
  0 siblings, 2 replies; 6+ messages in thread
From: Richard Purdie @ 2021-08-02 15:42 UTC (permalink / raw)
  To: bitbake-devel

Setting something like:

  BAR:append:unusedoverride

should cause BAR to be None, not "" which was what the datastore was
returning. This caused problems when mixing variables like:

  RDEPENDS:${PN}:inactiveoverride
  RDEPENDS:${BPN}

since key expansion would report key overlap when there was none. This
is a bug in the datastore. Fix it and add a test too.

[YOCTO #14088]

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
---
 lib/bb/data_smart.py | 8 ++++----
 lib/bb/tests/data.py | 5 +++++
 2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/lib/bb/data_smart.py b/lib/bb/data_smart.py
index 43e9e78555..65528c6ae6 100644
--- a/lib/bb/data_smart.py
+++ b/lib/bb/data_smart.py
@@ -750,8 +750,6 @@ class DataSmart(MutableMapping):
 
 
         if flag == "_content" and local_var is not None and ":append" in local_var and not parsing:
-            if not value:
-                value = ""
             self.need_overrides()
             for (r, o) in local_var[":append"]:
                 match = True
@@ -760,11 +758,11 @@ class DataSmart(MutableMapping):
                         if not o2 in self.overrides:
                             match = False                            
                 if match:
+                    if value is None:
+                        value = ""
                     value = value + r
 
         if flag == "_content" and local_var is not None and ":prepend" in local_var and not parsing:
-            if not value:
-                value = ""
             self.need_overrides()
             for (r, o) in local_var[":prepend"]:
 
@@ -774,6 +772,8 @@ class DataSmart(MutableMapping):
                         if not o2 in self.overrides:
                             match = False                            
                 if match:
+                    if value is None:
+                        value = ""
                     value = r + value
 
         parser = None
diff --git a/lib/bb/tests/data.py b/lib/bb/tests/data.py
index 7f1d3ffbbc..e667c7c7d3 100644
--- a/lib/bb/tests/data.py
+++ b/lib/bb/tests/data.py
@@ -405,6 +405,11 @@ class TestOverrides(unittest.TestCase):
         bb.data.expandKeys(self.d)
         self.assertEqual(self.d.getVar("VERSION"), "2")
 
+    def test_append_and_unused_override(self):
+        # Had a bug where an unused override append could return "" instead of None
+        self.d.setVar("BAR:append:unusedoverride", "testvalue2")
+        self.assertEqual(self.d.getVar("BAR"), None)
+
 class TestKeyExpansion(unittest.TestCase):
     def setUp(self):
         self.d = bb.data.init()
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2021-08-03  9:13 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-08-02 15:42 [PATCH] data_smart: Fix inactive overide accidental variable value corruption Richard Purdie
2021-08-02 15:46 ` [bitbake-devel] " Konrad Weihmann
2021-08-02 15:53   ` Richard Purdie
2021-08-02 15:55     ` Konrad Weihmann
2021-08-03  8:39 ` Peter Kjellerstedt
2021-08-03  9:13   ` Richard Purdie

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.