Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix memory leak in z_declare_subscriber #262

Merged
merged 5 commits into from
Oct 18, 2023
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions src/api/api.c
Original file line number Diff line number Diff line change
Expand Up @@ -826,10 +826,12 @@ z_owned_subscriber_t z_declare_subscriber(z_session_t zs, z_keyexpr_t keyexpr, z
wild -= 1;
size_t len = wild - keyexpr._suffix;
suffix = z_malloc(len + 1);
p-avital marked this conversation as resolved.
Show resolved Hide resolved
memcpy(suffix, keyexpr._suffix, len);
suffix[len] = 0;
keyexpr._suffix = suffix;
_z_keyexpr_set_owns_suffix(&keyexpr, false);
if (suffix != NULL) {
memcpy(suffix, keyexpr._suffix, len);
suffix[len] = 0;
keyexpr._suffix = suffix;
_z_keyexpr_set_owns_suffix(&keyexpr, false);
}
}
uint16_t id = _z_declare_resource(zs._val, keyexpr);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is declared if suffix allocation fails? It seems that it will declare a keyexpr with id but no suffix...

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It will declare the exact keyexpr that was passed to the subscriber, but will keep the wild suffix, so the bug is not the one you expected, but it is buggy

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually was a bug, but not the one you expected. Let's just cancel attempting to declare the resource if we failed to allocate for the suffix, the other steps would probably also fail anyway.

key = _z_rid_with_suffix(id, wild);
Expand Down
Loading