commit 8c6ff9fec2ed8b1eed6a4c35370f62f1bf24a158 Author: Nick Mathewson nickm@torproject.org Date: Thu Jun 28 11:49:27 2018 -0400
Move tor_escape_str_for_pt_args into or/transports.c --- src/common/util.c | 37 ------------------------------------- src/common/util.h | 2 -- src/or/transports.c | 37 +++++++++++++++++++++++++++++++++++++ src/or/transports.h | 3 +++ src/test/test_util.c | 1 + 5 files changed, 41 insertions(+), 39 deletions(-)
diff --git a/src/common/util.c b/src/common/util.c index 5a104d39f..6a557c956 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -225,43 +225,6 @@ add_laplace_noise(int64_t signal_, double random_, double delta_f, * String manipulation * ===== */
-/** Return a newly allocated string equal to <b>string</b>, except that every - * character in <b>chars_to_escape</b> is preceded by a backslash. */ -char * -tor_escape_str_for_pt_args(const char *string, const char *chars_to_escape) -{ - char *new_string = NULL; - char *new_cp = NULL; - size_t length, new_length; - - tor_assert(string); - - length = strlen(string); - - if (!length) /* If we were given the empty string, return the same. */ - return tor_strdup(""); - /* (new_length > SIZE_MAX) => ((length * 2) + 1 > SIZE_MAX) => - (length*2 > SIZE_MAX - 1) => (length > (SIZE_MAX - 1)/2) */ - if (length > (SIZE_MAX - 1)/2) /* check for overflow */ - return NULL; - - /* this should be enough even if all characters must be escaped */ - new_length = (length * 2) + 1; - - new_string = new_cp = tor_malloc(new_length); - - while (*string) { - if (strchr(chars_to_escape, *string)) - *new_cp++ = '\'; - - *new_cp++ = *string++; - } - - *new_cp = '\0'; /* NUL-terminate the new string */ - - return new_string; -} - /* ===== * Time * ===== */ diff --git a/src/common/util.h b/src/common/util.h index f473d6f59..8007aa05c 100644 --- a/src/common/util.h +++ b/src/common/util.h @@ -72,8 +72,6 @@ int64_t clamp_double_to_int64(double number);
/* String manipulation */
-char *tor_escape_str_for_pt_args(const char *string, - const char *chars_to_escape);
/* Time helpers */ long tv_udiff(const struct timeval *start, const struct timeval *end); diff --git a/src/or/transports.c b/src/or/transports.c index 6cc7f844a..34161fd16 100644 --- a/src/or/transports.c +++ b/src/or/transports.c @@ -1699,3 +1699,40 @@ pt_free_all(void) managed_proxy_list=NULL; } } + +/** Return a newly allocated string equal to <b>string</b>, except that every + * character in <b>chars_to_escape</b> is preceded by a backslash. */ +char * +tor_escape_str_for_pt_args(const char *string, const char *chars_to_escape) +{ + char *new_string = NULL; + char *new_cp = NULL; + size_t length, new_length; + + tor_assert(string); + + length = strlen(string); + + if (!length) /* If we were given the empty string, return the same. */ + return tor_strdup(""); + /* (new_length > SIZE_MAX) => ((length * 2) + 1 > SIZE_MAX) => + (length*2 > SIZE_MAX - 1) => (length > (SIZE_MAX - 1)/2) */ + if (length > (SIZE_MAX - 1)/2) /* check for overflow */ + return NULL; + + /* this should be enough even if all characters must be escaped */ + new_length = (length * 2) + 1; + + new_string = new_cp = tor_malloc(new_length); + + while (*string) { + if (strchr(chars_to_escape, *string)) + *new_cp++ = '\'; + + *new_cp++ = *string++; + } + + *new_cp = '\0'; /* NUL-terminate the new string */ + + return new_string; +} diff --git a/src/or/transports.h b/src/or/transports.h index 0bd96e095..d304dcd48 100644 --- a/src/or/transports.h +++ b/src/or/transports.h @@ -66,6 +66,9 @@ char *pt_stringify_socks_args(const smartlist_t *socks_args); char *pt_get_socks_args_for_proxy_addrport(const tor_addr_t *addr, uint16_t port);
+char *tor_escape_str_for_pt_args(const char *string, + const char *chars_to_escape); + #ifdef PT_PRIVATE /** State of the managed proxy configuration protocol. */ enum pt_proto_state { diff --git a/src/test/test_util.c b/src/test/test_util.c index 4d171d5d0..a6fb0ce84 100644 --- a/src/test/test_util.c +++ b/src/test/test_util.c @@ -15,6 +15,7 @@ #include "common/buffers.h" #include "or/config.h" #include "or/control.h" +#include "or/transports.h" #include "lib/crypt_ops/crypto_rand.h" #include "test/test.h" #include "lib/memarea/memarea.h"