aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/common/util.c10
-rw-r--r--src/common/util.h3
-rw-r--r--src/or/transports.c2
-rw-r--r--src/test/test_util.c10
4 files changed, 12 insertions, 13 deletions
diff --git a/src/common/util.c b/src/common/util.c
index d9913dda4..bd38a6280 100644
--- a/src/common/util.c
+++ b/src/common/util.c
@@ -1223,17 +1223,15 @@ escaped(const char *s)
return escaped_val_;
}
-/** Escape every ";" or "\" character of <b>string</b>. Use
- * <b>escape_char</b> as the character to use for escaping.
- * The returned string is allocated on the heap and it's the
- * responsibility of the caller to free it. */
+/** Escape every character of <b>string</b> that is in
+ * <b>chars_to_escape</b>. The returned string is allocated on the
+ * heap and it's the responsibility of the caller to free it. */
char *
-tor_escape_str_for_socks_arg(const char *string)
+tor_escape_str_for_socks_arg(const char *string, const char *chars_to_escape)
{
char *new_string = NULL;
char *new_cp = NULL;
size_t length, new_length;
- static const char *chars_to_escape = ";\\";
tor_assert(string);
diff --git a/src/common/util.h b/src/common/util.h
index ad7526658..ba0ec9868 100644
--- a/src/common/util.h
+++ b/src/common/util.h
@@ -231,7 +231,8 @@ int tor_digest256_is_zero(const char *digest);
char *esc_for_log(const char *string) ATTR_MALLOC;
const char *escaped(const char *string);
-char *tor_escape_str_for_socks_arg(const char *string);
+char *tor_escape_str_for_socks_arg(const char *string,
+ const char *chars_to_escape);
struct smartlist_t;
int tor_vsscanf(const char *buf, const char *pattern, va_list ap) \
diff --git a/src/or/transports.c b/src/or/transports.c
index cfec70340..6f1770238 100644
--- a/src/or/transports.c
+++ b/src/or/transports.c
@@ -1440,7 +1440,7 @@ pt_stringify_socks_args(const smartlist_t *socks_args)
SMARTLIST_FOREACH_BEGIN(socks_args, const char *, s) {
/* Escape ';' and '\'. */
- escaped_string = tor_escape_str_for_socks_arg(s);
+ escaped_string = tor_escape_str_for_socks_arg(s, ";\\");
if (!escaped_string)
goto done;
diff --git a/src/test/test_util.c b/src/test/test_util.c
index 2cc25e986..54a089b36 100644
--- a/src/test/test_util.c
+++ b/src/test/test_util.c
@@ -803,30 +803,30 @@ test_util_escape_string_socks(void)
char *escaped_string = NULL;
/** Simple backslash escape. */
- escaped_string = tor_escape_str_for_socks_arg("This is a backslash: \\");
+ escaped_string = tor_escape_str_for_socks_arg("This is a backslash: \\", ";\\");
test_assert(escaped_string);
test_streq(escaped_string, "This is a backslash: \\\\");
tor_free(escaped_string);
/** Simple semicolon escape. */
- escaped_string = tor_escape_str_for_socks_arg("First rule: Do not use ;");
+ escaped_string = tor_escape_str_for_socks_arg("First rule: Do not use ;", ";\\");
test_assert(escaped_string);
test_streq(escaped_string, "First rule: Do not use \\;");
tor_free(escaped_string);
/** Empty string. */
- escaped_string = tor_escape_str_for_socks_arg("");
+ escaped_string = tor_escape_str_for_socks_arg("", ";\\");
test_assert(escaped_string);
test_streq(escaped_string, "");
tor_free(escaped_string);
/** Escape all characters. */
- escaped_string = tor_escape_str_for_socks_arg(";\\;\\");
+ escaped_string = tor_escape_str_for_socks_arg(";\\;\\", ";\\");
test_assert(escaped_string);
test_streq(escaped_string, "\\;\\\\\\;\\\\");
tor_free(escaped_string);
- escaped_string = tor_escape_str_for_socks_arg(";");
+ escaped_string = tor_escape_str_for_socks_arg(";", ";\\");
test_assert(escaped_string);
test_streq(escaped_string, "\\;");
tor_free(escaped_string);