[devel] [PATCH for apt v2 15/21] Fix incorrect delete operator
Aleksei Nikiforov
darktemplar на altlinux.org
Чт Дек 12 12:57:24 MSK 2019
Found via clang-static-analyzer:
Memory error: Bad deallocator:
Memory allocated by 'new[]' should be deallocated by 'delete[]', not 'delete'
---
apt/methods/rsync.cc | 29 +++++++++--------------------
1 file changed, 9 insertions(+), 20 deletions(-)
diff --git a/apt/methods/rsync.cc b/apt/methods/rsync.cc
index 1fc6a36..efc1c0e 100644
--- a/apt/methods/rsync.cc
+++ b/apt/methods/rsync.cc
@@ -26,6 +26,7 @@ RSYNC Aquire Method - This is the RSYNC aquire method for APT.
#include <stdarg.h>
#include <sys/wait.h>
#include <iostream>
+#include <utility>
// Internet stuff
#include <netinet/in.h>
@@ -277,13 +278,10 @@ void RsyncMethod::RsyncConnExec::ParseOutput(pkgAcqMethod *Owner, FetchResult &F
while (*ptr2!=0 && !isspace(*ptr2))
++ptr2;
if (ptr!=ptr2) {
- char *tmpfn = new char[ptr2-ptr+1];
- bzero(tmpfn, ptr2-ptr+1);
- strncpy(tmpfn, ptr, ptr2-ptr);
+ std::string tmpfn(ptr, ptr2-ptr);
if (RsyncMethod::Debug)
cerr << endl << "RSYNC: " << TMPFN << tmpfn << endl;
- FRes.TmpFilename = string(tmpfn);
- delete tmpfn;
+ FRes.TmpFilename = std::move(tmpfn);
}
}
@@ -314,13 +312,10 @@ void RsyncMethod::RsyncConnExec::ParseOutput(pkgAcqMethod *Owner, FetchResult &F
while (*ptr2!=0 && *ptr2!='\n')
++ptr2;
if (ptr!=ptr2) {
- char *tmp = new char[ptr2-ptr+1];
- bzero(tmp, ptr2-ptr+1);
- strncpy(tmp, ptr, ptr2-ptr);
- _error->Error("%s",tmp);
+ std::string tmp(ptr, ptr2-ptr);
+ _error->Error("%s",tmp.c_str());
if (RsyncMethod::Debug)
cerr << endl << FAILED << tmp << endl;
- delete tmp;
} else {
_error->Error("Child process failed (no description)");
}
@@ -431,13 +426,10 @@ void RsyncMethod::RsyncConnExecExt::ParseOutput(pkgAcqMethod *Owner, FetchResult
while (*ptr2!=0 && !isspace(*ptr2))
++ptr2;
if (ptr!=ptr2) {
- char *tmpfn = new char[ptr2-ptr+1];
- bzero(tmpfn, ptr2-ptr+1);
- strncpy(tmpfn, ptr, ptr2-ptr);
+ std::string tmpfn(ptr, ptr2-ptr);
if (RsyncMethod::Debug)
cerr << endl << "RSYNC: " << TMPFN << tmpfn << endl;
- FRes.TmpFilename = string(tmpfn);
- delete tmpfn;
+ FRes.TmpFilename = std::move(tmpfn);
}
}
@@ -468,13 +460,10 @@ void RsyncMethod::RsyncConnExecExt::ParseOutput(pkgAcqMethod *Owner, FetchResult
while (*ptr2!=0 && *ptr2!='\n')
++ptr2;
if (ptr!=ptr2) {
- char *tmp = new char[ptr2-ptr+1];
- bzero(tmp, ptr2-ptr+1);
- strncpy(tmp, ptr, ptr2-ptr);
- _error->Error("%s",tmp);
+ std::string tmp(ptr, ptr2-ptr);
+ _error->Error("%s",tmp.c_str());
if (RsyncMethod::Debug)
cerr << endl << FAILED << tmp << endl;
- delete tmp;
} else {
_error->Error("Child process failed (no description)");
}
--
2.24.1
Подробная информация о списке рассылки Devel