The fmt chunk is not required to be the first chunk after the header. There is a easy solution to skip the chunks between the header and fmt chunk:
UInt32 fmtType = rd.ReadUInt32();
while (fmtType != MAGIC_fmt)
{
rd.ReadBytes(rd.ReadInt32());
fmtType = rd.ReadUInt32();
}