Prevent writing more data than expected

git-svn-id: file:///srv/svn/repo/marisa/trunk@4 d6811dac-2434-b64a-9ddc-f563ab233461
This commit is contained in:
dev
2021-10-11 15:12:39 +00:00
parent ee2df42601
commit 0333648e17

View File

@@ -32,35 +32,36 @@ func contenttype(f *os.File) string {
return mime return mime
} }
func writefile(f *os.File, s io.ReadCloser) int { func writefile(f *os.File, s io.ReadCloser) int64 {
buffer := make([]byte, 4096) buffer := make([]byte, 4096)
eof := false
sz := int64(0)
var sz int defer f.Sync()
for { for !eof {
n, err := s.Read(buffer) n, err := s.Read(buffer)
if err != nil && err != io.EOF {
if err == io.EOF {
n, err := f.Write(buffer[:n])
if err != nil {
fmt.Println(err)
}
sz += n
break
}
if err != nil {
fmt.Println(err) fmt.Println(err)
return -1 return -1
} else if err == io.EOF {
eof = true
} }
n, err = f.Write(buffer[:n]) /* ensure we don't write more than expected */
r := int64(n)
if sz+r > conf.maxsize {
r = conf.maxsize - sz
eof = true
}
_, err = f.Write(buffer[:r])
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
} }
sz += n sz += r
} }
f.Sync()
return sz return sz
} }
@@ -132,7 +133,7 @@ func parse(w http.ResponseWriter, r *http.Request) {
if r.URL.Path == "/" { if r.URL.Path == "/" {
filename = "/index.html" filename = "/index.html"
} }
f, err := os.Open(conf.rootdir + filename) f, err := os.Open(conf.rootdir + filename)
if err != nil { if err != nil {
w.WriteHeader(http.StatusNotFound) w.WriteHeader(http.StatusNotFound)