summaryrefslogtreecommitdiff
path: root/git/objects/submodule/base.py
diff options
context:
space:
mode:
Diffstat (limited to 'git/objects/submodule/base.py')
-rw-r--r--git/objects/submodule/base.py11
1 files changed, 11 insertions, 0 deletions
diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py
index ae45e3db..92b0c8e8 100644
--- a/git/objects/submodule/base.py
+++ b/git/objects/submodule/base.py
@@ -238,6 +238,17 @@ class Submodule(util.IndexObject, Iterable, Traversable):
path = path[:-1]
# END handle trailing slash
+ if os.path.isabs(path):
+ working_tree_linux = to_native_path_linux(repo.working_tree_dir)
+ if not path.startswith(working_tree_linux):
+ raise ValueError("Submodule checkout path '%s' needs to be within the parents repository at '%s'"
+ % (working_tree_linux, path))
+ path = path[len(working_tree_linux) + 1:]
+ if not path:
+ raise ValueError("Absolute submodule path '%s' didn't yield a valid relative path" % path)
+ # end verify converted relative path makes sense
+ # end convert to a relative path
+
# assure we never put backslashes into the url, as some operating systems
# like it ...
if url is not None: