]
Tom Jenkinson commented on JBTM-2854:
-------------------------------------
Hi [~dmlloyd] - we do need that bit of data as this is the way we can check during
recovery (with shared object store) if the Xid belongs to the calling server and whether
it was orphaned:
XATerminatorImple.importTransaction can produce
ArrayIndexOutOfBoundsException
------------------------------------------------------------------------------
Key: JBTM-2854
URL:
https://issues.jboss.org/browse/JBTM-2854
Project: JBoss Transaction Manager
Issue Type: Bug
Components: JTA
Reporter: David Lloyd
Assignee: Michael Musgrove
Priority: Critical
Here is what the stack trace looks like:
{noformat}
Caused by: Remote exception java.lang.ArrayIndexOutOfBoundsException: 32
at
com.arjuna.ats.jta.xa.XATxConverter.getSubordinateNodeName(XATxConverter.java:204)
at
com.arjuna.ats.internal.jta.transaction.arjunacore.subordinate.jca.SubordinateAtomicAction.<init>(SubordinateAtomicAction.java:115)
at
com.arjuna.ats.internal.jta.transaction.arjunacore.subordinate.jca.TransactionImple.<init>(TransactionImple.java:57)
at
com.arjuna.ats.internal.jta.transaction.arjunacore.jca.TransactionImporterImple.addImportedTransaction(TransactionImporterImple.java:281)
at
com.arjuna.ats.internal.jta.transaction.arjunacore.jca.TransactionImporterImple.importRemoteTransaction(TransactionImporterImple.java:105)
at
com.arjuna.ats.internal.jta.transaction.arjunacore.jca.XATerminatorImple.importTransaction(XATerminatorImple.java:599)
at
org.wildfly.transaction.client.provider.jboss.JBossLocalTransactionProvider$XAImporterImpl.findOrImportTransaction(JBossLocalTransactionProvider.java:585)
... 11 more
{noformat}
It appears that there is no protection against an XID of inadequate length in
XATxConverter#setSubordinateNodeName.
At present the protocol is attempting to import an XID which contains only the gtid from
the master node (based on what I discussed with [~tomjenkinson] some time ago at a
previous meeting). This can be changed if it is wrong, but either way this method should
fail with a friendlier exception if the XID is not valid for some reason.