aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.am1
-rw-r--r--changes/bug14142-parse-virtual-addr7
-rw-r--r--configure.ac5
-rw-r--r--src/common/tortls.c22
-rw-r--r--src/common/util.c2
-rw-r--r--src/or/addressmap.c6
6 files changed, 40 insertions, 3 deletions
diff --git a/Makefile.am b/Makefile.am
index f105464b71..67c9cc9d25 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -19,6 +19,7 @@ noinst_PROGRAMS=
DISTCLEANFILES=
bin_SCRIPTS=
AM_CPPFLAGS=
+AM_CFLAGS = @TOR_SYSTEMD_CFLAGS@
include src/include.am
include doc/include.am
include contrib/include.am
diff --git a/changes/bug14142-parse-virtual-addr b/changes/bug14142-parse-virtual-addr
new file mode 100644
index 0000000000..f78b7c7d81
--- /dev/null
+++ b/changes/bug14142-parse-virtual-addr
@@ -0,0 +1,7 @@
+ o Minor bugfixes (client):
+ - Check for a missing option value in parse_virtual_addr_network
+ before asserting on the NULL in tor_addr_parse_mask_ports.
+ This avoids crashing on torrc lines like
+ Vi[rtualAddrNetworkIPv[4|6]] when no value follows the option.
+ Bugfix on 0.2.3 (de4cc126cbb5 on 24 November 2012), fixes #14142.
+ Patch by "teor".
diff --git a/configure.ac b/configure.ac
index 2c92a6c409..1fd5960366 100644
--- a/configure.ac
+++ b/configure.ac
@@ -130,9 +130,10 @@ fi
if test x$have_systemd = xyes; then
AC_DEFINE(HAVE_SYSTEMD,1,[Have systemd])
- CFLAGS="${CFLAGS} ${SYSTEMD_CFLAGS}"
+ TOR_SYSTEMD_CFLAGS="${SYSTEMD_CFLAGS}"
TOR_SYSTEMD_LIBS="${SYSTEMD_LIBS}"
fi
+AC_SUBST(TOR_SYSTEMD_CFLAGS)
AC_SUBST(TOR_SYSTEMD_LIBS)
if test x$enable_systemd = xyes -a x$have_systemd != xyes ; then
@@ -1543,7 +1544,7 @@ fi
if test "$GCC" = yes; then
# Disable GCC's strict aliasing checks. They are an hours-to-debug
# accident waiting to happen.
- CFLAGS="$CFLAGS -Wall -fno-strict-aliasing -g -O2"
+ CFLAGS="$CFLAGS -Wall -fno-strict-aliasing"
else
# Override optimization level for non-gcc compilers
CFLAGS="$CFLAGS -O"
diff --git a/src/common/tortls.c b/src/common/tortls.c
index dd33b330dc..ca629135a6 100644
--- a/src/common/tortls.c
+++ b/src/common/tortls.c
@@ -29,6 +29,20 @@
#include <ws2tcpip.h>
#endif
#endif
+
+#ifdef __GNUC__
+#define GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)
+#endif
+
+#if __GNUC__ && GCC_VERSION >= 402
+#if GCC_VERSION >= 406
+#pragma GCC diagnostic push
+#endif
+/* Some versions of OpenSSL declare SSL_get_selected_srtp_profile twice in
+ * srtp.h. Suppress the GCC warning so we can build with -Wredundant-decl. */
+#pragma GCC diagnostic ignored "-Wredundant-decls"
+#endif
+
#include <openssl/ssl.h>
#include <openssl/ssl3.h>
#include <openssl/err.h>
@@ -37,6 +51,14 @@
#include <openssl/bio.h>
#include <openssl/opensslv.h>
+#if __GNUC__ && GCC_VERSION >= 402
+#if GCC_VERSION >= 406
+#pragma GCC diagnostic pop
+#else
+#pragma GCC diagnostic warning "-Wredundant-decls"
+#endif
+#endif
+
#ifdef USE_BUFFEREVENTS
#include <event2/bufferevent_ssl.h>
#include <event2/buffer.h>
diff --git a/src/common/util.c b/src/common/util.c
index e5dec99707..edd0ae895f 100644
--- a/src/common/util.c
+++ b/src/common/util.c
@@ -2966,7 +2966,7 @@ expand_filename(const char *filename)
tor_free(username);
rest = slash ? (slash+1) : "";
#else
- log_warn(LD_CONFIG, "Couldn't expend homedir on system without pwd.h");
+ log_warn(LD_CONFIG, "Couldn't expand homedir on system without pwd.h");
return tor_strdup(filename);
#endif
}
diff --git a/src/or/addressmap.c b/src/or/addressmap.c
index 8ad24323b5..9d92eb7903 100644
--- a/src/or/addressmap.c
+++ b/src/or/addressmap.c
@@ -744,6 +744,12 @@ parse_virtual_addr_network(const char *val, sa_family_t family,
const int max_bits = ipv6 ? 40 : 16;
virtual_addr_conf_t *conf = ipv6 ? &virtaddr_conf_ipv6 : &virtaddr_conf_ipv4;
+ if (!val || val[0] == '\0') {
+ if (msg)
+ tor_asprintf(msg, "Value not present (%s) after VirtualAddressNetwork%s",
+ val?"Empty":"NULL", ipv6?"IPv6":"");
+ return -1;
+ }
if (tor_addr_parse_mask_ports(val, 0, &addr, &bits, NULL, NULL) < 0) {
if (msg)
tor_asprintf(msg, "Error parsing VirtualAddressNetwork%s %s",