Skip to content

Commit

Permalink
[CONJ-711] Xid format correction when formatId is unsigned
Browse files Browse the repository at this point in the history
  • Loading branch information
rusher committed Jun 7, 2019
1 parent e6d43b8 commit 19a5a47
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/main/java/org/mariadb/jdbc/MariaXaResource.java
Expand Up @@ -69,10 +69,10 @@ public MariaXaResource(MariaDbConnection connection) {
this.connection = connection;
}

private static String xidToString(Xid xid) {
protected static String xidToString(Xid xid) {
return "0x" + Utils.byteArrayToHexString(xid.getGlobalTransactionId())
+ ",0x" + Utils.byteArrayToHexString(xid.getBranchQualifier())
+ "," + xid.getFormatId();
+ ",0x" + Utils.intToHexString(xid.getFormatId());
}

private static String flagsToString(int flags) {
Expand Down
17 changes: 17 additions & 0 deletions src/main/java/org/mariadb/jdbc/internal/util/Utils.java
Expand Up @@ -760,6 +760,23 @@ public static String byteArrayToHexString(final byte[] bytes) {
return (bytes != null) ? getHex(bytes) : "";
}

public static String intToHexString(final int value) {
final StringBuilder hex = new StringBuilder(8);
int offset = 24;
byte b;
boolean nullEnd = false;
while (offset >= 0) {
b = (byte) (value >> offset);
offset -= 8;
if (b != 0 || nullEnd) {
nullEnd = true;
hex.append(hexArray[(b & 0xF0) >> 4])
.append(hexArray[(b & 0x0F)]);
}
}
return hex.toString();
}

/**
* Parse the option "sessionVariable" to ensure having no injection. semi-column not in string
* will be replaced by comma.
Expand Down
13 changes: 13 additions & 0 deletions src/test/java/org/mariadb/jdbc/MariaXaResourceTest.java
@@ -0,0 +1,13 @@
package org.mariadb.jdbc;

import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class MariaXaResourceTest {
@Test
public void xidToString() {
assertEquals("0x00,0x01,0x05", MariaXaResource.xidToString(new MariaDbXid(5, new byte[]{ 0x00 }, new byte[]{ 0x01 })));
assertEquals("0x,0x000100,0x0400", MariaXaResource.xidToString(new MariaDbXid(1024, new byte[]{ }, new byte[]{ 0x00, 0x01, 0x00 })));
assertEquals("0x00,0x000100,0xC3C20186", MariaXaResource.xidToString(new MariaDbXid(-1010695802, new byte[]{ 0x00 }, new byte[]{ 0x00, 0x01, 0x00 })));
}
}
9 changes: 9 additions & 0 deletions src/test/java/org/mariadb/jdbc/internal/util/UtilsTest.java
Expand Up @@ -121,4 +121,13 @@ public void localLocalParsing() {
assertFalse(Utils.validateFileName("/*test*/ LOAD DATA LOCAL INFILE\n?", pathParameterHolders,"file_name"));
assertFalse(Utils.validateFileName("LOAD DATA INFILE ? /**/", goodParameterHolders,"file_name"));
}

@Test
public void intToHexString() {
assertEquals("05", Utils.intToHexString(5));
assertEquals("0400", Utils.intToHexString(1024));
assertEquals("C3C20186", Utils.intToHexString(-1010695802));
assertEquals("FFFFFFFF", Utils.intToHexString(-1));
}

}

0 comments on commit 19a5a47

Please sign in to comment.