Message ID | 20230620181910.1506893-20-fberat@redhat.com |
---|---|
State | New |
Headers | show |
Series | Allow glibc to be built with _FORTIFY_SOURCE | expand |
On 2023-06-20 14:19, Frédéric Bérat wrote: > Return value from *scanf and *asprintf routines are now properly checked > in test-scanf-ldbl-compat-template.c and test-printf-ldbl-compat.c. > --- > .../test-printf-ldbl-compat.c | 10 +++++---- > .../test-scanf-ldbl-compat-template.c | 21 ++++++++++--------- > 2 files changed, 17 insertions(+), 14 deletions(-) > > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/test-printf-ldbl-compat.c b/sysdeps/ieee754/ldbl-128ibm-compat/test-printf-ldbl-compat.c > index 3c759e1427..95c1a28522 100644 > --- a/sysdeps/ieee754/ldbl-128ibm-compat/test-printf-ldbl-compat.c > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/test-printf-ldbl-compat.c > @@ -30,12 +30,13 @@ do_test_call_varg (FILE *stream, const char *format, ...) > char *buffer = NULL; > char string[128]; > va_list args; > + int ret; > > printf ("%15s", "vasprintf: "); > va_start (args, format); > - vasprintf (&buffer, format, args); > + ret = vasprintf (&buffer, format, args); > va_end (args); > - if (buffer == NULL) > + if (ret < 22 || buffer == NULL) ret == -1 is a sufficient test here I think. > printf ("Error using vasprintf\n"); > else > { > @@ -82,10 +83,11 @@ do_test_call_rarg (FILE *stream, const char *format, long double ld, double d) > { > char *buffer = NULL; > char string[128]; > + int ret; > > printf ("%15s", "asprintf: "); > - asprintf (&buffer, format, ld, d); > - if (buffer == NULL) > + ret = asprintf (&buffer, format, ld, d); > + if (ret < 22 || buffer == NULL) > printf ("Error using asprintf\n"); > else > { > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/test-scanf-ldbl-compat-template.c b/sysdeps/ieee754/ldbl-128ibm-compat/test-scanf-ldbl-compat-template.c > index e8da3a67f0..776c12dd16 100644 > --- a/sysdeps/ieee754/ldbl-128ibm-compat/test-scanf-ldbl-compat-template.c > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/test-scanf-ldbl-compat-template.c > @@ -37,10 +37,10 @@ > ldptr = va_arg (args, long double *); \ > fptr = va_arg (args, float *); \ > va_end (args); \ > - if (*ldptr == -1 && *fptr == -2) \ > + if (*ldptr == -1 && *fptr == -2 && ret == 2) \ > printf ("OK"); \ > else \ > - printf ("ERROR (%Lf %f)", *ldptr, *fptr); \ > + printf ("ERROR (%Lf %f %d)", *ldptr, *fptr, ret); \ > printf ("\n"); > > #define CLEAR_VALUE \ > @@ -48,10 +48,10 @@ > f = 0; > > #define CHECK_VALUE \ > - if (ld == -1 && f == -2) \ > + if (ld == -1 && f == -2 && ret == 2) \ > printf ("OK"); \ > else \ > - printf ("ERROR (%Lf %f)", ld, f); \ > + printf ("ERROR (%Lf %f %d)", ld, f, ret); \ > printf ("\n"); > > static void > @@ -62,40 +62,41 @@ do_test_call (FILE *stream, CHAR *string, const CHAR *format, ...) > float *fptr; > long double *ldptr; > va_list args; > + int ret; > > CLEAR_VALUE > printf ("fscanf: "); > - FSCANF (stream, format, &ld, &f); > + ret = FSCANF (stream, format, &ld, &f); > CHECK_VALUE > > CLEAR_VALUE > printf ("scanf: "); > - SCANF (format, &ld, &f); > + ret = SCANF (format, &ld, &f); > CHECK_VALUE > > CLEAR_VALUE > printf ("sscanf: "); > - SSCANF (string, format, &ld, &f); > + ret = SSCANF (string, format, &ld, &f); > CHECK_VALUE > > CLEAR_VARGS > printf ("vfscanf: "); > va_start (args, format); > - VFSCANF (stream, format, args); > + ret = VFSCANF (stream, format, args); > va_end (args); > CHECK_VARGS > > CLEAR_VARGS > printf ("vscanf: "); > va_start (args, format); > - VSCANF (format, args); > + ret = VSCANF (format, args); > va_end (args); > CHECK_VARGS > > CLEAR_VARGS > printf ("vsscanf: "); > va_start (args, format); > - VSSCANF (string, format, args); > + ret = VSSCANF (string, format, args); > va_end (args); > CHECK_VARGS > }
diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/test-printf-ldbl-compat.c b/sysdeps/ieee754/ldbl-128ibm-compat/test-printf-ldbl-compat.c index 3c759e1427..95c1a28522 100644 --- a/sysdeps/ieee754/ldbl-128ibm-compat/test-printf-ldbl-compat.c +++ b/sysdeps/ieee754/ldbl-128ibm-compat/test-printf-ldbl-compat.c @@ -30,12 +30,13 @@ do_test_call_varg (FILE *stream, const char *format, ...) char *buffer = NULL; char string[128]; va_list args; + int ret; printf ("%15s", "vasprintf: "); va_start (args, format); - vasprintf (&buffer, format, args); + ret = vasprintf (&buffer, format, args); va_end (args); - if (buffer == NULL) + if (ret < 22 || buffer == NULL) printf ("Error using vasprintf\n"); else { @@ -82,10 +83,11 @@ do_test_call_rarg (FILE *stream, const char *format, long double ld, double d) { char *buffer = NULL; char string[128]; + int ret; printf ("%15s", "asprintf: "); - asprintf (&buffer, format, ld, d); - if (buffer == NULL) + ret = asprintf (&buffer, format, ld, d); + if (ret < 22 || buffer == NULL) printf ("Error using asprintf\n"); else { diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/test-scanf-ldbl-compat-template.c b/sysdeps/ieee754/ldbl-128ibm-compat/test-scanf-ldbl-compat-template.c index e8da3a67f0..776c12dd16 100644 --- a/sysdeps/ieee754/ldbl-128ibm-compat/test-scanf-ldbl-compat-template.c +++ b/sysdeps/ieee754/ldbl-128ibm-compat/test-scanf-ldbl-compat-template.c @@ -37,10 +37,10 @@ ldptr = va_arg (args, long double *); \ fptr = va_arg (args, float *); \ va_end (args); \ - if (*ldptr == -1 && *fptr == -2) \ + if (*ldptr == -1 && *fptr == -2 && ret == 2) \ printf ("OK"); \ else \ - printf ("ERROR (%Lf %f)", *ldptr, *fptr); \ + printf ("ERROR (%Lf %f %d)", *ldptr, *fptr, ret); \ printf ("\n"); #define CLEAR_VALUE \ @@ -48,10 +48,10 @@ f = 0; #define CHECK_VALUE \ - if (ld == -1 && f == -2) \ + if (ld == -1 && f == -2 && ret == 2) \ printf ("OK"); \ else \ - printf ("ERROR (%Lf %f)", ld, f); \ + printf ("ERROR (%Lf %f %d)", ld, f, ret); \ printf ("\n"); static void @@ -62,40 +62,41 @@ do_test_call (FILE *stream, CHAR *string, const CHAR *format, ...) float *fptr; long double *ldptr; va_list args; + int ret; CLEAR_VALUE printf ("fscanf: "); - FSCANF (stream, format, &ld, &f); + ret = FSCANF (stream, format, &ld, &f); CHECK_VALUE CLEAR_VALUE printf ("scanf: "); - SCANF (format, &ld, &f); + ret = SCANF (format, &ld, &f); CHECK_VALUE CLEAR_VALUE printf ("sscanf: "); - SSCANF (string, format, &ld, &f); + ret = SSCANF (string, format, &ld, &f); CHECK_VALUE CLEAR_VARGS printf ("vfscanf: "); va_start (args, format); - VFSCANF (stream, format, args); + ret = VFSCANF (stream, format, args); va_end (args); CHECK_VARGS CLEAR_VARGS printf ("vscanf: "); va_start (args, format); - VSCANF (format, args); + ret = VSCANF (format, args); va_end (args); CHECK_VARGS CLEAR_VARGS printf ("vsscanf: "); va_start (args, format); - VSSCANF (string, format, args); + ret = VSSCANF (string, format, args); va_end (args); CHECK_VARGS }