Index: src/OFXMLParser.m
==================================================================
--- src/OFXMLParser.m
+++ src/OFXMLParser.m
@@ -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 */
Index: tests/OFXMLParserTests.m
==================================================================
--- tests/OFXMLParserTests.m
+++ tests/OFXMLParserTests.m
@@ -111,11 +111,11 @@
/* FIXME: Namespace */
TEST(msg, et == TAG_END && [name isEqual: @"bar"] &&
[prefix isEqual: @"foo"] && ns == nil)
break;
case 11:
- TEST(msg, et == COMMENT && [comment isEqual: @"foo bär-baz"])
+ TEST(msg, et == COMMENT && [comment isEqual: @"foobär baz"])
break;
default:
TEST(msg, NO)
break;
}
@@ -185,13 +185,13 @@
- (void)XMLParserTests
{
OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init];
OFXMLParser *parser;
- const char *str = "bar\r\n"
- "foo<barbar quxbar\r\n"
- "";
+ const char *str = "bar\r\nfoo<barbar quxbar\r\n";
size_t j, len;
TEST(@"+[xmlParser]", (parser = [OFXMLParser xmlParser]))
TEST(@"-[setDelegate:]", R([parser setDelegate: self]))