Changeset 4 in code for trunk


Ignore:
Timestamp:
Oct 11, 2021, 3:12:39 PM (4 years ago)
Author:
dev
Message:

Prevent writing more data than expected

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/partage.go

    r3 r4  
    3333}
    3434
    35 func writefile(f *os.File, s io.ReadCloser) int {
     35func writefile(f *os.File, s io.ReadCloser) int64 {
    3636        buffer := make([]byte, 4096)
     37        eof := false
     38        sz := int64(0)
    3739
    38         var sz int
     40        defer f.Sync()
    3941
    40         for {
     42        for !eof {
    4143                n, err := s.Read(buffer)
    42 
    43                 if err == io.EOF {
    44                         n, err := f.Write(buffer[:n])
    45                         if err != nil {
    46                                 fmt.Println(err)
    47                         }
    48                         sz += n
    49                         break
    50                 }
    51                 if err != nil {
     44                if err != nil && err != io.EOF {
    5245                        fmt.Println(err)
    5346                        return -1
     47                } else if err == io.EOF {
     48                        eof = true
    5449                }
    5550
    56                 n, err = f.Write(buffer[:n])
     51                /* ensure we don't write more than expected */
     52                r := int64(n)
     53                if sz+r > conf.maxsize {
     54                        r = conf.maxsize - sz
     55                        eof = true
     56                }
     57
     58                _, err = f.Write(buffer[:r])
    5759                if err != nil {
    5860                        fmt.Println(err)
    5961                }
    60                 sz += n
     62                sz += r
    6163        }
    6264
    63         f.Sync()
    6465        return sz
    6566}
     
    133134                        filename = "/index.html"
    134135                }
    135                
     136
    136137                f, err := os.Open(conf.rootdir + filename)
    137138                if err != nil {
Note: See TracChangeset for help on using the changeset viewer.