From 164af9b85c6bf890aa0c7631538827bec1741e08 Mon Sep 17 00:00:00 2001 From: Max Date: Tue, 10 Jan 2017 11:48:53 +0100 Subject: [PATCH] Make Max Packet Size detection more robust (issue with recent sphinx versions) #2653 --- .../Max Packet Size.m | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/Frameworks/SPMySQLFramework/Source/SPMySQLConnection Categories/Max Packet Size.m b/Frameworks/SPMySQLFramework/Source/SPMySQLConnection Categories/Max Packet Size.m index dc4536244..08ed03cff 100644 --- a/Frameworks/SPMySQLFramework/Source/SPMySQLConnection Categories/Max Packet Size.m +++ b/Frameworks/SPMySQLFramework/Source/SPMySQLConnection Categories/Max Packet Size.m @@ -97,13 +97,15 @@ @implementation SPMySQLConnection (Max_Packet_Size_Private_API) */ - (void)_updateMaxQuerySize { - // Determine which query to run based on server version NSString *packetQueryString; + NSUInteger resultCol; if ([self serverMajorVersion] == 3) { packetQueryString = @"SHOW VARIABLES LIKE 'max_allowed_packet'"; + resultCol = 1; } else { packetQueryString = @"SELECT @@global.max_allowed_packet"; + resultCol = 0; } // Make a standard query to the server to retrieve the information @@ -115,17 +117,16 @@ - (void)_updateMaxQuerySize [result setReturnDataAsStrings:YES]; // Get the maximum size string - NSString *maxQuerySizeString = nil; - if ([self serverMajorVersion] == 3) { - maxQuerySizeString = [[result getRowAsArray] objectAtIndex:1]; - } else { - maxQuerySizeString = [[result getRowAsArray] objectAtIndex:0]; - } + NSString *maxQuerySizeString = [[result getRowAsArray] objectAtIndex:resultCol]; - // If a valid size was returned, update the instance variable - if (maxQuerySizeString) { - maxQuerySize = (NSUInteger)[maxQuerySizeString integerValue]; + NSInteger _maxQuerySize = maxQuerySizeString ? [maxQuerySizeString integerValue] : 0; + //see #2653 + if(_maxQuerySize < 34) { // the max_allowed_packet query above has at least 34 bytes and succeeded, so any value less than that would be nonsense + NSLog(@"Query for max_allowed_packet returned invalid or implausible value: %ld (raw value: %@) (on %@)", _maxQuerySize, maxQuerySizeString, [self serverVersionString]); + return; } + // If a valid size was returned, update the instance variable + maxQuerySize = (NSUInteger)_maxQuerySize; } /**