From 1bf651cc0caaf9d1ee2163bc7aaa85165fa32bfa Mon Sep 17 00:00:00 2001 From: rfm Date: Tue, 5 Dec 2006 14:20:55 +0000 Subject: [PATCH] Add a couple of tests for errors. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@24186 72102866-910b-0410-8b05-ffd578937521 --- ChangeLog | 6 ++++++ Source/NSString.m | 10 +++++++++- Source/NSURL.m | 31 +++++++++++++++++-------------- 3 files changed, 32 insertions(+), 15 deletions(-) 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)