diff --git a/ChangeLog b/ChangeLog index 37831f161..7c47c6a86 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2006-12-05 Richard Frith-Macdonald + + * NSURL.m: Check for missing scheme and return nil. + * NSString.m: Check for character conversion failure when + getting a CString. + 2006-11-30 Richard Frith-Macdonald * Source/GSHTTPURLHandle.m: Limit size of handle cache to 16 to diff --git a/Source/NSString.m b/Source/NSString.m index 22e6e9a97..ef955875a 100644 --- a/Source/NSString.m +++ b/Source/NSString.m @@ -2564,7 +2564,15 @@ handle_printf_atsign (FILE *stream, unsigned length = [d length]; BOOL result = (length <= maxLength) ? YES : NO; - if (length > maxLength) length = maxLength; + if (d == nil) + { + [NSException raise: NSCharacterConversionException + format: @"Can't convert to C string."]; + } + if (length > maxLength) + { + length = maxLength; + } memcpy(buffer, [d bytes], length); buffer[length] = '\0'; return result; diff --git a/Source/NSURL.m b/Source/NSURL.m index 8ee6d56cb..4b996b7d9 100644 --- a/Source/NSURL.m +++ b/Source/NSURL.m @@ -700,21 +700,24 @@ static unsigned urlAlign; /* * Set up scheme specific parsing options. */ - if (buf->scheme != 0) + if (buf->scheme == 0) + { + DESTROY(self); // Not a valid URL + NS_VALRETURN(nil); + } + + if (strcmp(buf->scheme, "file") == 0) { - if (strcmp(buf->scheme, "file") == 0) - { - usesFragments = NO; - usesParameters = NO; - usesQueries = NO; - buf->isFile = YES; - } - else if (strcmp(buf->scheme, "mailto") == 0) - { - usesFragments = NO; - usesParameters = NO; - usesQueries = NO; - } + usesFragments = NO; + usesParameters = NO; + usesQueries = NO; + buf->isFile = YES; + } + else if (strcmp(buf->scheme, "mailto") == 0) + { + usesFragments = NO; + usesParameters = NO; + usesQueries = NO; } if (canBeGeneric == YES)