[tor-commits] [obfsproxy/master] Fix obfs2 argument parsing.
asn at torproject.org
asn at torproject.org
Tue Apr 17 13:51:29 UTC 2012
commit ee63d3fa345ed7230d229433416e75d4c43d7436
Author: George Kadianakis <desnacked at riseup.net>
Date: Wed Apr 11 22:31:30 2012 +0200
Fix obfs2 argument parsing.
Keep a count of how many command line arguments we have left, so that
we know when to stop parsing.
---
ChangeLog | 5 +++++
src/protocols/obfs2.c | 11 ++++++++++-
2 files changed, 15 insertions(+), 1 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 2a7605c..ae2ee92 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Changes in version 0.1.4 - <not yet released>
+ - Fix crash when parsing obfs2 command line arguments. Fixes bug
+ #5141.
+
+
Changes in version 0.1.3 - 2012-04-03
- Display git revision when we start logging. Fixes part of bug
#5157.
diff --git a/src/protocols/obfs2.c b/src/protocols/obfs2.c
index 59c3d55..566c2ed 100644
--- a/src/protocols/obfs2.c
+++ b/src/protocols/obfs2.c
@@ -167,6 +167,7 @@ int
parse_and_set_options(int n_options, const char *const *options,
obfs2_config_t *cfg)
{
+ int options_left = n_options;
int got_dest=0;
int got_ss=0;
const char* defport;
@@ -177,7 +178,7 @@ parse_and_set_options(int n_options, const char *const *options,
}
/* Now parse the optional arguments */
- while (!strncmp(*options,"--",2)) {
+ while (options_left && !strncmp(*options,"--",2)) {
if (!strncmp(*options,"--dest=",7)) {
if (got_dest)
return -1;
@@ -201,9 +202,17 @@ parse_and_set_options(int n_options, const char *const *options,
log_warn("obfs2: Unknown argument '%s'.", *options);
return -1;
}
+ options_left--;
options++;
}
+ /* we still need to parse the mode and the listen address. */
+ if (options_left != 2) {
+ log_warn("obfs2 needs two options (mode, listen address), after its "
+ "optional arguments. You provided %d.", options_left);
+ return -1;
+ }
+
if (!strcmp(*options, "client")) {
defport = "48988"; /* bf5c */
cfg->mode = LSN_SIMPLE_CLIENT;
More information about the tor-commits
mailing list