Description:
If something wrong with connection (here: unix socket) it can happen that invalid data recieved. The connector miss a check at one place and one is wrong.
<type 'exceptions.IndexError'>, string index out of range
File "/usr/localmyapp/sql_func.py", line 856, in db_query
c=cursor.execute(arg_query)
File "/usr/lib/python2.5/site-packages/DBUtils-1.0-py2.5.egg/DBUtils/SteadyDB.py", line 447, in tough_method
result = method(*args, **kwargs) # try to execute
File "/usr/lib/python2.5/site-packages/mysql/connector/cursor.py", line 392, in execute
self._handle_result(self._connection.cmd_query(stmt))
File "/usr/lib/python2.5/site-packages/mysql/connector/connection.py", line 503, in cmd_query
statement))
File "/usr/lib/python2.5/site-packages/mysql/connector/connection.py", line 420, in _handle_result
elif packet[4] == '\x00':
How to repeat:
let invalid data arrive via socket.
Suggested fix:
--- mysql-connector-python-1.0.7/python2/mysql/connector/connection.py.orig 2012-11-05 10:20:20.000000000 +0100
+++ mysql-connector-python-1.0.7/python2/mysql/connector/connection.py 2012-11-05 10:21:40.000000000 +0100
@@ -375,6 +375,7 @@
Returns a dict()
"""
+ if len(packet) >= 5:
if packet[4] == '\x00':
ok = self._protocol.parse_ok(packet)
self._toggle_have_next_result(ok['server_status'])
@@ -414,7 +415,7 @@
Returns a dict()
"""
- if not packet or len(packet) < 4:
+ if not packet or len(packet) < 5:
raise errors.InterfaceError('Empty response')
elif packet[4] == '\x00':
return self._handle_ok(packet)
Description: If something wrong with connection (here: unix socket) it can happen that invalid data recieved. The connector miss a check at one place and one is wrong. <type 'exceptions.IndexError'>, string index out of range File "/usr/localmyapp/sql_func.py", line 856, in db_query c=cursor.execute(arg_query) File "/usr/lib/python2.5/site-packages/DBUtils-1.0-py2.5.egg/DBUtils/SteadyDB.py", line 447, in tough_method result = method(*args, **kwargs) # try to execute File "/usr/lib/python2.5/site-packages/mysql/connector/cursor.py", line 392, in execute self._handle_result(self._connection.cmd_query(stmt)) File "/usr/lib/python2.5/site-packages/mysql/connector/connection.py", line 503, in cmd_query statement)) File "/usr/lib/python2.5/site-packages/mysql/connector/connection.py", line 420, in _handle_result elif packet[4] == '\x00': How to repeat: let invalid data arrive via socket. Suggested fix: --- mysql-connector-python-1.0.7/python2/mysql/connector/connection.py.orig 2012-11-05 10:20:20.000000000 +0100 +++ mysql-connector-python-1.0.7/python2/mysql/connector/connection.py 2012-11-05 10:21:40.000000000 +0100 @@ -375,6 +375,7 @@ Returns a dict() """ + if len(packet) >= 5: if packet[4] == '\x00': ok = self._protocol.parse_ok(packet) self._toggle_have_next_result(ok['server_status']) @@ -414,7 +415,7 @@ Returns a dict() """ - if not packet or len(packet) < 4: + if not packet or len(packet) < 5: raise errors.InterfaceError('Empty response') elif packet[4] == '\x00': return self._handle_ok(packet)