The branch master has been updated via 6e6aa5a9db9c5dce87aeb832f1a3bd105ec40120 (commit) via 1bcf7d45c63321f4efd354782be8924d688b0757 (commit) via 1e53a9fd1ad1260274065c12d0e9efbabb7d94e1 (commit) from 6edc71456463f66008b9cf40dadf00aba037f8da (commit)
- Log ----------------------------------------------------------------- commit 6e6aa5a9db9c5dce87aeb832f1a3bd105ec40120 Author: Richard Levitte <levi...@openssl.org> Date: Tue Mar 28 19:42:53 2017 +0200 Add a simple test for the z modifier Reviewed-by: Andy Polyakov <ap...@openssl.org> (Merged from https://github.com/openssl/openssl/pull/3064) commit 1bcf7d45c63321f4efd354782be8924d688b0757 Author: Richard Levitte <levi...@openssl.org> Date: Tue Mar 28 17:04:43 2017 +0200 Use the z modifier instead of OSSLzu with BIO_printf Reviewed-by: Andy Polyakov <ap...@openssl.org> (Merged from https://github.com/openssl/openssl/pull/3064) commit 1e53a9fd1ad1260274065c12d0e9efbabb7d94e1 Author: Richard Levitte <levi...@openssl.org> Date: Tue Mar 28 16:57:41 2017 +0200 Add z modifier parsing to the BIO_printf et all format string Reviewed-by: Andy Polyakov <ap...@openssl.org> (Merged from https://github.com/openssl/openssl/pull/3064) ----------------------------------------------------------------------- Summary of changes: CHANGES | 4 ++++ crypto/bio/b_print.c | 13 +++++++++++- include/openssl/bio.h | 14 +++++++++---- test/bioprinttest.c | 47 +++++++++++++++++++++++++++++++++++++++++++- test/siphash_internal_test.c | 2 +- 5 files changed, 73 insertions(+), 7 deletions(-) diff --git a/CHANGES b/CHANGES index 2cdd03a..d6a09b0 100644 --- a/CHANGES +++ b/CHANGES @@ -4,6 +4,10 @@ Changes between 1.1.0e and 1.1.1 [xx XXX xxxx] + *) Add the z modifier parsing to BIO_printf() et al formatting string, + to be used for size_t and ssize_t (ossl_ssize_t). + [Richard Levitte] + *) Add EC_KEY_get0_engine(), which does for EC_KEY what RSA_get0_engine() does for RSA, etc. [Richard Levitte] diff --git a/crypto/bio/b_print.c b/crypto/bio/b_print.c index e91ab6d..86aec79 100644 --- a/crypto/bio/b_print.c +++ b/crypto/bio/b_print.c @@ -89,6 +89,7 @@ static int _dopr(char **sbuffer, char **buffer, #define DP_C_LONG 2 #define DP_C_LDOUBLE 3 #define DP_C_LLONG 4 +#define DP_C_SIZE 5 /* Floating point formats */ #define F_FORMAT 0 @@ -214,6 +215,10 @@ _dopr(char **sbuffer, cflags = DP_C_LDOUBLE; ch = *format++; break; + case 'z': + cflags = DP_C_SIZE; + ch = *format++; + break; default: break; } @@ -233,6 +238,9 @@ _dopr(char **sbuffer, case DP_C_LLONG: value = va_arg(args, LLONG); break; + case DP_C_SIZE: + value = va_arg(args, ossl_ssize_t); + break; default: value = va_arg(args, int); break; @@ -253,11 +261,14 @@ _dopr(char **sbuffer, value = (unsigned short int)va_arg(args, unsigned int); break; case DP_C_LONG: - value = (LLONG) va_arg(args, unsigned long int); + value = (LLONG)va_arg(args, unsigned long int); break; case DP_C_LLONG: value = va_arg(args, unsigned LLONG); break; + case DP_C_SIZE: + value = (ossl_ssize_t)va_arg(args, size_t); + break; default: value = (LLONG) va_arg(args, unsigned int); break; diff --git a/include/openssl/bio.h b/include/openssl/bio.h index 0cf095e..6585ec0 100644 --- a/include/openssl/bio.h +++ b/include/openssl/bio.h @@ -724,10 +724,16 @@ void BIO_copy_next_retry(BIO *b); * long BIO_ghbn_ctrl(int cmd,int iarg,char *parg); */ -# ifdef __GNUC__ -# define __bio_h__attr__ __attribute__ -# else -# define __bio_h__attr__(x) +# define __bio_h__attr__(x) +# if defined(__GNUC__) && defined(__STDC_VERSION__) + /* + * Because we support the 'z' modifier, which made its appearance in C99, + * we can't use __attribute__ with pre C99 dialects. + */ +# if __STDC_VERSION__ >= 199901L +# undef __bio_h__attr__ +# define __bio_h__attr__ __attribute__ +# endif # endif int BIO_printf(BIO *bio, const char *format, ...) __bio_h__attr__((__format__(__printf__, 2, 3))); diff --git a/test/bioprinttest.c b/test/bioprinttest.c index b2d2622..c3ab6a1 100644 --- a/test/bioprinttest.c +++ b/test/bioprinttest.c @@ -10,6 +10,9 @@ #include <stdio.h> #include <string.h> #include <openssl/bio.h> +#include "internal/numbers.h" + +#define nelem(x) (sizeof(x)/sizeof((x)[0])) static int justprint = 0; @@ -138,10 +141,42 @@ static void dofptest(int test, double val, char *width, int prec, int *fail) } } +struct z_data_st { + size_t value; + const char *format; + const char *expected; +}; +static struct z_data_st zu_data[] = { + { SIZE_MAX, "%zu", (sizeof(size_t) == 4 ? "4294967295" + : sizeof(size_t) == 8 ? "18446744073709551615" + : "") }, + /* + * in 2-complement, the unsigned number divided by two plus one becomes the + * smallest possible negative signed number of the corresponding type + */ + { SIZE_MAX / 2 + 1, "%zi", (sizeof(size_t) == 4 ? "-2147483648" + : sizeof(size_t) == 8 ? "-9223372036854775808" + : "") }, + { 0, "%zu", "0" }, + { 0, "%zi", "0" }, +}; + +static void dozutest(int test, const struct z_data_st *data, int *fail) +{ + char bio_buf[80]; + + BIO_snprintf(bio_buf, sizeof(bio_buf) - 1, data->format, data->value); + if (strcmp(bio_buf, data->expected) != 0) { + printf("Test %d failed. Expected \"%s\". Got \"%s\". " + "Format \"%s\"\n", test, data->expected, bio_buf, data->format); + *fail = 1; + } +} + int main(int argc, char **argv) { int test = 0; - int i; + size_t i; int fail = 0; int prec = -1; char *width = ""; @@ -207,6 +242,16 @@ int main(int argc, char **argv) fail = 1; } + for (i = 0; i < nelem(zu_data); i++) { + dozutest(test++, &zu_data[i], &fail); + } + +#if 0 + for (i = 0; i < nelem(zi_data); i++) { + dozitest(test++, &zu_data[i], &fail); + } +#endif + #ifndef OPENSSL_NO_CRYPTO_MDEBUG if (CRYPTO_mem_leaks_fp(stderr) <= 0) return 1; diff --git a/test/siphash_internal_test.c b/test/siphash_internal_test.c index 46b4660..eee4736 100644 --- a/test/siphash_internal_test.c +++ b/test/siphash_internal_test.c @@ -321,7 +321,7 @@ static int test_siphash(int idx) } if (memcmp(out, expected, expectedlen) != 0) { - BIO_printf(b_stderr, "SipHash test #%d/%" OSSLzu "+%" OSSLzu " failed.\n", + BIO_printf(b_stderr, "SipHash test #%d/%zu+%zu failed.\n", idx, half, inlen-half); hex_out(b_stderr, "got: ", 16, out, expectedlen); hex_out(b_stderr, "expected: ", 16, expected, expectedlen); _____ openssl-commits mailing list To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-commits