mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-28 06:13:31 +01:00
Move tor_escape_str_for_pt_args into or/transports.c
This commit is contained in:
parent
30166261bb
commit
8c6ff9fec2
@ -225,43 +225,6 @@ add_laplace_noise(int64_t signal_, double random_, double delta_f,
|
|||||||
* String manipulation
|
* 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
|
* Time
|
||||||
* ===== */
|
* ===== */
|
||||||
|
@ -72,8 +72,6 @@ int64_t clamp_double_to_int64(double number);
|
|||||||
|
|
||||||
/* String manipulation */
|
/* String manipulation */
|
||||||
|
|
||||||
char *tor_escape_str_for_pt_args(const char *string,
|
|
||||||
const char *chars_to_escape);
|
|
||||||
|
|
||||||
/* Time helpers */
|
/* Time helpers */
|
||||||
long tv_udiff(const struct timeval *start, const struct timeval *end);
|
long tv_udiff(const struct timeval *start, const struct timeval *end);
|
||||||
|
@ -1699,3 +1699,40 @@ pt_free_all(void)
|
|||||||
managed_proxy_list=NULL;
|
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;
|
||||||
|
}
|
||||||
|
@ -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,
|
char *pt_get_socks_args_for_proxy_addrport(const tor_addr_t *addr,
|
||||||
uint16_t port);
|
uint16_t port);
|
||||||
|
|
||||||
|
char *tor_escape_str_for_pt_args(const char *string,
|
||||||
|
const char *chars_to_escape);
|
||||||
|
|
||||||
#ifdef PT_PRIVATE
|
#ifdef PT_PRIVATE
|
||||||
/** State of the managed proxy configuration protocol. */
|
/** State of the managed proxy configuration protocol. */
|
||||||
enum pt_proto_state {
|
enum pt_proto_state {
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
#include "common/buffers.h"
|
#include "common/buffers.h"
|
||||||
#include "or/config.h"
|
#include "or/config.h"
|
||||||
#include "or/control.h"
|
#include "or/control.h"
|
||||||
|
#include "or/transports.h"
|
||||||
#include "lib/crypt_ops/crypto_rand.h"
|
#include "lib/crypt_ops/crypto_rand.h"
|
||||||
#include "test/test.h"
|
#include "test/test.h"
|
||||||
#include "lib/memarea/memarea.h"
|
#include "lib/memarea/memarea.h"
|
||||||
|
Loading…
Reference in New Issue
Block a user