]> Cypherpunks.ru repositories - nncp.git/commitdiff
Sizes should be forcefully 64-bit numbers
authorSergey Matveev <stargrave@stargrave.org>
Sat, 10 Jul 2021 09:51:55 +0000 (12:51 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Sat, 10 Jul 2021 13:28:44 +0000 (16:28 +0300)
doc/news.ru.texi
doc/news.texi
src/mth.go
src/pkt.go

index a3f6c401bf9d45f9b15d6324548831556a32c788..97f46e0dd37d287360e5192a42584defdb3f5c1e 100644 (file)
@@ -57,6 +57,9 @@
 @subsection Релиз 7.3.0
 @itemize
 
+@item
+Поправлены проблемы работоспособности на 32-бит системах с большими файлами.
+
 @item
 Возможность использовать конфигурацию в виде директории с набором
 файлов. Появилась команда @command{nncp-cfgdir}.
index 3375cd45745422e961a08961dd176dc4aee83dc2..20ff3d6f0c71578d3239fe7d4d770c678ada23b4 100644 (file)
@@ -59,6 +59,9 @@ See also this page @ref{Новости, on russian}.
 @section Release 7.3.0
 @itemize
 
+@item
+Fixed some workability problems on 32-bit systems with big files.
+
 @item
 Ability to use directory with a bunch of files as a configuration.
 @command{nncp-cfgdir} command appeared.
index a766925cee3b6e9b3db90a679486bc97d5fc3103..d6e3082e3f6ee11beac1d2eea0226fc5b7e468e9 100644 (file)
@@ -46,14 +46,14 @@ const (
 
 type MTHEvent struct {
        Type  MTHEventType
-       Level int
-       Ctr   int
+       Level int64
+       Ctr   int64
        Hsh   []byte
 }
 
 type MTH interface {
        hash.Hash
-       PrependFrom(r io.Reader) (int, error)
+       PrependFrom(r io.Reader) (int64, error)
        SetPktName(n string)
        PrependSize() int64
        Events() chan MTHEvent
@@ -80,14 +80,14 @@ func MTHFatNew(size, offset int64) MTH {
        if size == 0 {
                return &mth
        }
-       prepends := int(offset / MTHBlockSize)
-       skip := MTHBlockSize - (offset - int64(prepends)*MTHBlockSize)
+       prepends := offset / MTHBlockSize
+       skip := MTHBlockSize - (offset - prepends*MTHBlockSize)
        if skip == MTHBlockSize {
                skip = 0
        } else if skip > 0 {
                prepends++
        }
-       prependSize := int64(prepends * MTHBlockSize)
+       prependSize := prepends * MTHBlockSize
        if prependSize > size {
                prependSize = size
        }
@@ -139,7 +139,7 @@ func (mth *MTHFat) Write(data []byte) (int, error) {
                if mth.events != nil {
                        mth.events <- MTHEvent{
                                MTHEventAppend,
-                               0, len(mth.hashes) - 1,
+                               0, int64(len(mth.hashes) - 1),
                                mth.hashes[len(mth.hashes)-1][:],
                        }
                }
@@ -147,18 +147,19 @@ func (mth *MTHFat) Write(data []byte) (int, error) {
        return n, err
 }
 
-func (mth *MTHFat) PrependFrom(r io.Reader) (int, error) {
+func (mth *MTHFat) PrependFrom(r io.Reader) (int64, error) {
        if mth.finished {
                return 0, errors.New("already Sum()ed")
        }
        var err error
        buf := make([]byte, MTHBlockSize)
-       var i, n, read int
+       var n int
+       var i, read int64
        fullsize := mth.prependSize
        les := LEs{{"Pkt", mth.pktName}, {"FullSize", fullsize}, {"Size", 0}}
        for mth.prependSize >= MTHBlockSize {
                n, err = io.ReadFull(r, buf)
-               read += n
+               read += int64(n)
                mth.prependSize -= MTHBlockSize
                if err != nil {
                        return read, err
@@ -172,14 +173,14 @@ func (mth *MTHFat) PrependFrom(r io.Reader) (int, error) {
                        mth.events <- MTHEvent{MTHEventPrepend, 0, i, mth.hashes[i][:]}
                }
                if mth.pktName != "" {
-                       les[len(les)-1].V = int64(read)
+                       les[len(les)-1].V = read
                        Progress("check", les)
                }
                i++
        }
        if mth.prependSize > 0 {
                n, err = io.ReadFull(r, buf[:mth.prependSize])
-               read += n
+               read += int64(n)
                if err != nil {
                        return read, err
                }
@@ -215,7 +216,7 @@ func (mth *MTHFat) Sum(b []byte) []byte {
                if mth.events != nil {
                        mth.events <- MTHEvent{
                                MTHEventAppend,
-                               0, len(mth.hashes) - 1,
+                               0, int64(len(mth.hashes) - 1),
                                mth.hashes[len(mth.hashes)-1][:],
                        }
                }
@@ -240,7 +241,7 @@ func (mth *MTHFat) Sum(b []byte) []byte {
                }
        }
        mth.hasher = blake3.New(MTHSize, MTHNodeKey[:])
-       level := 1
+       level := int64(1)
        for len(mth.hashes) != 1 {
                hashesUp := make([][MTHSize]byte, 0, 1+len(mth.hashes)/2)
                pairs := (len(mth.hashes) / 2) * 2
@@ -258,7 +259,7 @@ func (mth *MTHFat) Sum(b []byte) []byte {
                        if mth.events != nil {
                                mth.events <- MTHEvent{
                                        MTHEventFold,
-                                       level, len(hashesUp) - 1,
+                                       level, int64(len(hashesUp) - 1),
                                        hashesUp[len(hashesUp)-1][:],
                                }
                        }
@@ -268,7 +269,7 @@ func (mth *MTHFat) Sum(b []byte) []byte {
                        if mth.events != nil {
                                mth.events <- MTHEvent{
                                        MTHEventAppend,
-                                       level, len(hashesUp) - 1,
+                                       level, int64(len(hashesUp) - 1),
                                        hashesUp[len(hashesUp)-1][:],
                                }
                        }
@@ -284,7 +285,7 @@ func (mth *MTHFat) Sum(b []byte) []byte {
 }
 
 type MTHSeqEnt struct {
-       l int
+       l int64
        h [MTHSize]byte
 }
 
@@ -294,7 +295,7 @@ type MTHSeq struct {
        hashes     []MTHSeqEnt
        buf        *bytes.Buffer
        events     chan MTHEvent
-       ctrs       []int
+       ctrs       []int64
        finished   bool
 }
 
@@ -303,7 +304,7 @@ func MTHSeqNew() *MTHSeq {
                hasherLeaf: blake3.New(MTHSize, MTHLeafKey[:]),
                hasherNode: blake3.New(MTHSize, MTHNodeKey[:]),
                buf:        bytes.NewBuffer(make([]byte, 0, 2*MTHBlockSize)),
-               ctrs:       make([]int, 1, 2),
+               ctrs:       make([]int64, 1, 2),
        }
        return &mth
 }
@@ -314,7 +315,7 @@ func (mth *MTHSeq) Size() int { return MTHSize }
 
 func (mth *MTHSeq) BlockSize() int { return MTHBlockSize }
 
-func (mth *MTHSeq) PrependFrom(r io.Reader) (int, error) {
+func (mth *MTHSeq) PrependFrom(r io.Reader) (int64, error) {
        panic("must not reach that code")
 }
 
@@ -341,8 +342,8 @@ func (mth *MTHSeq) leafAdd() {
        mth.ctrs[0]++
 }
 
-func (mth *MTHSeq) incr(l int) {
-       if len(mth.ctrs) <= l {
+func (mth *MTHSeq) incr(l int64) {
+       if int64(len(mth.ctrs)) <= l {
                mth.ctrs = append(mth.ctrs, 0)
        } else {
                mth.ctrs[l]++
index bd3fb23e0669f0699ad5e599bee1e38eb56bbac3..aa3025d988b40cc73e41436a84deb36a7a3337c3 100644 (file)
@@ -141,13 +141,13 @@ func aeadProcess(
        doEncrypt bool,
        r io.Reader,
        w io.Writer,
-) (int, error) {
+) (int64, error) {
        ciphCtr := nonce[len(nonce)-8:]
        buf := make([]byte, EncBlkSize+aead.Overhead())
        var toRead []byte
        var toWrite []byte
        var n int
-       var readBytes int
+       var readBytes int64
        var err error
        if doEncrypt {
                toRead = buf[:EncBlkSize]
@@ -161,10 +161,10 @@ func aeadProcess(
                                break
                        }
                        if err != io.ErrUnexpectedEOF {
-                               return readBytes + n, err
+                               return readBytes + int64(n), err
                        }
                }
-               readBytes += n
+               readBytes += int64(n)
                ctrIncr(ciphCtr)
                if doEncrypt {
                        toWrite = aead.Seal(buf[:0], nonce, buf[:n], ad)
@@ -247,9 +247,9 @@ func PktEncWrite(
        }
        nonce := make([]byte, aead.NonceSize())
 
-       fullSize := pktBuf.Len() + int(size)
+       fullSize := int64(pktBuf.Len()) + size
        sizeBuf := make([]byte, 8+aead.Overhead())
-       binary.BigEndian.PutUint64(sizeBuf, uint64(sizeWithTags(int64(fullSize))))
+       binary.BigEndian.PutUint64(sizeBuf, uint64(sizeWithTags(fullSize)))
        if _, err = out.Write(aead.Seal(sizeBuf[:0], nonce, sizeBuf[:8], ad[:])); err != nil {
                return nil, err
        }
@@ -372,10 +372,10 @@ func PktEncRead(
        lr := io.LimitedReader{R: data, N: size}
        written, err := aeadProcess(aead, nonce, ad[:], false, &lr, out)
        if err != nil {
-               return sharedKey[:], their, int64(written), err
+               return sharedKey[:], their, written, err
        }
-       if written != int(size) {
-               return sharedKey[:], their, int64(written), io.ErrUnexpectedEOF
+       if written != size {
+               return sharedKey[:], their, written, io.ErrUnexpectedEOF
        }
        return sharedKey[:], their, size, nil
 }