@@ -994,10 +994,11 @@ - (uintmax_t)hexadecimalValue { int i = 0; uintmax_t num = 0; + BOOL suffix = NO; if (length == 0) return 0; if (length >= 2 && string[0] == '0' && string[1] == 'x') @@ -1009,17 +1010,23 @@ @throw [OFInvalidEncodingException newWithClass: isa]; for (; i < length; i++) { uintmax_t newnum; + if (suffix) + @throw [OFInvalidEncodingException newWithClass: isa]; + if (string[i] >= '0' && string[i] <= '9') newnum = (num << 4) | (string[i] - '0'); else if (string[i] >= 'A' && string[i] <= 'F') newnum = (num << 4) | (string[i] - 'A' + 10); else if (string[i] >= 'a' && string[i] <= 'f') newnum = (num << 4) | (string[i] - 'a' + 10); - else + else if (string[i] == 'h') { + suffix = YES; + continue; + } else @throw [OFInvalidEncodingException newWithClass: isa]; if (newnum < num) @throw [OFOutOfRangeException newWithClass: isa];