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:
35
partage.go
35
partage.go
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user