@@ -180,11 +180,12 @@ } break; /* Inside a tag, no name yet */ case OF_XMLPARSER_IN_TAG_NAME: - if (buf[i] == ' ' || buf[i] == '>' || buf[i] == '/') { + if (buf[i] == ' ' || buf[i] == '\n' || buf[i] == '\r' || + buf[i] == '>' || buf[i] == '/') { const char *cache_c, *tmp; size_t cache_len; len = i - last; if (len > 0) @@ -243,11 +244,12 @@ } break; /* Inside a close tag, no name yet */ case OF_XMLPARSER_IN_CLOSE_TAG_NAME: - if (buf[i] == ' ' || buf[i] == '>') { + if (buf[i] == ' ' || buf[i] == '\n' || buf[i] == '\r' || + buf[i] == '>') { const char *cache_c, *tmp; size_t cache_len; len = i - last; if (len > 0) @@ -290,11 +292,12 @@ [prefix release]; [ns release]; name = prefix = ns = nil; last = i + 1; - state = (buf[i] == ' ' + state = (buf[i] == ' ' || buf[i] == '\n' || + buf[i] == '\r' ? OF_XMLPARSER_EXPECT_SPACE_OR_CLOSE : OF_XMLPARSER_OUTSIDE_TAG); } break; @@ -334,11 +337,12 @@ last = i + 1; state = (buf[i] == '/' ? OF_XMLPARSER_EXPECT_CLOSE : OF_XMLPARSER_OUTSIDE_TAG); - } else if (buf[i] != ' ') { + } else if (buf[i] != ' ' && buf[i] != '\n' && + buf[i] != '\r') { last = i; state = OF_XMLPARSER_IN_ATTR_NAME; i--; } break; @@ -435,11 +439,12 @@ /* Expecting closing '>' or space */ case OF_XMLPARSER_EXPECT_SPACE_OR_CLOSE: if (buf[i] == '>') { last = i + 1; state = OF_XMLPARSER_OUTSIDE_TAG; - } else if (buf[i] != ' ') + } else if (buf[i] != ' ' && buf[i] != '\n' && + buf[i] != '\r') @throw [OFMalformedXMLException newWithClass: isa]; break; /* Comment */