Check that git patches only touch files under root

This commit is contained in:
Brendan Cully 2008-06-25 14:13:20 -07:00
parent 8e1dce7068
commit f5b1d49e0d
3 changed files with 19 additions and 1 deletions

View File

@ -1039,9 +1039,12 @@ def applydiff(ui, fp, changed, strip=1, sourcefile=None, reverse=False,
continue
elif state == 'git':
gitpatches = values
cwd = os.getcwd()
for gp in gitpatches:
if gp.op in ('COPY', 'RENAME'):
copyfile(gp.oldpath, gp.path)
src, dst = [util.canonpath(cwd, cwd, x)
for x in [gp.oldpath, gp.path]]
copyfile(src, dst)
changed[gp.path] = (gp.op, gp)
else:
raise util.Abort(_('unsupported parser state: %s') % state)

View File

@ -261,3 +261,15 @@ EOF
hg status
cat a
cd ..
echo % 'test paths outside repo root'
mkdir outside
touch outside/foo
hg init inside
cd inside
hg import - <<EOF
diff --git a/a b/b
rename from ../outside/foo
rename to bar
EOF
cd ..

View File

@ -260,3 +260,6 @@ a
adding a
applying patch from stdin
bb
% test paths outside repo root
applying patch from stdin
abort: ../outside/foo not under root