[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [tor/master] Stop modifying const argument in handle_control_postdescriptor
commit d59c4063f393774c2c4328061b1e47c7dbb0250c
Author: Nick Mathewson <nickm@xxxxxxxxxxxxxx>
Date: Wed Apr 15 10:47:50 2015 -0400
Stop modifying const argument in handle_control_postdescriptor
Fixes 15546.
---
changes/bug15546 | 4 ++++
src/or/control.c | 9 ++++++---
2 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/changes/bug15546 b/changes/bug15546
new file mode 100644
index 0000000..b33b0aa
--- /dev/null
+++ b/changes/bug15546
@@ -0,0 +1,4 @@
+ o Minor bugfixes:
+ - For correctness, avoid modifying a constant string in
+ handle_control_postdescriptor. Fixes bug 15546; bugfix on
+ 0.1.1.16-rc.
\ No newline at end of file
diff --git a/src/or/control.c b/src/or/control.c
index 5ec97bd..9b0981d 100644
--- a/src/or/control.c
+++ b/src/or/control.c
@@ -2733,12 +2733,14 @@ handle_control_postdescriptor(control_connection_t *conn, uint32_t len,
uint8_t purpose = ROUTER_PURPOSE_GENERAL;
int cache = 0; /* eventually, we may switch this to 1 */
- char *cp = memchr(body, '\n', len);
+ const char *cp = memchr(body, '\n', len);
smartlist_t *args = smartlist_new();
tor_assert(cp);
- *cp++ = '\0';
+ ++cp;
- smartlist_split_string(args, body, " ",
+ char *cmdline = tor_memdup_nulterm(body, cp-body);
+
+ smartlist_split_string(args, cmdline, " ",
SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
SMARTLIST_FOREACH_BEGIN(args, char *, option) {
if (!strcasecmpstart(option, "purpose=")) {
@@ -2787,6 +2789,7 @@ handle_control_postdescriptor(control_connection_t *conn, uint32_t len,
done:
SMARTLIST_FOREACH(args, char *, arg, tor_free(arg));
smartlist_free(args);
+ tor_free(cmdline);
return 0;
}
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits