Skip to content

Commit

Permalink
Replace a lot of SPBeginAlertSheet()s with the more concise SPOnewayA…
Browse files Browse the repository at this point in the history
…lertSheet()

This should also eliminate a few use-after-free crashes
  • Loading branch information
dmoagx committed Oct 20, 2015
1 parent e12e3e8 commit 5357fd1
Show file tree
Hide file tree
Showing 29 changed files with 432 additions and 273 deletions.
6 changes: 6 additions & 0 deletions Source/SPAlertSheets.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,12 @@ void SPBeginAlertSheet(
);

void SPOnewayAlertSheet(
NSString *title,
NSWindow *docWindow,
NSString *msg
);

void SPOnewayAlertSheetWithStyle(
NSString *title,
NSString *defaultButton,
NSWindow *docWindow,
Expand Down
13 changes: 12 additions & 1 deletion Source/SPAlertSheets.m
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,17 @@ + (void)beginWaitingAlertSheetWithTitle:(NSString *)title

@end

/**
* Shorthand for SPOnewayAlertSheetWithStyle() with defaultButton=nil and alertStyle=NSWarningAlertStyle
*/
void SPOnewayAlertSheet(
NSString *title,
NSWindow *docWindow,
NSString *msg)
{
SPOnewayAlertSheetWithStyle(title, nil, docWindow, msg, NSWarningAlertStyle);
}

/**
* A Send-and-forget variant for displaying alerts.
* It will queue the alert on the main thread and *always* immediately return.
Expand All @@ -151,7 +162,7 @@ + (void)beginWaitingAlertSheetWithTitle:(NSString *)title
* If nil is passed as the button title it will be changed to @"OK".
* If nil is passed as the window NSAlert will be modal
*/
void SPOnewayAlertSheet(
void SPOnewayAlertSheetWithStyle(
NSString *title,
NSString *defaultButton,
NSWindow *docWindow,
Expand Down
46 changes: 31 additions & 15 deletions Source/SPAppController.m
Original file line number Diff line number Diff line change
Expand Up @@ -851,8 +851,7 @@ - (void)handleEventWithURL:(NSURL*)url
}
if(![status writeToFile:statusFileName atomically:YES encoding:NSUTF8StringEncoding error:nil]) {
NSBeep();
SPBeginAlertSheet(NSLocalizedString(@"BASH Error", @"bash error"), NSLocalizedString(@"OK", @"OK button"), nil, nil, [self frontDocumentWindow], self, nil, nil,
NSLocalizedString(@"Status file for sequelpro url scheme command couldn't be written!", @"status file for sequelpro url scheme command couldn't be written error message"));
SPOnewayAlertSheet(NSLocalizedString(@"BASH Error", @"bash error"), [self frontDocumentWindow], NSLocalizedString(@"Status file for sequelpro url scheme command couldn't be written!", @"status file for sequelpro url scheme command couldn't be written error message"));
}
[result writeToFile:resultFileName atomically:YES encoding:NSUTF8StringEncoding error:nil];
return;
Expand Down Expand Up @@ -897,8 +896,11 @@ - (void)handleEventWithURL:(NSURL*)url
BOOL succeed = [status writeToFile:statusFileName atomically:YES encoding:NSUTF8StringEncoding error:nil];
if(!succeed) {
NSBeep();
SPBeginAlertSheet(NSLocalizedString(@"BASH Error", @"bash error"), NSLocalizedString(@"OK", @"OK button"), nil, nil, [self frontDocumentWindow], self, nil, nil,
NSLocalizedString(@"Status file for sequelpro url scheme command couldn't be written!", @"status file for sequelpro url scheme command couldn't be written error message"));
SPOnewayAlertSheet(
NSLocalizedString(@"BASH Error", @"bash error"),
[self frontDocumentWindow],
NSLocalizedString(@"Status file for sequelpro url scheme command couldn't be written!", @"status file for sequelpro url scheme command couldn't be written error message")
);
}
return;
}
Expand Down Expand Up @@ -939,8 +941,11 @@ - (void)handleEventWithURL:(NSURL*)url
[cmdDict setObject:(passedProcessID)?:@"" forKey:@"id"];
[processDocument handleSchemeCommand:cmdDict];
} else {
SPBeginAlertSheet(NSLocalizedString(@"sequelpro URL Scheme Error", @"sequelpro url Scheme Error"), NSLocalizedString(@"OK", @"OK button"), nil, nil, [NSApp mainWindow], self, nil, nil,
[NSString stringWithFormat:@"%@ “%@”:\n%@", NSLocalizedString(@"Error for", @"error for message"), [command description], NSLocalizedString(@"sequelpro URL scheme command not supported.", @"sequelpro URL scheme command not supported.")]);
SPOnewayAlertSheet(
NSLocalizedString(@"sequelpro URL Scheme Error", @"sequelpro url Scheme Error"),
[NSApp mainWindow],
[NSString stringWithFormat:@"%@ “%@”:\n%@", NSLocalizedString(@"Error for", @"error for message"), [command description], NSLocalizedString(@"sequelpro URL scheme command not supported.", @"sequelpro URL scheme command not supported.")]
);

// If command failed notify the file handle hand shake mechanism
NSString *out = @"1";
Expand Down Expand Up @@ -980,9 +985,11 @@ - (void)handleEventWithURL:(NSURL*)url
encoding:NSUTF8StringEncoding
error:nil];

SPBeginAlertSheet(NSLocalizedString(@"sequelpro URL Scheme Error", @"sequelpro url Scheme Error"), NSLocalizedString(@"OK", @"OK button"), nil, nil, [NSApp mainWindow], self, nil, nil,
[NSString stringWithFormat:@"%@ “%@”:\n%@", NSLocalizedString(@"Error for", @"error for message"), [command description], NSLocalizedString(@"An error for sequelpro URL scheme command occurred. Probably no corresponding connection window found.", @"An error for sequelpro URL scheme command occurred. Probably no corresponding connection window found.")]);

SPOnewayAlertSheet(
NSLocalizedString(@"sequelpro URL Scheme Error", @"sequelpro url Scheme Error"),
[NSApp mainWindow],
[NSString stringWithFormat:@"%@ “%@”:\n%@", NSLocalizedString(@"Error for", @"error for message"), [command description], NSLocalizedString(@"An error for sequelpro URL scheme command occurred. Probably no corresponding connection window found.", @"An error for sequelpro URL scheme command occurred. Probably no corresponding connection window found.")]
);

usleep(5000);
[fm removeItemAtPath:[NSString stringWithFormat:@"%@%@", SPURLSchemeQueryResultStatusPathHeader, passedProcessID] error:nil];
Expand All @@ -993,8 +1000,11 @@ - (void)handleEventWithURL:(NSURL*)url


} else {
SPBeginAlertSheet(NSLocalizedString(@"sequelpro URL Scheme Error", @"sequelpro url Scheme Error"), NSLocalizedString(@"OK", @"OK button"), nil, nil, [NSApp mainWindow], self, nil, nil,
[NSString stringWithFormat:@"%@ “%@”:\n%@", NSLocalizedString(@"Error for", @"error for message"), [command description], NSLocalizedString(@"An error occur while executing a scheme command. If the scheme command was invoked by a Bundle command, it could be that the command still runs. You can try to terminate it by pressing ⌘+. or via the Activities pane.", @"an error occur while executing a scheme command. if the scheme command was invoked by a bundle command, it could be that the command still runs. you can try to terminate it by pressing ⌘+. or via the activities pane.")]);
SPOnewayAlertSheet(
NSLocalizedString(@"sequelpro URL Scheme Error", @"sequelpro url Scheme Error"),
[NSApp mainWindow],
[NSString stringWithFormat:@"%@ “%@”:\n%@", NSLocalizedString(@"Error for", @"error for message"), [command description], NSLocalizedString(@"An error occur while executing a scheme command. If the scheme command was invoked by a Bundle command, it could be that the command still runs. You can try to terminate it by pressing ⌘+. or via the Activities pane.", @"an error occur while executing a scheme command. if the scheme command was invoked by a bundle command, it could be that the command still runs. you can try to terminate it by pressing ⌘+. or via the activities pane.")]
);
}

if(processDocument)
Expand Down Expand Up @@ -1141,8 +1151,11 @@ - (IBAction)executeBundleItemForApp:(id)sender

if(inputFileError != nil) {
NSString *errorMessage = [inputFileError localizedDescription];
SPBeginAlertSheet(NSLocalizedString(@"Bundle Error", @"bundle error"), NSLocalizedString(@"OK", @"OK button"), nil, nil, [self frontDocumentWindow], self, nil, nil,
[NSString stringWithFormat:@"%@ “%@”:\n%@", NSLocalizedString(@"Error for", @"error for message"), [cmdData objectForKey:@"name"], errorMessage]);
SPOnewayAlertSheet(
NSLocalizedString(@"Bundle Error", @"bundle error"),
[self frontDocumentWindow],
[NSString stringWithFormat:@"%@ “%@”:\n%@", NSLocalizedString(@"Error for", @"error for message"), [cmdData objectForKey:@"name"], errorMessage]
);
if (cmdData) [cmdData release];
return;
}
Expand Down Expand Up @@ -1235,8 +1248,11 @@ - (IBAction)executeBundleItemForApp:(id)sender
}
} else if([err code] != 9) { // Suppress an error message if command was killed
NSString *errorMessage = [err localizedDescription];
SPBeginAlertSheet(NSLocalizedString(@"BASH Error", @"bash error"), NSLocalizedString(@"OK", @"OK button"), nil, nil, [NSApp mainWindow], self, nil, nil,
[NSString stringWithFormat:@"%@ “%@”:\n%@", NSLocalizedString(@"Error for", @"error for message"), [cmdData objectForKey:@"name"], errorMessage]);
SPOnewayAlertSheet(
NSLocalizedString(@"BASH Error", @"bash error"),
[NSApp mainWindow],
[NSString stringWithFormat:@"%@ “%@”:\n%@", NSLocalizedString(@"Error for", @"error for message"), [cmdData objectForKey:@"name"], errorMessage]
);
}

}
Expand Down
3 changes: 1 addition & 2 deletions Source/SPBundleHTMLOutputController.m
Original file line number Diff line number Diff line change
Expand Up @@ -191,8 +191,7 @@ - (void)sheetDidEnd:(id)sheet returnCode:(NSInteger)returnCode contextInfo:(NSSt
encoding:NSUTF8StringEncoding
error:&err];
if (err != nil) {
SPBeginAlertSheet(NSLocalizedString(@"Error", @"error"), NSLocalizedString(@"OK", @"OK button"), nil, nil, [self window], self, nil, nil,
[NSString stringWithFormat:@"%@", [err localizedDescription]]);
SPOnewayAlertSheet(NSLocalizedString(@"Error", @"error"), [self window], [NSString stringWithFormat:@"%@", [err localizedDescription]]);
}
}
}
Expand Down
54 changes: 41 additions & 13 deletions Source/SPConnectionController.m
Original file line number Diff line number Diff line change
Expand Up @@ -183,21 +183,33 @@ - (IBAction)initiateConnection:(id)sender

// Ensure that host is not empty if this is a TCP/IP or SSH connection
if (([self type] == SPTCPIPConnection || [self type] == SPSSHTunnelConnection) && ![[self host] length]) {
SPBeginAlertSheet(NSLocalizedString(@"Insufficient connection details", @"insufficient details message"), NSLocalizedString(@"OK", @"OK button"), nil, nil, [dbDocument parentWindow], self, nil, nil, NSLocalizedString(@"Insufficient details provided to establish a connection. Please enter at least the hostname.", @"insufficient details informative message"));
SPOnewayAlertSheet(
NSLocalizedString(@"Insufficient connection details", @"insufficient details message"),
[dbDocument parentWindow],
NSLocalizedString(@"Insufficient details provided to establish a connection. Please enter at least the hostname.", @"insufficient details informative message")
);
return;
}

// If SSH is enabled, ensure that the SSH host is not nil
if ([self type] == SPSSHTunnelConnection && ![[self sshHost] length]) {
SPBeginAlertSheet(NSLocalizedString(@"Insufficient connection details", @"insufficient details message"), NSLocalizedString(@"OK", @"OK button"), nil, nil, [dbDocument parentWindow], self, nil, nil, NSLocalizedString(@"Insufficient details provided to establish a connection. Please enter the hostname for the SSH Tunnel, or disable the SSH Tunnel.", @"insufficient SSH tunnel details informative message"));
SPOnewayAlertSheet(
NSLocalizedString(@"Insufficient connection details", @"insufficient details message"),
[dbDocument parentWindow],
NSLocalizedString(@"Insufficient details provided to establish a connection. Please enter the hostname for the SSH Tunnel, or disable the SSH Tunnel.", @"insufficient SSH tunnel details informative message")
);
return;
}

// If an SSH key has been provided, verify it exists
if ([self type] == SPSSHTunnelConnection && sshKeyLocationEnabled && sshKeyLocation) {
if (![[NSFileManager defaultManager] fileExistsAtPath:[sshKeyLocation stringByExpandingTildeInPath]]) {
[self setSshKeyLocationEnabled:NSOffState];
SPBeginAlertSheet(NSLocalizedString(@"SSH Key not found", @"SSH key check error"), NSLocalizedString(@"OK", @"OK button"), nil, nil, [dbDocument parentWindow], self, nil, nil, NSLocalizedString(@"A SSH key location was specified, but no file was found in the specified location. Please re-select the key and try again.", @"SSH key not found message"));
SPOnewayAlertSheet(
NSLocalizedString(@"SSH Key not found", @"SSH key check error"),
[dbDocument parentWindow],
NSLocalizedString(@"A SSH key location was specified, but no file was found in the specified location. Please re-select the key and try again.", @"SSH key not found message")
);
return;
}
}
Expand All @@ -214,7 +226,11 @@ - (IBAction)initiateConnection:(id)sender
[self setSslKeyFileLocationEnabled:NSOffState];
[self setSslKeyFileLocation:nil];

SPBeginAlertSheet(NSLocalizedString(@"SSL Key File not found", @"SSL key file check error"), NSLocalizedString(@"OK", @"OK button"), nil, nil, [dbDocument parentWindow], self, nil, nil, NSLocalizedString(@"A SSL key file location was specified, but no file was found in the specified location. Please re-select the key file and try again.", @"SSL key file not found message"));
SPOnewayAlertSheet(
NSLocalizedString(@"SSL Key File not found", @"SSL key file check error"),
[dbDocument parentWindow],
NSLocalizedString(@"A SSL key file location was specified, but no file was found in the specified location. Please re-select the key file and try again.", @"SSL key file not found message")
);

return;
}
Expand All @@ -225,7 +241,11 @@ - (IBAction)initiateConnection:(id)sender
[self setSslCertificateFileLocationEnabled:NSOffState];
[self setSslCertificateFileLocation:nil];

SPBeginAlertSheet(NSLocalizedString(@"SSL Certificate File not found", @"SSL certificate file check error"), NSLocalizedString(@"OK", @"OK button"), nil, nil, [dbDocument parentWindow], self, nil, nil, NSLocalizedString(@"A SSL certificate location was specified, but no file was found in the specified location. Please re-select the certificate and try again.", @"SSL certificate file not found message"));
SPOnewayAlertSheet(
NSLocalizedString(@"SSL Certificate File not found", @"SSL certificate file check error"),
[dbDocument parentWindow],
NSLocalizedString(@"A SSL certificate location was specified, but no file was found in the specified location. Please re-select the certificate and try again.", @"SSL certificate file not found message")
);

return;
}
Expand All @@ -236,7 +256,11 @@ - (IBAction)initiateConnection:(id)sender
[self setSslCACertFileLocationEnabled:NSOffState];
[self setSslCACertFileLocation:nil];

SPBeginAlertSheet(NSLocalizedString(@"SSL Certificate Authority File not found", @"SSL certificate authority file check error"), NSLocalizedString(@"OK", @"OK button"), nil, nil, [dbDocument parentWindow], self, nil, nil, NSLocalizedString(@"A SSL Certificate Authority certificate location was specified, but no file was found in the specified location. Please re-select the Certificate Authority certificate and try again.", @"SSL CA certificate file not found message"));
SPOnewayAlertSheet(
NSLocalizedString(@"SSL Certificate Authority File not found", @"SSL certificate authority file check error"),
[dbDocument parentWindow],
NSLocalizedString(@"A SSL Certificate Authority certificate location was specified, but no file was found in the specified location. Please re-select the Certificate Authority certificate and try again.", @"SSL CA certificate file not found message")
);

return;
}
Expand Down Expand Up @@ -1224,17 +1248,21 @@ - (void)_saveCurrentDetailsCreatingNewFavorite:(BOOL)createNewFavorite validateD

// Ensure that host is not empty if this is a TCP/IP or SSH connection
if (validateDetails && ([self type] == SPTCPIPConnection || [self type] == SPSSHTunnelConnection) && ![[self host] length]) {
SPBeginAlertSheet(NSLocalizedString(@"Insufficient connection details", @"insufficient details message"),
NSLocalizedString(@"OK", @"OK button"), nil, nil, [dbDocument parentWindow], nil, nil, nil,
NSLocalizedString(@"Insufficient details provided to establish a connection. Please provide at least a host.", @"insufficient details informative message"));
SPOnewayAlertSheet(
NSLocalizedString(@"Insufficient connection details", @"insufficient details message"),
[dbDocument parentWindow],
NSLocalizedString(@"Insufficient details provided to establish a connection. Please provide at least a host.", @"insufficient details informative message")
);
return;
}

// If SSH is enabled, ensure that the SSH host is not nil
if (validateDetails && [self type] == SPSSHTunnelConnection && ![[self sshHost] length]) {
SPBeginAlertSheet(NSLocalizedString(@"Insufficient connection details", @"insufficient details message"),
NSLocalizedString(@"OK", @"OK button"), nil, nil, [dbDocument parentWindow], nil, nil, nil,
NSLocalizedString(@"Please enter the hostname for the SSH Tunnel, or disable the SSH Tunnel.", @"message of panel when ssh details are incomplete"));
SPOnewayAlertSheet(
NSLocalizedString(@"Insufficient connection details", @"insufficient details message"),
[dbDocument parentWindow],
NSLocalizedString(@"Please enter the hostname for the SSH Tunnel, or disable the SSH Tunnel.", @"message of panel when ssh details are incomplete")
);
return;
}

Expand Down Expand Up @@ -1488,7 +1516,7 @@ - (BOOL)_checkHost
[dbDocument parentWindow], // Window to attach to
self, // Modal delegate
@selector(localhostErrorSheetDidEnd:returnCode:contextInfo:), // Did end selector
nil, // Contextual info for selectors
NULL, // Contextual info for selectors
NSLocalizedString(@"To MySQL, 'localhost' is a special host and means that a socket connection should be used.\n\nDid you mean to use a socket connection, or to connect to the local machine via a port? If you meant to connect via a port, '127.0.0.1' should be used instead of 'localhost'.", @"message of error when using 'localhost' for a network connection"));
return NO;
}
Expand Down
10 changes: 2 additions & 8 deletions Source/SPConnectionDelegate.m
Original file line number Diff line number Diff line change
Expand Up @@ -123,15 +123,9 @@ - (NSString *)keychainPasswordForSSHConnection:(SPMySQLConnection *)connection
*/
- (void)noConnectionAvailable:(id)connection
{
SPBeginAlertSheet(
SPOnewayAlertSheet(
NSLocalizedString(@"No connection available", @"no connection available message"),
NSLocalizedString(@"OK", @"OK button"),
nil,
nil,
[self parentWindow],
self,
nil,
nil,
NSLocalizedString(@"An error has occured and there doesn't seem to be a connection available.", @"no connection available informatie message")
);
}
Expand Down Expand Up @@ -176,7 +170,7 @@ - (SPMySQLConnectionLostDecision)connectionLost:(id)connection
- (void)showErrorWithTitle:(NSString *)theTitle message:(NSString *)theMessage
{
if ([[self parentWindow] isVisible]) {
SPBeginAlertSheet(theTitle, NSLocalizedString(@"OK", @"OK button"), nil, nil, [self parentWindow], self, nil, nil, theMessage);
SPOnewayAlertSheet(theTitle, [self parentWindow], theMessage);
}
}

Expand Down
6 changes: 5 additions & 1 deletion Source/SPConnectionHandler.m
Original file line number Diff line number Diff line change
Expand Up @@ -353,7 +353,11 @@ - (void)mySQLConnectionEstablished
// If SSL was enabled, check it was established correctly
if (useSSL && ([self type] == SPTCPIPConnection || [self type] == SPSocketConnection)) {
if (![mySQLConnection isConnectedViaSSL]) {
SPBeginAlertSheet(NSLocalizedString(@"SSL connection not established", @"SSL requested but not used title"), NSLocalizedString(@"OK", @"OK button"), nil, nil, [dbDocument parentWindow], nil, nil, nil, NSLocalizedString(@"You requested that the connection should be established using SSL, but MySQL made the connection without SSL.\n\nThis may be because the server does not support SSL connections, or has SSL disabled; or insufficient details were supplied to establish an SSL connection.\n\nThis connection is not encrypted.", @"SSL connection requested but not established error detail"));
SPOnewayAlertSheet(
NSLocalizedString(@"SSL connection not established", @"SSL requested but not used title"),
[dbDocument parentWindow],
NSLocalizedString(@"You requested that the connection should be established using SSL, but MySQL made the connection without SSL.\n\nThis may be because the server does not support SSL connections, or has SSL disabled; or insufficient details were supplied to establish an SSL connection.\n\nThis connection is not encrypted.", @"SSL connection requested but not established error detail")
);
}
else {
#ifndef SP_CODA
Expand Down
Loading

0 comments on commit 5357fd1

Please sign in to comment.