fix: make text updates and uploads safer
This commit is contained in:
@@ -509,13 +509,7 @@ func (s *Server) updatetext(w http.ResponseWriter, r *http.Request) {
|
|||||||
writeJSONError(w, http.StatusForbidden, "has no privilege")
|
writeJSONError(w, http.StatusForbidden, "has no privilege")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
f, e := s.Store.Create(p)
|
if e := copyFileToDestination(s.Store, strings.NewReader(r.FormValue("text")), p); e != nil {
|
||||||
if e != nil {
|
|
||||||
http.Error(w, e.Error(), 500)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
defer f.Close()
|
|
||||||
if _, e = io.WriteString(f, r.FormValue("text")); e != nil {
|
|
||||||
http.Error(w, e.Error(), 500)
|
http.Error(w, e.Error(), 500)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -569,10 +563,13 @@ func (s *Server) upload(w http.ResponseWriter, r *http.Request) {
|
|||||||
for _, h := range hs {
|
for _, h := range hs {
|
||||||
target := path.Join(dir, filepath.ToSlash(h.Filename))
|
target := path.Join(dir, filepath.ToSlash(h.Filename))
|
||||||
if e := savePart(s.Store, target, h); e != nil {
|
if e := savePart(s.Store, target, h); e != nil {
|
||||||
|
for _, previous := range saved {
|
||||||
|
_ = s.Store.Remove(previous)
|
||||||
|
}
|
||||||
http.Error(w, e.Error(), 500)
|
http.Error(w, e.Error(), 500)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
saved = append(saved, h.Filename)
|
saved = append(saved, target)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for _, name := range saved {
|
for _, name := range saved {
|
||||||
@@ -660,14 +657,19 @@ func (s *Server) upload2(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
var saved []string
|
||||||
for _, hs := range r.MultipartForm.File {
|
for _, hs := range r.MultipartForm.File {
|
||||||
for _, h := range hs {
|
for _, h := range hs {
|
||||||
name := strings.TrimPrefix(filepath.ToSlash(h.Filename), "/")
|
name := strings.TrimPrefix(filepath.ToSlash(h.Filename), "/")
|
||||||
target := path.Join(dir, name)
|
target := path.Join(dir, name)
|
||||||
if err := savePart(s.Store, target, h); err != nil {
|
if err := savePart(s.Store, target, h); err != nil {
|
||||||
|
for _, previous := range saved {
|
||||||
|
_ = s.Store.Remove(previous)
|
||||||
|
}
|
||||||
http.Error(w, err.Error(), 500)
|
http.Error(w, err.Error(), 500)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
saved = append(saved, target)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
writeCreated(w)
|
writeCreated(w)
|
||||||
|
|||||||
Reference in New Issue
Block a user