From: Art Cancro Date: Tue, 22 Feb 2011 22:43:11 +0000 (-0500) Subject: Sanitize v_seen and v_answered during export X-Git-Tag: v7.86~9 X-Git-Url: https://code.citadel.org/?p=citadel.git;a=commitdiff_plain;h=9bdd1001510bedcca63fb8bd62022c120ddfdf20 Sanitize v_seen and v_answered during export (cherry picked from commit eeda2be5a606771a06a74cca7705f4a7ec12c7fa) --- 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);