Applied, thanks!
Mikhail Karpov, le jeu. 01 oct. 2026 06:46:49 +0700, a ecrit:
> On Thu, 1 Oct 2026 00:56:12 Samuel Thibault wrote:
>
> > > diff --git a/proc/mgt.c b/proc/mgt.c
> > > index 05af823f..9ac7fa3e 100644
> > > --- a/proc/mgt.c
> > > +++ b/proc/mgt.c
> > > @@ -221,6 +221,14 @@ S_proc_child (struct proc *parentp,
> > > if (childp->p_parentset)
> > > return EBUSY;
> > >
> > > + char *exe_path = NULL;
> > > + if (parentp->exe)
> > > + {
> > > + exe_path = strdup (parentp->exe);
> >
> > Better only strdup if !childp->exe
>
> It seemed to me that the childp->exe field might change somewhere else in
> the code before the if (!childp->exe && parentp->exe) check. If that is
> not the case, then perhaps it would be best to simply move the
> if (! childp->exe && parentp->exe) check and the
> childp->exe = strdup (parentp->exe) assignment to a point before
> mach_port_deallocate.
>
> Thanks,
>
> --
> Mikhail Karpov
> From dc9fe77ede2a15d2eaef6fbe0c3b40fb9d61fc41 Mon Sep 17 00:00:00 2001
> From: Mikhail Karpov <[email protected]>
> Date: Thu, 1 Oct 2026 06:30:07 +0700
> Subject: [PATCH] Fixing strdup in proc/mgt.c patch
>
> ---
> proc/mgt.c | 9 +++++++--
> 1 file changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/proc/mgt.c b/proc/mgt.c
> index 05af823f..73790c8b 100644
> --- a/proc/mgt.c
> +++ b/proc/mgt.c
> @@ -221,6 +221,13 @@ S_proc_child (struct proc *parentp,
> if (childp->p_parentset)
> return EBUSY;
>
> + if (!childp->exe && parentp->exe)
> + {
> + childp->exe = strdup (parentp->exe);
> + if (!childp->exe)
> + return errno;
> + }
> +
> mach_port_deallocate (mach_task_self (), childt);
>
> /* Process identification.
> @@ -273,8 +280,6 @@ S_proc_child (struct proc *parentp,
> childp->start_code = parentp->start_code;
> childp->end_code = parentp->end_code;
> }
> - if (! childp->exe && parentp->exe)
> - childp->exe = strdup (parentp->exe);
>
> if (MACH_PORT_VALID (parentp->p_task_namespace))
> {
> --
> 2.43.0
>
--
Samuel
quit When the quit statement is read, the bc processor
is terminated, regardless of where the quit state-
ment is found. For example, "if (0 == 1) quit"
will cause bc to terminate.
(Seen in the manpage for "bc". Note the "if" statement's logic)