Details
Description
Coverity picked up this potential memleak in os.hpp where we do not delete buffer in the else case. The exact same pattern occurs in getuid(const Option<std::string>& user = None()).
The corresponding CID 1230371 and 1230371.
inline Result<gid_t> getgid(const Option<std::string>& user = None()) ... while (true) { char* buffer = new char[size]; if (getpwnam_r(user.get().c_str(), &passwd, buffer, size, &result) == 0) { ... delete[] buffer; return gid; } else { // RHEL7 (and possibly other systems) will return non-zero and // set one of the following errors for "The given name or uid // was not found." See 'man getpwnam_r'. We only check for the // errors explicitly listed, and do not consider the ellipsis. if (errno == ENOENT || errno == ESRCH || errno == EBADF || errno == EPERM) { return None(); // HERE WE DO NOT DELETE BUFFER. } ... // getpwnam_r set ERANGE so try again with a larger buffer. size *= 2; delete[] buffer; }
Attachments
Issue Links
- is related to
-
MESOS-2418 Remove raw pointers from stout/os.hpp
- Open
-
MESOS-2569 Introduce Buffer abstraction to minimize inline buffer size constants, allocation and safe-guards
- Open