You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@mesos.apache.org by "Alexander Rojas (JIRA)" <ji...@apache.org> on 2015/02/26 22:26:04 UTC
[jira] [Comment Edited] (MESOS-2412) Potential memleak(s) in
stout/os.hpp
[ https://issues.apache.org/jira/browse/MESOS-2412?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14339185#comment-14339185 ]
Alexander Rojas edited comment on MESOS-2412 at 2/26/15 9:25 PM:
-----------------------------------------------------------------
I think we rather go with [~dhamon] patch. It's safer and as shown is easy to forget to add a {{delete}} if another return statement is added.
was (Author: arojas):
I think we rather go with [~dhamon] patch. It's safer and as shown is easy to forget to add a {delete} if another return statement is added.
> Potential memleak(s) in stout/os.hpp
> ------------------------------------
>
> Key: MESOS-2412
> URL: https://issues.apache.org/jira/browse/MESOS-2412
> Project: Mesos
> Issue Type: Bug
> Components: stout
> Reporter: Joerg Schad
> Assignee: Dominic Hamon
> Labels: coverity, twitter
>
> 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.
> {code}
> 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;
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)