X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fargp-help.c;h=0b85284392252dad5f124eafe8507195f03b6d0f;hb=dca1eba100e85c0bd42db59fc81dffa3390c7374;hp=497bae148855bee17056d2bb1f4a660719b0833f;hpb=35b6e3c3bdaf7541e7a03d985c80c464e49d2182;p=gnulib.git diff --git a/lib/argp-help.c b/lib/argp-help.c index 497bae148..0b8528439 100644 --- a/lib/argp-help.c +++ b/lib/argp-help.c @@ -72,6 +72,10 @@ char *alloca (); #include "argp.h" #include "argp-fmtstream.h" #include "argp-namefrob.h" + +#ifndef SIZE_MAX +# define SIZE_MAX ((size_t) -1) +#endif /* User-selectable (using an environment variable) formatting parameters. @@ -440,7 +444,8 @@ make_hol (const struct argp *argp, struct hol_cluster *cluster) hol->entries = malloc (sizeof (struct hol_entry) * hol->num_entries); hol->short_options = malloc (num_short_options + 1); - assert (hol->entries && hol->short_options); + assert (hol->entries && hol->short_options + && hol->num_entries <= SIZE_MAX / sizeof (struct hol_entry)); /* Fill in the entries. */ so = hol->short_options; @@ -833,6 +838,9 @@ hol_append (struct hol *hol, struct hol *more) char *short_options = malloc (hol_so_len + strlen (more->short_options) + 1); + assert (entries && short_options + && num_entries <= SIZE_MAX / sizeof (struct hol_entry)); + __mempcpy (__mempcpy (entries, hol->entries, hol->num_entries * sizeof (struct hol_entry)), more->entries,