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