diff options
author | Joseph Myers <joseph@codesourcery.com> | 2016-11-16 22:46:48 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2016-11-16 22:46:48 +0000 |
commit | 61158ffa9a17476d88aaf4a833d13b12f1c51387 (patch) | |
tree | 2113e63413caa6d97c0e9bf0b905afbfd4a7eee0 | |
parent | 7773556dfb2bf62f7b6deda66fa3821a3bcdbf3e (diff) | |
download | glibc-61158ffa9a17476d88aaf4a833d13b12f1c51387.tar.gz glibc-61158ffa9a17476d88aaf4a833d13b12f1c51387.tar.xz glibc-61158ffa9a17476d88aaf4a833d13b12f1c51387.zip |
Fix crypt snprintf namespace (bug 20829).
Extending linknamespace tests to cover libcrypt showed that crypt brings in references to snprintf, but is in XPG3 and XPG4 which don't have snprintf. This patch fixes it to use __snprintf instead, exporting __snprintf from libc.so at version GLIBC_PRIVATE and adding libc_hidden_proto / libc_hidden_def accordingly. Tested for x86_64 and x86, in conjunction with the testsuite changes to enable linknamespace testing for libdl and libcrypt. Also tested (compilation only) for powerpc to make sure there were no problem interactions with the optional-long-double handling for snprintf. [BZ #20829] * stdio-common/Versions (__snprintf): Add to version GLIBC_PRIVATE. * include/stdio.h (__snprintf): Use libc_hidden_proto. * stdio-common/snprintf.c (__snprintf): Use libc_hidden_def. * crypt/sha256-crypt.c (__sha256_crypt_r): Use __snprintf instead of snprintf. * crypt/sha512-crypt.c (__sha512_crypt_r): Likewise.
-rw-r--r-- | ChangeLog | 11 | ||||
-rw-r--r-- | crypt/sha256-crypt.c | 4 | ||||
-rw-r--r-- | crypt/sha512-crypt.c | 4 | ||||
-rw-r--r-- | include/stdio.h | 1 | ||||
-rw-r--r-- | stdio-common/Versions | 2 | ||||
-rw-r--r-- | stdio-common/snprintf.c | 1 |
6 files changed, 19 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog index 25e1da152a..49e0ae7fed 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2016-11-16 Joseph Myers <joseph@codesourcery.com> + + [BZ #20829] + * stdio-common/Versions (__snprintf): Add to version + GLIBC_PRIVATE. + * include/stdio.h (__snprintf): Use libc_hidden_proto. + * stdio-common/snprintf.c (__snprintf): Use libc_hidden_def. + * crypt/sha256-crypt.c (__sha256_crypt_r): Use __snprintf instead + of snprintf. + * crypt/sha512-crypt.c (__sha512_crypt_r): Likewise. + 2016-11-16 Zack Weinberg <zackw@panix.com> * string/string.h: Remove obsolete comment stating that diff --git a/crypt/sha256-crypt.c b/crypt/sha256-crypt.c index ca703dec6d..d768234879 100644 --- a/crypt/sha256-crypt.c +++ b/crypt/sha256-crypt.c @@ -319,8 +319,8 @@ __sha256_crypt_r (const char *key, const char *salt, char *buffer, int buflen) if (rounds_custom) { - int n = snprintf (cp, MAX (0, buflen), "%s%zu$", - sha256_rounds_prefix, rounds); + int n = __snprintf (cp, MAX (0, buflen), "%s%zu$", + sha256_rounds_prefix, rounds); cp += n; buflen -= n; } diff --git a/crypt/sha512-crypt.c b/crypt/sha512-crypt.c index c42e5b785d..f404c88b20 100644 --- a/crypt/sha512-crypt.c +++ b/crypt/sha512-crypt.c @@ -318,8 +318,8 @@ __sha512_crypt_r (const char *key, const char *salt, char *buffer, int buflen) if (rounds_custom) { - int n = snprintf (cp, MAX (0, buflen), "%s%zu$", - sha512_rounds_prefix, rounds); + int n = __snprintf (cp, MAX (0, buflen), "%s%zu$", + sha512_rounds_prefix, rounds); cp += n; buflen -= n; } diff --git a/include/stdio.h b/include/stdio.h index 1ffbc40b3d..30e737efc2 100644 --- a/include/stdio.h +++ b/include/stdio.h @@ -11,6 +11,7 @@ extern int __fcloseall (void); extern int __snprintf (char *__restrict __s, size_t __maxlen, const char *__restrict __format, ...) __attribute__ ((__format__ (__printf__, 3, 4))); +libc_hidden_proto (__snprintf) extern int __vsnprintf (char *__restrict __s, size_t __maxlen, const char *__restrict __format, _G_va_list __arg) __attribute__ ((__format__ (__printf__, 3, 0))); diff --git a/stdio-common/Versions b/stdio-common/Versions index 06b96f678a..5016f69c20 100644 --- a/stdio-common/Versions +++ b/stdio-common/Versions @@ -60,5 +60,7 @@ libc { GLIBC_PRIVATE { # global variables _itoa_lower_digits; + # Used in libcrypt. + __snprintf; } } diff --git a/stdio-common/snprintf.c b/stdio-common/snprintf.c index a3cc518976..ce7ce06077 100644 --- a/stdio-common/snprintf.c +++ b/stdio-common/snprintf.c @@ -35,4 +35,5 @@ __snprintf (char *s, size_t maxlen, const char *format, ...) return done; } +libc_hidden_def (__snprintf) ldbl_weak_alias (__snprintf, snprintf) |