r108204 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r108203‎ | r108204 | r108205 >
Date:09:16, 6 January 2012
Author:ariel
Status:deferred
Tags:
Comment:
skip potential garbage after siteinfo header and before page tag
Modified paths:
  • /branches/ariel/xmldumps-backup/writeuptopageid.c (modified) (history)

Diff [purge]

Index: branches/ariel/xmldumps-backup/writeuptopageid.c
@@ -4,7 +4,7 @@
55 #include <errno.h>
66 #include <string.h>
77
8 -typedef enum { None, StartHeader, StartPage, AtPageID, WriteMem, Write, EndPage, AtLastPageID } States;
 8+typedef enum { None, StartHeader, EndHeader, StartPage, AtPageID, WriteMem, Write, EndPage, AtLastPageID } States;
99
1010 /* assume the header is never going to be longer than 1000 x 80 4-byte characters... how many
1111 namespaces will one project want? */
@@ -29,9 +29,20 @@
3030 States setState (char *line, States currentState, int startPageID, int endPageID) {
3131 int pageID = 0;
3232
 33+ if (currentState == EndHeader) {
 34+ /* if we have junk after the header we don't write it.
 35+ commands like dumpbz2filefromoffset can produce such streams. */
 36+ if (strncmp(line,"<page>",6)) {
 37+ return(None);
 38+ }
 39+ }
 40+
3341 if (!strncmp(line,"<mediawiki",10)) {
3442 return(StartHeader);
3543 }
 44+ else if (!strncmp(line,"</siteinfo>",11)) {
 45+ return(EndHeader);
 46+ }
3647 else if (!strncmp(line,"<page>",6)) {
3748 return(StartPage);
3849 }
@@ -87,7 +98,7 @@
8899
89100 /* returns 1 on success, 0 on error */
90101 int writeIfNeeded(char *line, States state) {
91 - if (state == StartHeader || state == WriteMem || state == Write || state == EndPage) {
 102+ if (state == StartHeader || state == EndHeader || state == WriteMem || state == Write || state == EndPage) {
92103 return(fwrite(line,strlen(line),1,stdout));
93104 }
94105 }

Status & tagging log