Fix issues pointed out by fred k.

This commit is contained in:
Gregory John Casamento 2020-04-02 06:08:17 -04:00
parent fd354f4167
commit 14274bffd2

View file

@ -55,15 +55,6 @@ function may be incorrect
NSArray *_queryItems; \ NSArray *_queryItems; \
NSString *_scheme; \ NSString *_scheme; \
NSString *_user; \ NSString *_user; \
NSString *_percentEncodedFragment; \
NSString *_percentEncodedHost; \
NSString *_percentEncodedPassword; \
NSString *_percentEncodedPath; \
NSNumber *_percentEncodedPort; \
NSString *_percentEncodedQuery; \
NSArray *_percentEncodedQueryItems; \
NSString *_percentEncodedScheme; \
NSString *_percentEncodedUser; \
NSRange _rangeOfFragment; \ NSRange _rangeOfFragment; \
NSRange _rangeOfHost; \ NSRange _rangeOfHost; \
NSRange _rangeOfPassword; \ NSRange _rangeOfPassword; \
@ -72,7 +63,8 @@ function may be incorrect
NSRange _rangeOfQuery; \ NSRange _rangeOfQuery; \
NSRange _rangeOfQueryItems; \ NSRange _rangeOfQueryItems; \
NSRange _rangeOfScheme; \ NSRange _rangeOfScheme; \
NSRange _rangeOfUser; NSRange _rangeOfUser; \
BOOL _dirty;
#import "common.h" #import "common.h"
#define EXPOSE_NSURL_IVARS 1 #define EXPOSE_NSURL_IVARS 1
@ -2404,15 +2396,6 @@ GS_PRIVATE_INTERNAL(NSURLComponents)
RELEASE(internal->_queryItems); RELEASE(internal->_queryItems);
RELEASE(internal->_scheme); RELEASE(internal->_scheme);
RELEASE(internal->_user); RELEASE(internal->_user);
RELEASE(internal->_percentEncodedFragment);
RELEASE(internal->_percentEncodedHost);
RELEASE(internal->_percentEncodedPassword);
RELEASE(internal->_percentEncodedPath);
RELEASE(internal->_percentEncodedPort);
RELEASE(internal->_percentEncodedQuery);
RELEASE(internal->_percentEncodedQueryItems);
RELEASE(internal->_percentEncodedScheme);
RELEASE(internal->_percentEncodedUser);
GS_DESTROY_INTERNAL(NSURLComponents); GS_DESTROY_INTERNAL(NSURLComponents);
[super dealloc]; [super dealloc];
} }
@ -2456,44 +2439,7 @@ GS_PRIVATE_INTERNAL(NSURLComponents)
ASSIGNCOPY(internal->_scheme, [url scheme]); ASSIGNCOPY(internal->_scheme, [url scheme]);
ASSIGNCOPY(internal->_user, [url user]); ASSIGNCOPY(internal->_user, [url user]);
// Percent encoded portions... _dirty = YES;
ASSIGNCOPY(internal->_percentEncodedFragment,
[internal->_fragment stringByAddingPercentEncodingWithAllowedCharacters:
[NSCharacterSet URLFragmentAllowedCharacterSet]]);
ASSIGNCOPY(internal->_percentEncodedHost,
[internal->_host stringByAddingPercentEncodingWithAllowedCharacters:
[NSCharacterSet URLHostAllowedCharacterSet]]);
ASSIGNCOPY(internal->_percentEncodedPassword,
[internal->_password stringByAddingPercentEncodingWithAllowedCharacters:
[NSCharacterSet URLPasswordAllowedCharacterSet]]);
ASSIGNCOPY(internal->_percentEncodedPath,
[internal->_path stringByAddingPercentEncodingWithAllowedCharacters:
[NSCharacterSet URLPathAllowedCharacterSet]]);
ASSIGNCOPY(internal->_percentEncodedQuery,
[internal->_query stringByAddingPercentEncodingWithAllowedCharacters:
[NSCharacterSet URLQueryAllowedCharacterSet]]);
ASSIGNCOPY(internal->_percentEncodedScheme,
[internal->_scheme stringByAddingPercentEncodingWithAllowedCharacters:
[NSCharacterSet URLPathAllowedCharacterSet]]);
ASSIGNCOPY(internal->_percentEncodedUser,
[internal->_user stringByAddingPercentEncodingWithAllowedCharacters:
[NSCharacterSet URLUserAllowedCharacterSet]]);
{
// Find ranges
NSString *urlString = [url absoluteString];
#define URL_COMPONENT_RANGE(part) \
(part ? [urlString rangeOfString:part] : NSMakeRange(NSNotFound, 0))
internal->_rangeOfFragment = URL_COMPONENT_RANGE(internal->_fragment);
internal->_rangeOfHost = URL_COMPONENT_RANGE(internal->_host);
internal->_rangeOfPassword = URL_COMPONENT_RANGE(internal->_password);
internal->_rangeOfPath = URL_COMPONENT_RANGE(internal->_path);
internal->_rangeOfPort = URL_COMPONENT_RANGE([internal->_port stringValue]);
internal->_rangeOfQuery = URL_COMPONENT_RANGE(internal->_query);
internal->_rangeOfScheme = URL_COMPONENT_RANGE(internal->_scheme);
internal->_rangeOfUser = URL_COMPONENT_RANGE(internal->_user);
#undef URL_COMPONENT_RANGE
}
} }
- (NSURL *)URLRelativeToURL: (NSURL *)baseURL - (NSURL *)URLRelativeToURL: (NSURL *)baseURL
@ -2504,17 +2450,41 @@ GS_PRIVATE_INTERNAL(NSURLComponents)
// Regenerate URL when components are changed... // Regenerate URL when components are changed...
- (void) _regenerateURL - (void) _regenerateURL
{ {
NSURL *u; if (_dirty == NO)
u = [[NSURL alloc] initWithScheme: internal->_scheme {
user: internal->_user return;
password: internal->_password }
host: internal->_host else
port: internal->_port {
fullPath: internal->_path NSURL *u;
parameterString: nil u = [[NSURL alloc] initWithScheme: internal->_scheme
query: internal->_query user: internal->_user
fragment: internal->_fragment]; password: internal->_password
ASSIGNCOPY(internal->_url, u); host: internal->_host
port: internal->_port
fullPath: internal->_path
parameterString: nil
query: internal->_query
fragment: internal->_fragment];
ASSIGNCOPY(internal->_url, u);
{
// Find ranges
NSString *urlString = [u absoluteString];
#define URL_COMPONENT_RANGE(part) \
(part ? [urlString rangeOfString:part] : NSMakeRange(NSNotFound, 0))
internal->_rangeOfFragment = URL_COMPONENT_RANGE(internal->_fragment);
internal->_rangeOfHost = URL_COMPONENT_RANGE(internal->_host);
internal->_rangeOfPassword = URL_COMPONENT_RANGE(internal->_password);
internal->_rangeOfPath = URL_COMPONENT_RANGE(internal->_path);
internal->_rangeOfPort = URL_COMPONENT_RANGE([internal->_port stringValue]);
internal->_rangeOfQuery = URL_COMPONENT_RANGE(internal->_query);
internal->_rangeOfScheme = URL_COMPONENT_RANGE(internal->_scheme);
internal->_rangeOfUser = URL_COMPONENT_RANGE(internal->_user);
#undef URL_COMPONENT_RANGE
}
_dirty = NO;
}
} }
// Accessing Components in Native Format // Accessing Components in Native Format
@ -2526,10 +2496,7 @@ GS_PRIVATE_INTERNAL(NSURLComponents)
- (void) setFragment: (NSString *)fragment - (void) setFragment: (NSString *)fragment
{ {
ASSIGNCOPY(internal->_fragment, fragment); ASSIGNCOPY(internal->_fragment, fragment);
ASSIGNCOPY(internal->_percentEncodedFragment, _dirty = YES;
[fragment stringByAddingPercentEncodingWithAllowedCharacters:
[NSCharacterSet URLFragmentAllowedCharacterSet]]);
[self _regenerateURL];
} }
- (NSString *) host - (NSString *) host
@ -2540,10 +2507,7 @@ GS_PRIVATE_INTERNAL(NSURLComponents)
- (void) setHost: (NSString *)host - (void) setHost: (NSString *)host
{ {
ASSIGNCOPY(internal->_host, host); ASSIGNCOPY(internal->_host, host);
ASSIGNCOPY(internal->_percentEncodedHost, _dirty = YES;
[host stringByAddingPercentEncodingWithAllowedCharacters:
[NSCharacterSet URLHostAllowedCharacterSet]]);
[self _regenerateURL];
} }
- (NSString *) password - (NSString *) password
@ -2554,10 +2518,7 @@ GS_PRIVATE_INTERNAL(NSURLComponents)
- (void) setPassword: (NSString *)password - (void) setPassword: (NSString *)password
{ {
ASSIGNCOPY(internal->_password, password); ASSIGNCOPY(internal->_password, password);
ASSIGNCOPY(internal->_percentEncodedPassword, _dirty = YES;
[password stringByAddingPercentEncodingWithAllowedCharacters:
[NSCharacterSet URLPasswordAllowedCharacterSet]]);
[self _regenerateURL];
} }
- (NSString *) path - (NSString *) path
@ -2568,10 +2529,7 @@ GS_PRIVATE_INTERNAL(NSURLComponents)
- (void) setPath: (NSString *)path - (void) setPath: (NSString *)path
{ {
ASSIGNCOPY(internal->_path, path); ASSIGNCOPY(internal->_path, path);
ASSIGNCOPY(internal->_percentEncodedPath, _dirty = YES;
[path stringByAddingPercentEncodingWithAllowedCharacters:
[NSCharacterSet URLPathAllowedCharacterSet]]);
[self _regenerateURL];
} }
- (NSNumber *) port - (NSNumber *) port
@ -2582,7 +2540,7 @@ GS_PRIVATE_INTERNAL(NSURLComponents)
- (void) setPort: (NSNumber *)port - (void) setPort: (NSNumber *)port
{ {
ASSIGNCOPY(internal->_port, port); ASSIGNCOPY(internal->_port, port);
[self _regenerateURL]; _dirty = YES;
} }
- (NSString *) query - (NSString *) query
@ -2637,8 +2595,8 @@ GS_PRIVATE_INTERNAL(NSURLComponents)
} }
ASSIGNCOPY(internal->_query, query); // add query string... ASSIGNCOPY(internal->_query, query); // add query string...
ASSIGNCOPY(internal->_percentEncodedQuery, query);
ASSIGNCOPY(internal->_queryItems, queryItems); ASSIGNCOPY(internal->_queryItems, queryItems);
_dirty = YES;
} }
- (NSString *) scheme - (NSString *) scheme
@ -2649,6 +2607,7 @@ GS_PRIVATE_INTERNAL(NSURLComponents)
- (void) setScheme: (NSString *)scheme - (void) setScheme: (NSString *)scheme
{ {
ASSIGNCOPY(internal->_scheme, scheme); ASSIGNCOPY(internal->_scheme, scheme);
_dirty = YES;
} }
- (NSString *) user - (NSString *) user
@ -2659,136 +2618,149 @@ GS_PRIVATE_INTERNAL(NSURLComponents)
- (void) setUser: (NSString *)user - (void) setUser: (NSString *)user
{ {
ASSIGNCOPY(internal->_user, user); ASSIGNCOPY(internal->_user, user);
ASSIGNCOPY(internal->_percentEncodedUser, _dirty = YES;
[user stringByAddingPercentEncodingWithAllowedCharacters:
[NSCharacterSet URLUserAllowedCharacterSet]]);
} }
// Accessing Components in PercentEncoded Format // Accessing Components in PercentEncoded Format
- (NSString *) percentEncodedFragment - (NSString *) percentEncodedFragment
{ {
return internal->_percentEncodedFragment; return [internal->_fragment stringByAddingPercentEncodingWithAllowedCharacters:
[NSCharacterSet URLFragmentAllowedCharacterSet]];
} }
- (void) setPercentEncodedFragment: (NSString *)fragment - (void) setPercentEncodedFragment: (NSString *)fragment
{ {
ASSIGNCOPY(internal->_percentEncodedFragment, fragment);
ASSIGNCOPY(internal->_fragment, [fragment stringByRemovingPercentEncoding]); ASSIGNCOPY(internal->_fragment, [fragment stringByRemovingPercentEncoding]);
_dirty = YES;
} }
- (NSString *) percentEncodedHost - (NSString *) percentEncodedHost
{ {
return internal->_percentEncodedHost; return [internal->_host stringByAddingPercentEncodingWithAllowedCharacters:
[NSCharacterSet URLHostAllowedCharacterSet]];
} }
- (void) setPercentEncodedHost: (NSString *)host - (void) setPercentEncodedHost: (NSString *)host
{ {
ASSIGNCOPY(internal->_percentEncodedHost, host);
ASSIGNCOPY(internal->_host, [host stringByRemovingPercentEncoding]); ASSIGNCOPY(internal->_host, [host stringByRemovingPercentEncoding]);
_dirty = YES;
} }
- (NSString *) percentEncodedPassword - (NSString *) percentEncodedPassword
{ {
return internal->_percentEncodedPassword; return [internal->_password stringByAddingPercentEncodingWithAllowedCharacters:
[NSCharacterSet URLPasswordAllowedCharacterSet]];
} }
- (void) setPercentEncodedPassword: (NSString *)password - (void) setPercentEncodedPassword: (NSString *)password
{ {
ASSIGNCOPY(internal->_percentEncodedPassword, password);
ASSIGNCOPY(internal->_password, [password stringByRemovingPercentEncoding]); ASSIGNCOPY(internal->_password, [password stringByRemovingPercentEncoding]);
_dirty = YES;
} }
- (NSString *) percentEncodedPath - (NSString *) percentEncodedPath
{ {
return internal->_percentEncodedPath; return [internal->_path stringByAddingPercentEncodingWithAllowedCharacters:
[NSCharacterSet URLPathAllowedCharacterSet]];
} }
- (void) setPercentEncodedPath: (NSString *)path - (void) setPercentEncodedPath: (NSString *)path
{ {
ASSIGNCOPY(internal->_percentEncodedPath, path);
ASSIGNCOPY(internal->_path, [path stringByRemovingPercentEncoding]); ASSIGNCOPY(internal->_path, [path stringByRemovingPercentEncoding]);
_dirty = YES;
} }
- (NSString *) percentEncodedQuery - (NSString *) percentEncodedQuery
{ {
return internal->_percentEncodedQuery; return internal->_query;
} }
- (void) setPercentEncodedQuery: (NSString *)query - (void) setPercentEncodedQuery: (NSString *)query
{ {
ASSIGNCOPY(internal->_percentEncodedQuery, query);
ASSIGNCOPY(internal->_query, [query stringByRemovingPercentEncoding]); ASSIGNCOPY(internal->_query, [query stringByRemovingPercentEncoding]);
_dirty = YES;
} }
- (NSArray *) percentEncodedQueryItems - (NSArray *) percentEncodedQueryItems
{ {
return internal->_percentEncodedQueryItems; return internal->_queryItems;
} }
- (void) setPercentEncodedQueryItems: (NSArray *)queryItems - (void) setPercentEncodedQueryItems: (NSArray *)queryItems
{ {
ASSIGNCOPY(internal->_percentEncodedQueryItems, queryItems); [self setQueryItems: queryItems];
} }
- (NSString *) percentEncodedScheme - (NSString *) percentEncodedScheme
{ {
return internal->_percentEncodedScheme; return [internal->_path stringByAddingPercentEncodingWithAllowedCharacters:
[NSCharacterSet URLPathAllowedCharacterSet]];
} }
- (void) setPercentEncodedScheme: (NSString *)scheme - (void) setPercentEncodedScheme: (NSString *)scheme
{ {
ASSIGNCOPY(internal->_percentEncodedScheme, scheme); ASSIGNCOPY(internal->_scheme, scheme);
_dirty = YES;
} }
- (NSString *) percentEncodedUser - (NSString *) percentEncodedUser
{ {
return internal->_percentEncodedUser;; return [internal->_user stringByAddingPercentEncodingWithAllowedCharacters:
[NSCharacterSet URLUserAllowedCharacterSet]];
} }
- (void) setPercentEncodedUser: (NSString *)user - (void) setPercentEncodedUser: (NSString *)user
{ {
ASSIGNCOPY(internal->_percentEncodedUser, user);
ASSIGNCOPY(internal->_user, [user stringByRemovingPercentEncoding]); ASSIGNCOPY(internal->_user, [user stringByRemovingPercentEncoding]);
_dirty = YES;
} }
// Locating components of the URL string representation // Locating components of the URL string representation
- (NSRange) rangeOfFragment - (NSRange) rangeOfFragment
{ {
[self _regenerateURL];
return internal->_rangeOfFragment; return internal->_rangeOfFragment;
} }
- (NSRange) rangeOfHost - (NSRange) rangeOfHost
{ {
[self _regenerateURL];
return internal->_rangeOfHost; return internal->_rangeOfHost;
} }
- (NSRange) rangeOfPassword - (NSRange) rangeOfPassword
{ {
[self _regenerateURL];
return internal->_rangeOfPassword; return internal->_rangeOfPassword;
} }
- (NSRange) rangeOfPath - (NSRange) rangeOfPath
{ {
[self _regenerateURL];
return internal->_rangeOfPath; return internal->_rangeOfPath;
} }
- (NSRange) rangeOfPort - (NSRange) rangeOfPort
{ {
[self _regenerateURL];
return internal->_rangeOfPort; return internal->_rangeOfPort;
} }
- (NSRange) rangeOfQuery - (NSRange) rangeOfQuery
{ {
[self _regenerateURL];
return internal->_rangeOfQuery; return internal->_rangeOfQuery;
} }
- (NSRange) rangeOfScheme - (NSRange) rangeOfScheme
{ {
[self _regenerateURL];
return internal->_rangeOfScheme; return internal->_rangeOfScheme;
} }
- (NSRange) rangeOfUser - (NSRange) rangeOfUser
{ {
[self _regenerateURL];
return internal->_rangeOfUser; return internal->_rangeOfUser;
} }