]> git.saurik.com Git - apt.git/commitdiff
CopyFile: fix BufSize to a sane value
authorPino Toscano <pino@debian.org>
Sat, 19 Dec 2015 11:00:43 +0000 (12:00 +0100)
committerJulian Andres Klode <jak@debian.org>
Sat, 19 Dec 2015 11:52:04 +0000 (12:52 +0100)
Commit e977b8b9234ac5db32f2f0ad7e183139b988340d tries to make BufSize
calculated based on the size of the buffer; the problem is that
std::unique_ptr::size() returns a pointer to the data, so sizeof()
equals to the size of a pointer (later divided by sizeof(char), which
is 1). The result is that the CopyFile copies in chunks of 8 bytes,
which is not exactly ideal...

As solution, declare BufSize in advance, and use its value to allocate
the Buf array.

Closes: #808381
apt-pkg/contrib/fileutl.cc

index 014f0ee51659953d3d2b1a604acc2462c6fb76ed..86ca82cff2c4b17c02ea600374898dd1bc52dc8c 100644 (file)
@@ -160,8 +160,8 @@ bool CopyFile(FileFd &From,FileFd &To)
       return false;
 
    // Buffered copy between fds
-   std::unique_ptr<unsigned char[]> Buf(new unsigned char[64000]);
-   constexpr unsigned long long BufSize = sizeof(Buf.get())/sizeof(Buf.get()[0]);
+   constexpr size_t BufSize = 64000;
+   std::unique_ptr<unsigned char[]> Buf(new unsigned char[BufSize]);
    unsigned long long ToRead = 0;
    do {
       if (From.Read(Buf.get(),BufSize, &ToRead) == false ||