Skip to content

Commit

Permalink
src: use RAII in setgroups implementation
Browse files Browse the repository at this point in the history
Prefer `MaybeStackBuffer` over manual memory management.

PR-URL: nodejs#28022
Reviewed-By: Ben Noordhuis <[email protected]>
Reviewed-By: Colin Ihrig <[email protected]>
Reviewed-By: Rich Trott <[email protected]>
  • Loading branch information
addaleax authored and Trott committed Jun 6, 2019
1 parent 2976bbd commit a8277dd
Showing 1 changed file with 2 additions and 4 deletions.
6 changes: 2 additions & 4 deletions src/node_credentials.cc
Original file line number Diff line number Diff line change
Expand Up @@ -307,14 +307,13 @@ static void SetGroups(const FunctionCallbackInfo<Value>& args) {

Local<Array> groups_list = args[0].As<Array>();
size_t size = groups_list->Length();
gid_t* groups = new gid_t[size];
MaybeStackBuffer<gid_t, 64> groups(size);

for (size_t i = 0; i < size; i++) {
gid_t gid = gid_by_name(
env->isolate(), groups_list->Get(env->context(), i).ToLocalChecked());

if (gid == gid_not_found) {
delete[] groups;
// Tells JS to throw ERR_INVALID_CREDENTIAL
args.GetReturnValue().Set(static_cast<uint32_t>(i + 1));
return;
Expand All @@ -323,8 +322,7 @@ static void SetGroups(const FunctionCallbackInfo<Value>& args) {
groups[i] = gid;
}

int rc = setgroups(size, groups);
delete[] groups;
int rc = setgroups(size, *groups);

if (rc == -1) return env->ThrowErrnoException(errno, "setgroups");

Expand Down

0 comments on commit a8277dd

Please sign in to comment.