|
@@ -3633,12 +3633,15 @@ handle_control_postdescriptor(control_connection_t *conn, uint32_t len,
|
|
int cache = 0; /* eventually, we may switch this to 1 */
|
|
int cache = 0; /* eventually, we may switch this to 1 */
|
|
|
|
|
|
const char *cp = memchr(body, '\n', len);
|
|
const char *cp = memchr(body, '\n', len);
|
|
- smartlist_t *args = smartlist_new();
|
|
|
|
- tor_assert(cp);
|
|
|
|
|
|
+
|
|
|
|
+ if (cp == NULL) {
|
|
|
|
+ connection_printf_to_buf(conn, "251 Empty body\r\n");
|
|
|
|
+ return 0;
|
|
|
|
+ }
|
|
++cp;
|
|
++cp;
|
|
|
|
|
|
char *cmdline = tor_memdup_nulterm(body, cp-body);
|
|
char *cmdline = tor_memdup_nulterm(body, cp-body);
|
|
-
|
|
|
|
|
|
+ smartlist_t *args = smartlist_new();
|
|
smartlist_split_string(args, cmdline, " ",
|
|
smartlist_split_string(args, cmdline, " ",
|
|
SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
|
|
SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
|
|
SMARTLIST_FOREACH_BEGIN(args, char *, option) {
|
|
SMARTLIST_FOREACH_BEGIN(args, char *, option) {
|
|
@@ -4231,14 +4234,19 @@ handle_control_hspost(control_connection_t *conn,
|
|
const char *body)
|
|
const char *body)
|
|
{
|
|
{
|
|
static const char *opt_server = "SERVER=";
|
|
static const char *opt_server = "SERVER=";
|
|
- smartlist_t *args = smartlist_new();
|
|
|
|
smartlist_t *hs_dirs = NULL;
|
|
smartlist_t *hs_dirs = NULL;
|
|
const char *encoded_desc = body;
|
|
const char *encoded_desc = body;
|
|
size_t encoded_desc_len = len;
|
|
size_t encoded_desc_len = len;
|
|
|
|
|
|
char *cp = memchr(body, '\n', len);
|
|
char *cp = memchr(body, '\n', len);
|
|
|
|
+ if (cp == NULL) {
|
|
|
|
+ connection_printf_to_buf(conn, "251 Empty body\r\n");
|
|
|
|
+ return 0;
|
|
|
|
+ }
|
|
char *argline = tor_strndup(body, cp-body);
|
|
char *argline = tor_strndup(body, cp-body);
|
|
|
|
|
|
|
|
+ smartlist_t *args = smartlist_new();
|
|
|
|
+
|
|
/* If any SERVER= options were specified, try parse the options line */
|
|
/* If any SERVER= options were specified, try parse the options line */
|
|
if (!strcasecmpstart(argline, opt_server)) {
|
|
if (!strcasecmpstart(argline, opt_server)) {
|
|
/* encoded_desc begins after a newline character */
|
|
/* encoded_desc begins after a newline character */
|