From: Sergey Matveev Date: Tue, 15 Feb 2022 08:32:09 +0000 (+0300) Subject: Fix possible empty buf X-Git-Tag: v2.0.0~6 X-Git-Url: http://www.git.stargrave.org/?p=paster.git;a=commitdiff_plain;h=2f570cf81328c9b63d4071d1b8ce3cc7e045e9f3 Fix possible empty buf Read call can return data at bencode-key boundaries, so buf buffer will be empty and buf[:1] won't work. --- diff --git a/main.go b/main.go index 89bcc6e..20ffd34 100644 --- a/main.go +++ b/main.go @@ -142,8 +142,7 @@ AnotherKey: if _, err = io.ReadFull(rand.Reader, rnd); err != nil { fatal(err.Error()) } - fn = "." + base32.StdEncoding.WithPadding(base32.NoPadding).EncodeToString(rnd) + - ext + fn = "." + base32.StdEncoding.WithPadding(base32.NoPadding).EncodeToString(rnd) + ext fd, err := os.OpenFile(fn, os.O_RDWR|os.O_CREATE|os.O_EXCL, os.FileMode(0666)) if err != nil { fatal(err.Error()) @@ -155,10 +154,15 @@ AnotherKey: if _, err = io.CopyN(mw, mr, int64(size-1)); err != nil { goto Failed } - if _, err = mr.Read(buf[:1]); err != nil { + if len(buf) == 0 { + buf = append(buf, 0) + } else { + buf = buf[:1] + } + if _, err = mr.Read(buf); err != nil { goto Failed } - if _, err = mw.Write(buf[:1]); err != nil { + if _, err = mw.Write(buf); err != nil { goto Failed } if (ext == ".txt" || ext == ".url") && buf[0] != '\n' { @@ -166,7 +170,7 @@ AnotherKey: goto Failed } } - if _, err = mr.Read(buf[:1]); err != nil { + if _, err = mr.Read(buf); err != nil { goto Failed } if buf[0] != 'e' {