I'm using xml-rpc.net as the library that supports xml-rpc for the MetaWeblog api in PostXING.

I recently ran into a service endpoint that included a Byte Order Mark in the payload of the response. Something I haven't run into yet basically because the few blog engines that I have tested px with have not included this. It turns out that the XmlDocument.Load method that accepts a stream doesn't take this into account (or something:).

So this is what I did to workaround the problem: basically, if the first character is not <, the second must be otherwise the content is invalid anyways.

//...the DeserializeResponse method that accepts a stream
StreamReader sr = new StreamReader(stm);

string content = sr.ReadToEnd();

if(content.Trim().Length > 0 && content[0] != '<'){
	content = content.Substring(1);
}

StringReader str = new StringReader(content);

try{
	xdoc.Load(str);
}

The other endpoints still work after this modification, so I guess it's okay.

update: there was an indexoutofrange exception just waiting to happen up there.