From 9bdd1001510bedcca63fb8bd62022c120ddfdf20 Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Tue, 22 Feb 2011 17:43:11 -0500 Subject: [PATCH] Sanitize v_seen and v_answered during export (cherry picked from commit eeda2be5a606771a06a74cca7705f4a7ec12c7fa) --- citadel/modules/migrate/serv_migrate.c | 32 +++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/citadel/modules/migrate/serv_migrate.c b/citadel/modules/migrate/serv_migrate.c index 4eeb576e5..e4f06906d 100644 --- a/citadel/modules/migrate/serv_migrate.c +++ b/citadel/modules/migrate/serv_migrate.c @@ -148,7 +148,11 @@ void migr_export_rooms_backend(struct ctdlroom *buf, void *data) { cprintf("%ld\n", buf->QRhighest); cprintf("%ld\n", (long)buf->QRgen); cprintf("%u\n", buf->QRflags); - client_write("", 11); xml_strout(buf->QRdirname); client_write("\n", 13); + if (buf->QRflags & QR_DIRECTORY) { + client_write("", 11); + xml_strout(buf->QRdirname); + client_write("\n", 13); + } cprintf("%ld\n", buf->QRinfo); cprintf("%d\n", buf->QRfloor); cprintf("%ld\n", (long)buf->QRmtime); @@ -214,6 +218,23 @@ void migr_export_floors(void) { } +/* + * Return nonzero if the supplied string contains only characters which are valid in a sequence set. + */ +int is_sequence_set(char *s) { + if (!s) return(0); + + char *c = s; + char ch; + while (ch = *c++, ch) { + if (!strchr("0123456789*,:", ch)) { + return(0); + } + } + return(1); +} + + /* * Traverse the visits file... @@ -237,7 +258,7 @@ void migr_export_visits(void) { cprintf("%ld\n", vbuf.v_usernum); client_write("", 8); - if (!IsEmptyStr(vbuf.v_seen)) { + if ( (!IsEmptyStr(vbuf.v_seen)) && (is_sequence_set(vbuf.v_seen)) ) { xml_strout(vbuf.v_seen); } else { @@ -245,7 +266,12 @@ void migr_export_visits(void) { } client_write("", 9); - client_write("", 12); xml_strout(vbuf.v_answered); client_write("\n", 14); + if ( (!IsEmptyStr(vbuf.v_answered)) && (is_sequence_set(vbuf.v_answered)) ) { + client_write("", 12); + xml_strout(vbuf.v_answered); + client_write("\n", 14); + } + cprintf("%u\n", vbuf.v_flags); cprintf("%d\n", vbuf.v_view); client_write("\n", 9); -- 2.30.2