diff options
Diffstat (limited to 'bitbake/lib/bb')
| -rw-r--r-- | bitbake/lib/bb/fetch2/__init__.py | 8 | ||||
| -rw-r--r-- | bitbake/lib/bb/tests/fetch.py | 9 |
2 files changed, 16 insertions, 1 deletions
diff --git a/bitbake/lib/bb/fetch2/__init__.py b/bitbake/lib/bb/fetch2/__init__.py index 06f1eb4e81..cd7362c44a 100644 --- a/bitbake/lib/bb/fetch2/__init__.py +++ b/bitbake/lib/bb/fetch2/__init__.py | |||
| @@ -1420,7 +1420,13 @@ class FetchMethod(object): | |||
| 1420 | 1420 | ||
| 1421 | # If 'subdir' param exists, create a dir and use it as destination for unpack cmd | 1421 | # If 'subdir' param exists, create a dir and use it as destination for unpack cmd |
| 1422 | if 'subdir' in urldata.parm: | 1422 | if 'subdir' in urldata.parm: |
| 1423 | unpackdir = '%s/%s' % (rootdir, urldata.parm.get('subdir')) | 1423 | subdir = urldata.parm.get('subdir') |
| 1424 | if os.path.isabs(subdir): | ||
| 1425 | if not os.path.realpath(subdir).startswith(os.path.realpath(rootdir)): | ||
| 1426 | raise UnpackError("subdir argument isn't a subdirectory of unpack root %s" % rootdir, urldata.url) | ||
| 1427 | unpackdir = subdir | ||
| 1428 | else: | ||
| 1429 | unpackdir = os.path.join(rootdir, subdir) | ||
| 1424 | bb.utils.mkdirhier(unpackdir) | 1430 | bb.utils.mkdirhier(unpackdir) |
| 1425 | else: | 1431 | else: |
| 1426 | unpackdir = rootdir | 1432 | unpackdir = rootdir |
diff --git a/bitbake/lib/bb/tests/fetch.py b/bitbake/lib/bb/tests/fetch.py index d7c73dda02..0fd2c02163 100644 --- a/bitbake/lib/bb/tests/fetch.py +++ b/bitbake/lib/bb/tests/fetch.py | |||
| @@ -508,6 +508,15 @@ class FetcherLocalTest(FetcherTest): | |||
| 508 | tree = self.fetchUnpack(['file://dir/subdir/e;subdir=bar']) | 508 | tree = self.fetchUnpack(['file://dir/subdir/e;subdir=bar']) |
| 509 | self.assertEqual(tree, ['bar/dir/subdir/e']) | 509 | self.assertEqual(tree, ['bar/dir/subdir/e']) |
| 510 | 510 | ||
| 511 | def test_local_absolutedir(self): | ||
| 512 | # Unpacking to an absolute path that is a subdirectory of the root | ||
| 513 | # should work | ||
| 514 | tree = self.fetchUnpack(['file://a;subdir=%s' % os.path.join(self.unpackdir, 'bar')]) | ||
| 515 | |||
| 516 | # Unpacking to an absolute path outside of the root should fail | ||
| 517 | with self.assertRaises(bb.fetch2.UnpackError): | ||
| 518 | self.fetchUnpack(['file://a;subdir=/bin/sh']) | ||
| 519 | |||
| 511 | class FetcherNetworkTest(FetcherTest): | 520 | class FetcherNetworkTest(FetcherTest): |
| 512 | 521 | ||
| 513 | if os.environ.get("BB_SKIP_NETTESTS") == "yes": | 522 | if os.environ.get("BB_SKIP_NETTESTS") == "yes": |
