Skip to content

Commit 164af9b

Browse files
committed
Make Max Packet Size detection more robust (issue with recent sphinx versions) #2653
1 parent 95c2949 commit 164af9b

File tree

1 file changed

+11
-10
lines changed

1 file changed

+11
-10
lines changed

Frameworks/SPMySQLFramework/Source/SPMySQLConnection Categories/Max Packet Size.m

+11-10
Original file line numberDiff line numberDiff line change
@@ -97,13 +97,15 @@ @implementation SPMySQLConnection (Max_Packet_Size_Private_API)
9797
*/
9898
- (void)_updateMaxQuerySize
9999
{
100-
101100
// Determine which query to run based on server version
102101
NSString *packetQueryString;
102+
NSUInteger resultCol;
103103
if ([self serverMajorVersion] == 3) {
104104
packetQueryString = @"SHOW VARIABLES LIKE 'max_allowed_packet'";
105+
resultCol = 1;
105106
} else {
106107
packetQueryString = @"SELECT @@global.max_allowed_packet";
108+
resultCol = 0;
107109
}
108110

109111
// Make a standard query to the server to retrieve the information
@@ -115,17 +117,16 @@ - (void)_updateMaxQuerySize
115117
[result setReturnDataAsStrings:YES];
116118

117119
// Get the maximum size string
118-
NSString *maxQuerySizeString = nil;
119-
if ([self serverMajorVersion] == 3) {
120-
maxQuerySizeString = [[result getRowAsArray] objectAtIndex:1];
121-
} else {
122-
maxQuerySizeString = [[result getRowAsArray] objectAtIndex:0];
123-
}
120+
NSString *maxQuerySizeString = [[result getRowAsArray] objectAtIndex:resultCol];
124121

125-
// If a valid size was returned, update the instance variable
126-
if (maxQuerySizeString) {
127-
maxQuerySize = (NSUInteger)[maxQuerySizeString integerValue];
122+
NSInteger _maxQuerySize = maxQuerySizeString ? [maxQuerySizeString integerValue] : 0;
123+
//see #2653
124+
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
125+
NSLog(@"Query for max_allowed_packet returned invalid or implausible value: %ld (raw value: %@) (on %@)", _maxQuerySize, maxQuerySizeString, [self serverVersionString]);
126+
return;
128127
}
128+
// If a valid size was returned, update the instance variable
129+
maxQuerySize = (NSUInteger)_maxQuerySize;
129130
}
130131

131132
/**

0 commit comments

Comments
 (0)