@@ -58,11 +58,10 @@ { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; char *str_c; size_t len, i, j; OFString *ret, *tmp; - OFIterator *iter; len = [name length] + 4; str_c = [self allocMemoryWithSize: len]; /* Start of tag */ @@ -69,41 +68,44 @@ *str_c = '<'; memcpy(str_c + 1, [name cString], [name length]); i = [name length] + 1; /* Attributes */ - iter = [attrs iterator]; - for (;;) { - OFString *key, *val; - - key = [iter nextObject]; - val = [iter nextObject]; - - if (key == nil || val == nil) - break; - - tmp = [val stringByXMLEscaping]; - - len += [key length] + [tmp length] + 4; - @try { - str_c = [self resizeMemory: str_c - toSize: len]; - } @catch (OFException *e) { - [self freeMemory: str_c]; - @throw e; - } - - str_c[i++] = ' '; - memcpy(str_c + i, [key cString], [key length]); - i += [key length]; - str_c[i++] = '='; - str_c[i++] = '\''; - memcpy(str_c + i, [tmp cString], [tmp length]); - i += [tmp length]; - str_c[i++] = '\''; - - [pool releaseObjects]; + if (attrs != nil) { + OFIterator *iter = [attrs iterator]; + + for (;;) { + of_iterator_pair_t pair; + + pair = [iter nextKeyObjectPair]; + + if (pair.key == nil || pair.object == nil) + break; + + tmp = [pair.object stringByXMLEscaping]; + + len += [pair.key length] + [tmp length] + 4; + @try { + str_c = [self resizeMemory: str_c + toSize: len]; + } @catch (OFException *e) { + [self freeMemory: str_c]; + @throw e; + } + + str_c[i++] = ' '; + memcpy(str_c + i, [pair.key cString], + [pair.key length]); + i += [pair.key length]; + str_c[i++] = '='; + str_c[i++] = '\''; + memcpy(str_c + i, [tmp cString], [tmp length]); + i += [tmp length]; + str_c[i++] = '\''; + + [pool releaseObjects]; + } } /* Childen */ if (stringval != nil || children != nil) { if (stringval != nil)