[tor-commits] [goptlib/master] Bug 21261: forbid duplicate method names in TOR_PT_SERVER_BINDADDR.

dcf at torproject.org dcf at torproject.org
Sun Jan 22 07:21:30 UTC 2017


commit f1569079ca898d54e52a26b0bd1b5cc869310608
Author: David Fifield <david at bamsoftware.com>
Date:   Wed Jan 18 22:24:54 2017 -0800

    Bug 21261: forbid duplicate method names in TOR_PT_SERVER_BINDADDR.
---
 pt.go      |  7 +++++++
 pt_test.go | 12 ++++++++++++
 2 files changed, 19 insertions(+)

diff --git a/pt.go b/pt.go
index 20917a4..8cd5ff9 100644
--- a/pt.go
+++ b/pt.go
@@ -556,6 +556,7 @@ func getServerBindaddrs() ([]Bindaddr, error) {
 	if err != nil {
 		return nil, err
 	}
+	seenMethods := make(map[string]bool)
 	for _, spec := range strings.Split(serverBindaddr, ",") {
 		var bindaddr Bindaddr
 
@@ -564,6 +565,12 @@ func getServerBindaddrs() ([]Bindaddr, error) {
 			return nil, envError(fmt.Sprintf("TOR_PT_SERVER_BINDADDR: %q: doesn't contain \"-\"", spec))
 		}
 		bindaddr.MethodName = parts[0]
+		// Check for duplicate method names: "Applications MUST NOT set
+		// more than one <address>:<port> pair per PT name."
+		if seenMethods[bindaddr.MethodName] {
+			return nil, envError(fmt.Sprintf("TOR_PT_SERVER_BINDADDR: %q: duplicate method name %q", spec, bindaddr.MethodName))
+		}
+		seenMethods[bindaddr.MethodName] = true
 		addr, err := resolveAddr(parts[1])
 		if err != nil {
 			return nil, envError(fmt.Sprintf("TOR_PT_SERVER_BINDADDR: %q: %s", spec, err.Error()))
diff --git a/pt_test.go b/pt_test.go
index 0d641fe..fb9e61f 100644
--- a/pt_test.go
+++ b/pt_test.go
@@ -302,6 +302,18 @@ func TestGetServerBindaddrs(t *testing.T) {
 			`alpha\,beta`,
 			"",
 		},
+		// duplicates in TOR_PT_SERVER_BINDADDR
+		// https://bugs.torproject.org/21261
+		{
+			`alpha-0.0.0.0:1234,alpha-[::]:1234`,
+			`alpha`,
+			"",
+		},
+		{
+			`alpha-0.0.0.0:1234,alpha-0.0.0.0:1234`,
+			`alpha`,
+			"",
+		},
 	}
 	goodTests := [...]struct {
 		ptServerBindaddr         string



More information about the tor-commits mailing list