|
@@ -519,7 +519,8 @@ WRA_MORE_SEVERE(was_router_added_t a, was_router_added_t b)
|
|
|
/** As for dirserv_add_descriptor(), but accepts multiple documents, and
|
|
|
* returns the most severe error that occurred for any one of them. */
|
|
|
was_router_added_t
|
|
|
-dirserv_add_multiple_descriptors(const char *desc, uint8_t purpose,
|
|
|
+dirserv_add_multiple_descriptors(const char *desc, size_t desclen,
|
|
|
+ uint8_t purpose,
|
|
|
const char *source,
|
|
|
const char **msg)
|
|
|
{
|
|
@@ -536,6 +537,11 @@ dirserv_add_multiple_descriptors(const char *desc, uint8_t purpose,
|
|
|
|
|
|
r=ROUTER_ADDED_SUCCESSFULLY; /*Least severe return value. */
|
|
|
|
|
|
+ if (!string_is_utf8_no_bom(desc, desclen)) {
|
|
|
+ *msg = "descriptor(s) or extrainfo(s) not valid UTF-8 or had BOM.";
|
|
|
+ return ROUTER_AUTHDIR_REJECTS;
|
|
|
+ }
|
|
|
+
|
|
|
format_iso_time(time_buf, now);
|
|
|
if (tor_snprintf(annotation_buf, sizeof(annotation_buf),
|
|
|
"@uploaded-at %s\n"
|
|
@@ -552,7 +558,7 @@ dirserv_add_multiple_descriptors(const char *desc, uint8_t purpose,
|
|
|
|
|
|
s = desc;
|
|
|
list = smartlist_new();
|
|
|
- if (!router_parse_list_from_string(&s, NULL, list, SAVED_NOWHERE, 0, 0,
|
|
|
+ if (!router_parse_list_from_string(&s, s+desclen, list, SAVED_NOWHERE, 0, 0,
|
|
|
annotation_buf, NULL)) {
|
|
|
SMARTLIST_FOREACH(list, routerinfo_t *, ri, {
|
|
|
msg_out = NULL;
|
|
@@ -568,7 +574,7 @@ dirserv_add_multiple_descriptors(const char *desc, uint8_t purpose,
|
|
|
smartlist_clear(list);
|
|
|
|
|
|
s = desc;
|
|
|
- if (!router_parse_list_from_string(&s, NULL, list, SAVED_NOWHERE, 1, 0,
|
|
|
+ if (!router_parse_list_from_string(&s, s+desclen, list, SAVED_NOWHERE, 1, 0,
|
|
|
NULL, NULL)) {
|
|
|
SMARTLIST_FOREACH(list, extrainfo_t *, ei, {
|
|
|
msg_out = NULL;
|