From 9457a827f2c8a48a01b47a27dc8abddb23e36b0b Mon Sep 17 00:00:00 2001 From: Jim Jagielski Date: Mon, 28 Jan 2013 13:09:39 +0000 Subject: [PATCH] Merge r1422549, r1422712 from trunk: add new ap_bin2hex() utility function remove unnecessary cast Submitted by: sf Reviewed/backported by: jim git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1439390 13f79535-47bb-0310-9956-ffa450edef68 --- include/ap_mmn.h | 3 ++- include/httpd.h | 8 ++++++++ server/util.c | 12 ++++++++++++ server/util_md5.c | 10 ++-------- 4 files changed, 24 insertions(+), 9 deletions(-) diff --git a/include/ap_mmn.h b/include/ap_mmn.h index b412941a49..2efda87e94 100644 --- a/include/ap_mmn.h +++ b/include/ap_mmn.h @@ -400,6 +400,7 @@ * 20120211.8 (2.4.3-dev) Add sticky_separator to proxy_balancer_shared struct. * 20120211.9 (2.4.4-dev) Add fgrab() to ap_slotmem_provider_t. * 20120211.10 (2.4.4-dev) Add in bal_persist field to proxy_server_conf + * 20120211.11 (2.4.4-dev) Add ap_bin2hex() */ #define MODULE_MAGIC_COOKIE 0x41503234UL /* "AP24" */ @@ -407,7 +408,7 @@ #ifndef MODULE_MAGIC_NUMBER_MAJOR #define MODULE_MAGIC_NUMBER_MAJOR 20120211 #endif -#define MODULE_MAGIC_NUMBER_MINOR 10 /* 0...n */ +#define MODULE_MAGIC_NUMBER_MINOR 11 /* 0...n */ /** * Determine if the server's current MODULE_MAGIC_NUMBER is at least a diff --git a/include/httpd.h b/include/httpd.h index f18f789d9d..70eb06f983 100644 --- a/include/httpd.h +++ b/include/httpd.h @@ -2209,6 +2209,14 @@ AP_DECLARE(void) ap_get_sload(ap_sload_t *ld); */ AP_DECLARE(void) ap_get_loadavg(ap_loadavg_t *ld); +/** + * Convert binary data into a hex string + * @param src pointer to the data + * @param srclen length of the data + * @param dest pointer to buffer of length (2 * srclen + 1). The resulting + * string will be NUL-terminated. + */ +AP_DECLARE(void) ap_bin2hex(const void *src, apr_size_t srclen, char *dest); #define AP_NORESTART APR_OS_START_USEERR + 1 diff --git a/server/util.c b/server/util.c index 36c2784091..d77719ebda 100644 --- a/server/util.c +++ b/server/util.c @@ -1958,6 +1958,18 @@ AP_DECLARE(apr_size_t) ap_escape_errorlog_item(char *dest, const char *source, return (d - (unsigned char *)dest); } +AP_DECLARE(void) ap_bin2hex(const void *src, apr_size_t srclen, char *dest) +{ + const unsigned char *in = src; + apr_size_t i; + + for (i = 0; i < srclen; i++) { + *dest++ = c2x_table[in[i] >> 4]; + *dest++ = c2x_table[in[i] & 0xf]; + } + *dest = '\0'; +} + AP_DECLARE(int) ap_is_directory(apr_pool_t *p, const char *path) { apr_finfo_t finfo; diff --git a/server/util_md5.c b/server/util_md5.c index 83bfa75741..148c60ceb4 100644 --- a/server/util_md5.c +++ b/server/util_md5.c @@ -52,11 +52,9 @@ AP_DECLARE(char *) ap_md5_binary(apr_pool_t *p, const unsigned char *buf, int length) { - const char *hex = "0123456789abcdef"; apr_md5_ctx_t my_md5; unsigned char hash[APR_MD5_DIGESTSIZE]; - char *r, result[33]; /* (MD5_DIGESTSIZE * 2) + 1 */ - int i; + char result[2 * APR_MD5_DIGESTSIZE + 1]; /* * Take the MD5 hash of the string argument. @@ -69,11 +67,7 @@ AP_DECLARE(char *) ap_md5_binary(apr_pool_t *p, const unsigned char *buf, int le apr_md5_update(&my_md5, buf, (unsigned int)length); apr_md5_final(hash, &my_md5); - for (i = 0, r = result; i < APR_MD5_DIGESTSIZE; i++) { - *r++ = hex[hash[i] >> 4]; - *r++ = hex[hash[i] & 0xF]; - } - *r = '\0'; + ap_bin2hex(hash, APR_MD5_DIGESTSIZE, result); return apr_pstrndup(p, result, APR_MD5_DIGESTSIZE*2); } -- 2.50.1