mirror of
https://codeberg.org/git-pages/git-pages.git
synced 2026-06-10 13:30:49 +00:00
Correctly handle PATCH requests that overwrite the root node.
This commit is contained in:
+20
-1
@@ -74,7 +74,26 @@ func ApplyTarPatch(manifest *Manifest, reader io.Reader, parents CreateParentsMo
|
||||
return err
|
||||
}
|
||||
|
||||
segments := strings.Split(normalizeArchiveMemberName(header.Name), "/")
|
||||
memberName := normalizeArchiveMemberName(header.Name)
|
||||
// This is a special case: while member name "a" refers to a child node of the root
|
||||
// node, the member name "" refers to the root node itself, which violates assumptions
|
||||
// of the generic code afterwards.
|
||||
if memberName == "" {
|
||||
switch header.Typeflag {
|
||||
case tar.TypeDir:
|
||||
root = &Node{
|
||||
entry: NewManifestEntry(Type_Directory, nil),
|
||||
children: map[string]*Node{},
|
||||
}
|
||||
continue
|
||||
default:
|
||||
AddProblem(manifest, header.Name,
|
||||
"tar: unsupported type '%c' for root node", header.Typeflag)
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
segments := strings.Split(memberName, "/")
|
||||
fileName := segments[len(segments)-1]
|
||||
node := root
|
||||
for index, segment := range segments[:len(segments)-1] {
|
||||
|
||||
Reference in New Issue
Block a user