On Thu, Mar 04, 2021 at 04:10:12PM +0100, Claudio Jeker wrote:
> On Thu, Mar 04, 2021 at 03:53:44PM +0100, Theo Buehler wrote:
> > The first two seem obvious oversights.  The ones in rsync_base_uri()
> > would end up silently ignored:
> > queue_add_from_cert
> >  repo_lookup
> >   rsync_base_uri
> > 
> > Index: http.c
> > ===================================================================
> > RCS file: /cvs/src/usr.sbin/rpki-client/http.c,v
> > retrieving revision 1.4
> > diff -u -p -r1.4 http.c
> > --- http.c  4 Mar 2021 14:24:54 -0000       1.4
> > +++ http.c  4 Mar 2021 14:46:20 -0000
> > @@ -807,7 +807,8 @@ http_parse_header(struct http_connection
> >     } else if (strncasecmp(cp, LAST_MODIFIED,
> >         sizeof(LAST_MODIFIED) - 1) == 0) {
> >             cp += sizeof(LAST_MODIFIED) - 1;
> > -           conn->last_modified = strdup(cp);
> > +           if ((conn->last_modified = strdup(cp)) == NULL)
> > +                   err(1, NULL);
> 
> I did not make this a fatal error since the code works fine even if
> last_modified is NULL. This is just an extra data point to help pick up
> work on the next run (which is currently unused).
> 
> I think both versions are correct. I don't mind if you commit this.

Alright, if it's deliberate, I'll leave it as it is.

> 
> >     }
> >  
> >     return 1;
> > Index: main.c
> > ===================================================================
> > RCS file: /cvs/src/usr.sbin/rpki-client/main.c,v
> > retrieving revision 1.112
> > diff -u -p -r1.112 main.c
> > --- main.c  4 Mar 2021 14:24:17 -0000       1.112
> > +++ main.c  4 Mar 2021 14:46:20 -0000
> > @@ -590,9 +590,10 @@ queue_add_tal(struct entityq *q, const c
> >     buf = tal_read_file(file);
> >  
> >     /* Record tal for later reporting */
> > -   if (stats.talnames == NULL)
> > -           stats.talnames = strdup(file);
> > -   else {
> > +   if (stats.talnames == NULL) {
> > +           if ((stats.talnames = strdup(file)) == NULL)
> > +                   err(1, NULL);
> > +   } else {
> >             char *tmp;
> >             if (asprintf(&tmp, "%s %s", stats.talnames, file) == -1)
> >                     err(1, NULL);
> 
> Hmm, I thought the asprintf call below was also unchecked since this is
> again optional data. On the other hand if the code already fails here to
> allocate a few bytes then I don't expect it to actually get much further.
> 
> Since the else case now checks the asprintf return value I think it is
> fine to do the same for the strdup case. OK claudio@

I'll do that one for consistency.

> 
> > Index: rsync.c
> > ===================================================================
> > RCS file: /cvs/src/usr.sbin/rpki-client/rsync.c,v
> > retrieving revision 1.21
> > diff -u -p -r1.21 rsync.c
> > --- rsync.c 4 Mar 2021 14:24:17 -0000       1.21
> > +++ rsync.c 4 Mar 2021 14:46:20 -0000
> > @@ -55,6 +55,7 @@ char *
> >  rsync_base_uri(const char *uri)
> >  {
> >     const char *host, *module, *rest;
> > +   char *base_uri;
> >  
> >     /* Case-insensitive rsync URI. */
> >     if (strncasecmp(uri, "rsync://", 8) != 0) {
> > @@ -82,13 +83,18 @@ rsync_base_uri(const char *uri)
> >  
> >     /* The path component is optional. */
> >     if ((rest = strchr(module, '/')) == NULL) {
> > -           return strdup(uri);
> > +           if ((base_uri = strdup(uri)) == NULL)
> > +                   err(1, NULL);
> > +           return base_uri;
> >     } else if (rest == module) {
> >             warnx("%s: zero-length module", uri);
> >             return NULL;
> >     }
> >  
> > -   return strndup(uri, rest - uri);
> > +   if ((base_uri = strndup(uri, rest - uri)) == NULL)
> > +           err(1, NULL);
> > +
> > +   return base_uri;
> >  }
> >  
> >  static void
> > 
> 
> As you already noticed the NULL returns from strdup and strndup are
> handled by the caller.  Do we really need this extra complexity?

One might argue the complexity is higher without the checks...  Also,
the comment /* bad repository URI */ in queue_add_from_cert is inacurrate.
I don't insist, as there is no actual harm, it's just odd. 

> 
> -- 
> :wq Claudio

Reply via email to