[v2,01/23] support: Update support_format_* NSS formatting routines for null pointers
Checks
| Context |
Check |
Description |
| redhat-pt-bot/TryBot-apply_patch |
success
|
Patch applied to master at the time it was sent
|
Commit Message
Some tests will need to check for the presence of null pointers. It
makes sense to support this in the formatting functions.
---
support/support_format_group.c | 7 +++++--
support/support_format_hostent.c | 31 ++++++++++++++++++++-----------
support/support_format_netent.c | 9 +++++++--
support/support_format_protoent.c | 11 ++++++++---
support/support_format_rpcent.c | 8 ++++++--
support/support_format_servent.c | 9 +++++++--
support/support_format_sgrp.c | 16 ++++++++++++----
7 files changed, 65 insertions(+), 26 deletions(-)
Comments
On 3/20/26 4:41 PM, Florian Weimer wrote:
> Some tests will need to check for the presence of null pointers. It
> makes sense to support this in the formatting functions.
LGTM.
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
> ---
> support/support_format_group.c | 7 +++++--
> support/support_format_hostent.c | 31 ++++++++++++++++++++-----------
> support/support_format_netent.c | 9 +++++++--
> support/support_format_protoent.c | 11 ++++++++---
> support/support_format_rpcent.c | 8 ++++++--
> support/support_format_servent.c | 9 +++++++--
> support/support_format_sgrp.c | 16 ++++++++++++----
> 7 files changed, 65 insertions(+), 26 deletions(-)
>
> diff --git a/support/support_format_group.c b/support/support_format_group.c
> index fb714564cd..a9ad4973c0 100644
> --- a/support/support_format_group.c
> +++ b/support/support_format_group.c
> @@ -35,8 +35,11 @@ support_format_group (const struct group *g)
> fprintf (mem.out, "name: %s\n", g->gr_name);
> fprintf (mem.out, "passwd: %s\n", g->gr_passwd);
> fprintf (mem.out, "gid: %u\n", (unsigned) g->gr_gid);
> - for (char **mp = g->gr_mem; *mp != NULL; ++mp)
> - fprintf (mem.out, "member: %s\n", *mp);
> + if (g->gr_mem != NULL)
> + for (char **mp = g->gr_mem; *mp != NULL; ++mp)
> + fprintf (mem.out, "member: %s\n", *mp);
> + else
> + fputs ("gr_mem: (null)\n", mem.out);
>
> xfclose_memstream (&mem);
> return mem.buffer;
> diff --git a/support/support_format_hostent.c b/support/support_format_hostent.c
> index f76ec459cd..4b3ef8e1d8 100644
> --- a/support/support_format_hostent.c
> +++ b/support/support_format_hostent.c
> @@ -59,17 +59,26 @@ support_format_hostent (const struct hostent *h)
> xopen_memstream (&mem);
>
> fprintf (mem.out, "name: %s\n", h->h_name);
> - for (char **alias = h->h_aliases; *alias != NULL; ++alias)
> - fprintf (mem.out, "alias: %s\n", *alias);
> - for (unsigned i = 0; h->h_addr_list[i] != NULL; ++i)
> - {
> - char buf[128];
> - if (inet_ntop (h->h_addrtype, h->h_addr_list[i],
> - buf, sizeof (buf)) == NULL)
> - fprintf (mem.out, "error: inet_ntop failed: %m\n");
> - else
> - fprintf (mem.out, "address: %s\n", buf);
> - }
> +
> + if (h->h_aliases != NULL)
> + for (char **alias = h->h_aliases; *alias != NULL; ++alias)
> + fprintf (mem.out, "alias: %s\n", *alias);
> + else
> + fputs ("h_aliases: (null)\n", mem.out);
> +
> + if (h->h_addr_list != NULL)
> + for (unsigned i = 0; h->h_addr_list[i] != NULL; ++i)
> + {
> + char buf[128];
> + if (inet_ntop (h->h_addrtype, h->h_addr_list[i],
> + buf, sizeof (buf)) == NULL)
> + fprintf (mem.out, "error: inet_ntop failed: %m\n");
> + else
> + fprintf (mem.out, "address: %s\n", buf);
> + }
> + else
> + fputs ("h_addr_list: (null)\n", mem.out);
> +
> if (h->h_length != address_length (h->h_addrtype))
> {
> char *family = support_format_address_family (h->h_addrtype);
> diff --git a/support/support_format_netent.c b/support/support_format_netent.c
> index 7f08476dd3..1ff2f93c26 100644
> --- a/support/support_format_netent.c
> +++ b/support/support_format_netent.c
> @@ -41,8 +41,13 @@ support_format_netent (const struct netent *e)
>
> if (e->n_name != NULL)
> fprintf (mem.out, "name: %s\n", e->n_name);
> - for (char **ap = e->n_aliases; *ap != NULL; ++ap)
> - fprintf (mem.out, "alias: %s\n", *ap);
> +
> + if (e->n_aliases != NULL)
> + for (char **ap = e->n_aliases; *ap != NULL; ++ap)
> + fprintf (mem.out, "alias: %s\n", *ap);
> + else
> + fputs ("n_aliases: (null)\n", mem.out);
> +
> if (e->n_addrtype != AF_INET)
> fprintf (mem.out, "addrtype: %d\n", e->n_addrtype);
> /* On alpha, e->n_net is an unsigned long. */
> diff --git a/support/support_format_protoent.c b/support/support_format_protoent.c
> index 25c177f5da..187e7ff318 100644
> --- a/support/support_format_protoent.c
> +++ b/support/support_format_protoent.c
> @@ -32,9 +32,14 @@ support_format_protoent (const struct protoent *e)
> struct xmemstream mem;
> xopen_memstream (&mem);
>
> - fprintf (mem.out, "name: %s\n", e->p_name);
> - for (char **ap = e->p_aliases; *ap != NULL; ++ap)
> - fprintf (mem.out, "alias: %s\n", *ap);
> + fprintf (mem.out, "name: %s\n", e->p_name ?: "(null)");
> +
> + if (e->p_aliases != NULL)
> + for (char **ap = e->p_aliases; *ap != NULL; ++ap)
> + fprintf (mem.out, "alias: %s\n", *ap);
> + else
> + fputs ("p_aliases: (null)\n", mem.out);
> +
> fprintf (mem.out, "proto: %d\n", e->p_proto);
>
> xfclose_memstream (&mem);
> diff --git a/support/support_format_rpcent.c b/support/support_format_rpcent.c
> index 1b898f3e27..66ee00f319 100644
> --- a/support/support_format_rpcent.c
> +++ b/support/support_format_rpcent.c
> @@ -34,8 +34,12 @@ support_format_rpcent (const struct rpcent *r)
>
> fprintf (mem.out, "name: %s\n", r->r_name);
> fprintf (mem.out, "number: %d\n", r->r_number);
> - for (char **ap = r->r_aliases; *ap != NULL; ++ap)
> - fprintf (mem.out, "alias: %s\n", *ap);
> +
> + if (r->r_aliases != NULL)
> + for (char **ap = r->r_aliases; *ap != NULL; ++ap)
> + fprintf (mem.out, "alias: %s\n", *ap);
> + else
> + fputs ("r_aliases: (null)\n", mem.out);
>
> xfclose_memstream (&mem);
> return mem.buffer;
> diff --git a/support/support_format_servent.c b/support/support_format_servent.c
> index fbe8138222..b8823ab485 100644
> --- a/support/support_format_servent.c
> +++ b/support/support_format_servent.c
> @@ -34,8 +34,13 @@ support_format_servent (const struct servent *e)
> xopen_memstream (&mem);
>
> fprintf (mem.out, "name: %s\n", e->s_name);
> - for (char **ap = e->s_aliases; *ap != NULL; ++ap)
> - fprintf (mem.out, "alias: %s\n", *ap);
> +
> + if (e->s_aliases != NULL)
> + for (char **ap = e->s_aliases; *ap != NULL; ++ap)
> + fprintf (mem.out, "alias: %s\n", *ap);
> + else
> + fputs ("s_aliases: (null)\n", mem.out);
> +
> fprintf (mem.out, "port: %d\n", ntohs (e->s_port));
> fprintf (mem.out, "proto: %s\n", e->s_proto);
>
> diff --git a/support/support_format_sgrp.c b/support/support_format_sgrp.c
> index d9b7d12478..0b4bdd7dfc 100644
> --- a/support/support_format_sgrp.c
> +++ b/support/support_format_sgrp.c
> @@ -34,10 +34,18 @@ support_format_sgrp (const struct sgrp *s)
>
> fprintf (mem.out, "name: %s\n", s->sg_namp);
> fprintf (mem.out, "passwd: %s\n", s->sg_passwd);
> - for (char **ap = s->sg_adm; *ap != NULL; ++ap)
> - fprintf (mem.out, "admin: %s\n", *ap);
> - for (char **mp = s->sg_mem; *mp != NULL; ++mp)
> - fprintf (mem.out, "member: %s\n", *mp);
> +
> + if (s->sg_adm != NULL)
> + for (char **ap = s->sg_adm; *ap != NULL; ++ap)
> + fprintf (mem.out, "admin: %s\n", *ap);
> + else
> + fputs ("sg_adm: (null)\n", mem.out);
> +
> + if (s->sg_mem != NULL)
> + for (char **mp = s->sg_mem; *mp != NULL; ++mp)
> + fprintf (mem.out, "member: %s\n", *mp);
> + else
> + fputs ("sg_mem: (null)\n", mem.out);
>
> xfclose_memstream (&mem);
> return mem.buffer;
@@ -35,8 +35,11 @@ support_format_group (const struct group *g)
fprintf (mem.out, "name: %s\n", g->gr_name);
fprintf (mem.out, "passwd: %s\n", g->gr_passwd);
fprintf (mem.out, "gid: %u\n", (unsigned) g->gr_gid);
- for (char **mp = g->gr_mem; *mp != NULL; ++mp)
- fprintf (mem.out, "member: %s\n", *mp);
+ if (g->gr_mem != NULL)
+ for (char **mp = g->gr_mem; *mp != NULL; ++mp)
+ fprintf (mem.out, "member: %s\n", *mp);
+ else
+ fputs ("gr_mem: (null)\n", mem.out);
xfclose_memstream (&mem);
return mem.buffer;
@@ -59,17 +59,26 @@ support_format_hostent (const struct hostent *h)
xopen_memstream (&mem);
fprintf (mem.out, "name: %s\n", h->h_name);
- for (char **alias = h->h_aliases; *alias != NULL; ++alias)
- fprintf (mem.out, "alias: %s\n", *alias);
- for (unsigned i = 0; h->h_addr_list[i] != NULL; ++i)
- {
- char buf[128];
- if (inet_ntop (h->h_addrtype, h->h_addr_list[i],
- buf, sizeof (buf)) == NULL)
- fprintf (mem.out, "error: inet_ntop failed: %m\n");
- else
- fprintf (mem.out, "address: %s\n", buf);
- }
+
+ if (h->h_aliases != NULL)
+ for (char **alias = h->h_aliases; *alias != NULL; ++alias)
+ fprintf (mem.out, "alias: %s\n", *alias);
+ else
+ fputs ("h_aliases: (null)\n", mem.out);
+
+ if (h->h_addr_list != NULL)
+ for (unsigned i = 0; h->h_addr_list[i] != NULL; ++i)
+ {
+ char buf[128];
+ if (inet_ntop (h->h_addrtype, h->h_addr_list[i],
+ buf, sizeof (buf)) == NULL)
+ fprintf (mem.out, "error: inet_ntop failed: %m\n");
+ else
+ fprintf (mem.out, "address: %s\n", buf);
+ }
+ else
+ fputs ("h_addr_list: (null)\n", mem.out);
+
if (h->h_length != address_length (h->h_addrtype))
{
char *family = support_format_address_family (h->h_addrtype);
@@ -41,8 +41,13 @@ support_format_netent (const struct netent *e)
if (e->n_name != NULL)
fprintf (mem.out, "name: %s\n", e->n_name);
- for (char **ap = e->n_aliases; *ap != NULL; ++ap)
- fprintf (mem.out, "alias: %s\n", *ap);
+
+ if (e->n_aliases != NULL)
+ for (char **ap = e->n_aliases; *ap != NULL; ++ap)
+ fprintf (mem.out, "alias: %s\n", *ap);
+ else
+ fputs ("n_aliases: (null)\n", mem.out);
+
if (e->n_addrtype != AF_INET)
fprintf (mem.out, "addrtype: %d\n", e->n_addrtype);
/* On alpha, e->n_net is an unsigned long. */
@@ -32,9 +32,14 @@ support_format_protoent (const struct protoent *e)
struct xmemstream mem;
xopen_memstream (&mem);
- fprintf (mem.out, "name: %s\n", e->p_name);
- for (char **ap = e->p_aliases; *ap != NULL; ++ap)
- fprintf (mem.out, "alias: %s\n", *ap);
+ fprintf (mem.out, "name: %s\n", e->p_name ?: "(null)");
+
+ if (e->p_aliases != NULL)
+ for (char **ap = e->p_aliases; *ap != NULL; ++ap)
+ fprintf (mem.out, "alias: %s\n", *ap);
+ else
+ fputs ("p_aliases: (null)\n", mem.out);
+
fprintf (mem.out, "proto: %d\n", e->p_proto);
xfclose_memstream (&mem);
@@ -34,8 +34,12 @@ support_format_rpcent (const struct rpcent *r)
fprintf (mem.out, "name: %s\n", r->r_name);
fprintf (mem.out, "number: %d\n", r->r_number);
- for (char **ap = r->r_aliases; *ap != NULL; ++ap)
- fprintf (mem.out, "alias: %s\n", *ap);
+
+ if (r->r_aliases != NULL)
+ for (char **ap = r->r_aliases; *ap != NULL; ++ap)
+ fprintf (mem.out, "alias: %s\n", *ap);
+ else
+ fputs ("r_aliases: (null)\n", mem.out);
xfclose_memstream (&mem);
return mem.buffer;
@@ -34,8 +34,13 @@ support_format_servent (const struct servent *e)
xopen_memstream (&mem);
fprintf (mem.out, "name: %s\n", e->s_name);
- for (char **ap = e->s_aliases; *ap != NULL; ++ap)
- fprintf (mem.out, "alias: %s\n", *ap);
+
+ if (e->s_aliases != NULL)
+ for (char **ap = e->s_aliases; *ap != NULL; ++ap)
+ fprintf (mem.out, "alias: %s\n", *ap);
+ else
+ fputs ("s_aliases: (null)\n", mem.out);
+
fprintf (mem.out, "port: %d\n", ntohs (e->s_port));
fprintf (mem.out, "proto: %s\n", e->s_proto);
@@ -34,10 +34,18 @@ support_format_sgrp (const struct sgrp *s)
fprintf (mem.out, "name: %s\n", s->sg_namp);
fprintf (mem.out, "passwd: %s\n", s->sg_passwd);
- for (char **ap = s->sg_adm; *ap != NULL; ++ap)
- fprintf (mem.out, "admin: %s\n", *ap);
- for (char **mp = s->sg_mem; *mp != NULL; ++mp)
- fprintf (mem.out, "member: %s\n", *mp);
+
+ if (s->sg_adm != NULL)
+ for (char **ap = s->sg_adm; *ap != NULL; ++ap)
+ fprintf (mem.out, "admin: %s\n", *ap);
+ else
+ fputs ("sg_adm: (null)\n", mem.out);
+
+ if (s->sg_mem != NULL)
+ for (char **mp = s->sg_mem; *mp != NULL; ++mp)
+ fprintf (mem.out, "member: %s\n", *mp);
+ else
+ fputs ("sg_mem: (null)\n", mem.out);
xfclose_memstream (&mem);
return mem.buffer;