Description:
In 8.0.32, calling Connection.setAutoCommit() on MariaDB database at version 10.5.12 will give the exception:
Caused by: com.mysql.cj.exceptions.WrongArgumentException: Buffer length is less than expected payload length.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
at com.mysql.cj.protocol.a.NativePacketPayload.readString(NativePacketPayload.java:632)
at com.mysql.cj.protocol.a.NativePacketPayload.readString(NativePacketPayload.java:606)
at com.mysql.cj.protocol.a.NativeServerSessionStateController$NativeServerSessionStateChanges.init(NativeServerSessionStateController.java:119)
at com.mysql.cj.protocol.a.result.OkPacket.parse(OkPacket.java:66)
at com.mysql.cj.protocol.a.NativeProtocol.readServerStatusForResultSets(NativeProtocol.java:1751)
at com.mysql.cj.protocol.a.TextResultsetReader.read(TextResultsetReader.java:116)
at com.mysql.cj.protocol.a.TextResultsetReader.read(TextResultsetReader.java:48)
at com.mysql.cj.protocol.a.NativeProtocol.read(NativeProtocol.java:1660)
at com.mysql.cj.protocol.a.NativeProtocol.readAllResults(NativeProtocol.java:1714)
at com.mysql.cj.protocol.a.NativeProtocol.sendQueryPacket(NativeProtocol.java:1064)
at com.mysql.cj.protocol.a.NativeProtocol.sendQueryString(NativeProtocol.java:997)
at com.mysql.cj.NativeSession.execSQL(NativeSession.java:663)
at com.mysql.cj.jdbc.ConnectionImpl.setAutoCommit(ConnectionImpl.java:2031)
... 17 more
How to repeat:
On a MariaDB 10.5.12 database,
class ExecuteBufferBug {
public static void main(final String[] args) {
try (final Connection conn = DriverManager.getConnection(args[0])) {
conn.setAutoCommit(false); // this should give WrongArgumentException
} catch (Exception e) {
System.out.println("Exception: " + e.getMessage());
}
}
}