summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Eggleton <paul.eggleton@linux.intel.com>2016-12-22 08:35:43 +1300
committerPaul Eggleton <paul.eggleton@linux.intel.com>2016-12-22 15:16:40 +1300
commit367afd4ed8b09d73dee981a214fb3ecdfc7e3ea1 (patch)
tree732ad16e4a3bb1436d0876363393540158c8231e
parentf146f38cc63cc6a9d8bfb642bc955797d26338eb (diff)
downloadopenembedded-core-contrib-367afd4ed8b09d73dee981a214fb3ecdfc7e3ea1.tar.gz
openembedded-core-contrib-367afd4ed8b09d73dee981a214fb3ecdfc7e3ea1.tar.bz2
openembedded-core-contrib-367afd4ed8b09d73dee981a214fb3ecdfc7e3ea1.zip
classes/sstate: handle filenames containing square brackets
If a recipe installs a file or directory whose name contains square brackets [ ] that form a valid glob expression and that file then they won't be correctly removed from the sysroot, because we pass each path in the sstate manifest to our oe.path.remove() function which calls glob.glob() on the path passed into it and the expression won't actually match the original filename. Since we don't expect to put any wildcarded expressions in the sstate manifests, and we already have a try...except around this, we can actually use os.remove() here instead. Similarly, when we pass existing file paths to "grep" looking through the manifests, we don't want those paths to be treated as regexes - so use grep's -F command line switch. Fixes [YOCTO #10836]. Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
-rw-r--r--meta/classes/sstate.bbclass4
1 files changed, 2 insertions, 2 deletions
diff --git a/meta/classes/sstate.bbclass b/meta/classes/sstate.bbclass
index a7cd9ec112..755bf590c4 100644
--- a/meta/classes/sstate.bbclass
+++ b/meta/classes/sstate.bbclass
@@ -213,7 +213,7 @@ def sstate_install(ss, d):
break
if realmatch:
match.append(f)
- sstate_search_cmd = "grep -rl '%s' %s --exclude=master.list | sed -e 's:^.*/::' -e 's:\.populate-sysroot::'" % (f, d.expand("${SSTATE_MANIFESTS}"))
+ sstate_search_cmd = "grep -rlF '%s' %s --exclude=master.list | sed -e 's:^.*/::' -e 's:\.populate-sysroot::'" % (f, d.expand("${SSTATE_MANIFESTS}"))
search_output = subprocess.Popen(sstate_search_cmd, shell=True, stdout=subprocess.PIPE).communicate()[0]
if search_output != "":
match.append("Matched in %s" % search_output.rstrip())
@@ -406,7 +406,7 @@ def sstate_clean_manifest(manifest, d):
elif os.path.exists(entry) and len(os.listdir(entry)) == 0:
os.rmdir(entry[:-1])
else:
- oe.path.remove(entry)
+ os.remove(entry)
except OSError:
pass