aboutsummaryrefslogtreecommitdiff
path: root/Foundation/GTMNSString+HTML.m
diff options
context:
space:
mode:
Diffstat (limited to 'Foundation/GTMNSString+HTML.m')
-rw-r--r--Foundation/GTMNSString+HTML.m20
1 files changed, 12 insertions, 8 deletions
diff --git a/Foundation/GTMNSString+HTML.m b/Foundation/GTMNSString+HTML.m
index 04ec23a..c35e760 100644
--- a/Foundation/GTMNSString+HTML.m
+++ b/Foundation/GTMNSString+HTML.m
@@ -486,12 +486,14 @@ static int EscapeMapCompare(const void *ucharVoid, const void *mapVoid) {
NSScanner *scanner = [NSScanner scannerWithString:hexSequence];
unsigned value;
if ([scanner scanHexInt:&value] &&
- value < USHRT_MAX &&
+ value < INT_MAX &&
value > 0
&& [scanner scanLocation] == length - 4) {
- unichar uchar = (unichar)value;
- NSString *charString = [NSString stringWithCharacters:&uchar length:1];
- [finalString replaceCharactersInRange:escapeRange withString:charString];
+ value = NSSwapHostIntToLittle(value);
+ NSString *charString = [[NSString alloc] initWithBytes:&value length:sizeof(value) encoding:NSUTF32LittleEndianStringEncoding];
+ if (charString) {
+ [finalString replaceCharactersInRange:escapeRange withString:charString];
+ }
}
} else {
@@ -500,12 +502,14 @@ static int EscapeMapCompare(const void *ucharVoid, const void *mapVoid) {
NSScanner *scanner = [NSScanner scannerWithString:numberSequence];
int value;
if ([scanner scanInt:&value] &&
- value < USHRT_MAX &&
+ value < INT_MAX &&
value > 0
&& [scanner scanLocation] == length - 3) {
- unichar uchar = (unichar)value;
- NSString *charString = [NSString stringWithCharacters:&uchar length:1];
- [finalString replaceCharactersInRange:escapeRange withString:charString];
+ value = NSSwapHostIntToLittle(value);
+ NSString *charString = [[NSString alloc] initWithBytes:&value length:sizeof(value) encoding:NSUTF32LittleEndianStringEncoding];
+ if (charString) {
+ [finalString replaceCharactersInRange:escapeRange withString:charString];
+ }
}
}
} else {