@@ -355,16 +355,17 @@ } static inline OFNumber* parseNumber(const char *restrict *pointer, const char *stop) { + BOOL isHex = (*pointer + 1 < stop && (*pointer)[1] == 'x'); BOOL hasDecimal = NO; size_t i; OFString *string; OFNumber *number; - for (i = 1; *pointer + i < stop; i++) { + for (i = 0; *pointer + i < stop; i++) { if ((*pointer)[i] == '.') hasDecimal = YES; if ((*pointer)[i] == ' ' || (*pointer)[i] == '\t' || (*pointer)[i] == '\r' || (*pointer)[i] == '\n' || @@ -379,10 +380,13 @@ @try { if (hasDecimal) number = [OFNumber numberWithDouble: [string doubleValue]]; + else if (isHex) + number = [OFNumber numberWithIntMax: + [string hexadecimalValue]]; else number = [OFNumber numberWithIntMax: [string decimalValue]]; } @finally { [string release]; @@ -446,10 +450,11 @@ case '6': case '7': case '8': case '9': case '-': + case '.': return parseNumber(pointer, stop); default: return nil; } }