updated patch attached (I preferred that instead of sending with "git
send-email")

пн, 5 авг. 2024 г. в 20:10, Илья Шипицин <chipits...@gmail.com>:

>
>
> пн, 5 авг. 2024 г. в 20:09, William Lallemand <wlallem...@irq6.net>:
>
>> On Mon, Aug 05, 2024 at 08:01:39PM +0200, Илья Шипицин wrote:
>> > Subject: Re: [PATCH] src/fcgi-app.c: handle strdup failure
>> > пн, 5 авг. 2024 г. в 19:56, William Lallemand <wlallem...@irq6.net>:
>> >
>> > > On Mon, Aug 05, 2024 at 07:17:48PM +0200, Ilia Shipitsin wrote:
>> > > > Subject: [PATCH] src/fcgi-app.c: handle strdup failure
>> > > > found by coccinelle
>> > >
>> > > Please add clearer commit messages in your patches, you tend to
>> minimize
>> > > them, thanks ! :-)
>> > >
>> >
>> > truth to be told, I tend to write longer messages than usually :)
>> >
>> >
>> > >
>> > > > ---
>> > > >  src/fcgi-app.c | 5 ++++-
>> > > >  1 file changed, 4 insertions(+), 1 deletion(-)
>> > > >
>> > > > diff --git a/src/fcgi-app.c b/src/fcgi-app.c
>> > > > index b3a9b7c59..d96bb222c 100644
>> > > > --- a/src/fcgi-app.c
>> > > > +++ b/src/fcgi-app.c
>> > > > @@ -606,6 +606,8 @@ static int proxy_parse_use_fcgi_app(char
>> **args, int
>> > > section, struct proxy *curp
>> > > >       if (!fcgi_conf)
>> > > >               goto err;
>> > > >       fcgi_conf->name = strdup(args[1]);
>> > > > +     if (!fcgi_conf->name)
>> > > > +             goto err;
>> > > >       LIST_INIT(&fcgi_conf->param_rules);
>> > > >       LIST_INIT(&fcgi_conf->hdr_rules);
>> > > >
>> > > > @@ -622,7 +624,8 @@ static int proxy_parse_use_fcgi_app(char
>> **args, int
>> > > section, struct proxy *curp
>> > > >       return retval;
>> > > >    err:
>> > > >       if (fcgi_conf) {
>> > > > -             free(fcgi_conf->name);
>> > > > +             if (fcgi_conf->name)
>> > > > +                     free(fcgi_conf->name);
>> > >
>> > > You don't need to add a check there, free(NULL) does nothing.
>> > >
>> >
>> > I tried to figure out whether that behaviour is by chance or by purpose
>> > (taking into account variety of implementations on different OSes)
>> >
>> > I'll try again
>> >
>>
>> This is a standard behavior that is specified in POSIX, honestly HAProxy
>> won't probably run if it wasn't behaving this
>> way on some weird OS.
>>
>> https://pubs.opengroup.org/onlinepubs/009695399/functions/free.html "If
>> ptr is a null pointer, no action shall occur."
>>
>
> "man 3 free" didn't give me any link to POSIX.
> I've should have a look at POSIX directly, but I didn't
>
>
>>
>> --
>> William Lallemand
>>
>
From baa55f1434b2ed5288536f62b8e322ed20904b8d Mon Sep 17 00:00:00 2001
From: Ilia Shipitsin <chipits...@gmail.com>
Date: Mon, 5 Aug 2024 20:59:09 +0200
Subject: [PATCH] src/fcgi-app.c: handle strdup failure

this defect is found by the following coccinelle script:

// find calls to strdup
@call@
expression ptr;
position p;
@@

ptr@p = strdup(...);

// find ok calls to strdup
@ok@
expression ptr;
position call.p;
@@

ptr@p = strdup(...);
... when != ptr
(
 (ptr == NULL || ...)
|
 (ptr == 0 || ...)
|
 (ptr != NULL || ...)
|
 (ptr != 0 || ...)
)

// fix bad calls to strdup
@depends on !ok@
expression ptr;
position call.p;
@@

ptr@p = strdup(...);
+ if (ptr == NULL) return;
---
 src/fcgi-app.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/fcgi-app.c b/src/fcgi-app.c
index b3a9b7c59..98077b959 100644
--- a/src/fcgi-app.c
+++ b/src/fcgi-app.c
@@ -606,6 +606,8 @@ static int proxy_parse_use_fcgi_app(char **args, int 
section, struct proxy *curp
        if (!fcgi_conf)
                goto err;
        fcgi_conf->name = strdup(args[1]);
+       if (!fcgi_conf->name)
+               goto err;
        LIST_INIT(&fcgi_conf->param_rules);
        LIST_INIT(&fcgi_conf->hdr_rules);
 
-- 
2.43.0.windows.1

Reply via email to