This is an automated email from the git hooks/post-receive script. guillem pushed a commit to branch master in repository dpkg.
commit 4cf0771c7e06bbb0bdfd0ff041672e462a122605 Author: Guillem Jover <[email protected]> Date: Wed Aug 17 02:41:59 2016 +0200 dpkg: Switch from non-freeing malloc to m_malloc for invoke hooks These do not need to be part of the non-freeing memory pool, as that should be reserved for packaging metadata. --- debian/changelog | 1 + src/main.c | 19 +++++++++++++++++-- src/main.h | 2 +- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/debian/changelog b/debian/changelog index 96373ec..da763d2 100644 --- a/debian/changelog +++ b/debian/changelog @@ -18,6 +18,7 @@ dpkg (1.18.11) UNRELEASED; urgency=medium * Generate reproducible file modes for the .deb control member contents. Closes: #787980 * Switch from non-freeing malloc to m_malloc on statdb slurping. + * Switch from non-freeing malloc to m_malloc for invoke hooks. * Perl modules: - Obsolete Source-Version substvar in Dpkg::Substvars by emitting errors. - Rework keyring hooks in Dpkg::Vendor. Deprecate the keyrings hook, and diff --git a/src/main.c b/src/main.c index ccf2777..4a721b8 100644 --- a/src/main.c +++ b/src/main.c @@ -439,8 +439,8 @@ set_invoke_hook(const struct cmdinfo *cip, const char *value) struct invoke_list *hook_list = cip->arg_ptr; struct invoke_hook *hook_new; - hook_new = nfmalloc(sizeof(struct invoke_hook)); - hook_new->command = nfstrsave(value); + hook_new = m_malloc(sizeof(struct invoke_hook)); + hook_new->command = m_strdup(value); hook_new->next = NULL; /* Add the new hook at the tail of the list to preserve the order. */ @@ -469,6 +469,18 @@ run_invoke_hooks(const char *action, struct invoke_list *hook_list) unsetenv("DPKG_HOOK_ACTION"); } +static void +free_invoke_hooks(struct invoke_list *hook_list) +{ + struct invoke_hook *hook, *hook_next; + + for (hook = hook_list->head; hook; hook = hook_next) { + hook_next = hook->next; + free(hook->command); + free(hook); + } +} + static int run_logger(struct invoke_hook *hook, const char *name) { @@ -902,6 +914,9 @@ int main(int argc, const char *const *argv) { if (is_invoke_action(cipaction->arg_int)) run_invoke_hooks(cipaction->olong, &post_invoke_hooks); + free_invoke_hooks(&pre_invoke_hooks); + free_invoke_hooks(&post_invoke_hooks); + dpkg_program_done(); return reportbroken_retexitstatus(ret); diff --git a/src/main.h b/src/main.h index 15ee278..fc083a9 100644 --- a/src/main.h +++ b/src/main.h @@ -149,7 +149,7 @@ extern struct pkg_list *ignoredependss; struct invoke_hook { struct invoke_hook *next; - const char *command; + char *command; }; struct invoke_list { -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/dpkg/dpkg.git

