]> Sergey Matveev's repositories - paster.git/commitdiff
Fix possible empty buf
authorSergey Matveev <stargrave@stargrave.org>
Tue, 15 Feb 2022 08:32:09 +0000 (11:32 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Wed, 16 Feb 2022 12:46:50 +0000 (15:46 +0300)
Read call can return data at bencode-key boundaries, so buf buffer will
be empty and buf[:1] won't work.

main.go

diff --git a/main.go b/main.go
index 89bcc6eabdb6010ae235c37b162fb06aae213f65..20ffd34744918ff0b9087502769363549b5e2b35 100644 (file)
--- 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' {