diff --git a/src/main/java/im/status/keycard/KeycardApplet.java b/src/main/java/im/status/keycard/KeycardApplet.java index 9d5962c..23c78cf 100644 --- a/src/main/java/im/status/keycard/KeycardApplet.java +++ b/src/main/java/im/status/keycard/KeycardApplet.java @@ -463,13 +463,17 @@ public class KeycardApplet extends Applet { } short dataLen = Util.makeShort((byte) 0x00, apduBuffer[ISO7816.OFFSET_LC]); + short offset; if (Util.makeShort(apduBuffer[ISO7816.OFFSET_CDATA], apduBuffer[(short)(ISO7816.OFFSET_CDATA + 1)]) != (short)(dataLen - 2)) { - ISOException.throwIt(ISO7816.SW_WRONG_DATA); + offset = ISO7816.OFFSET_P2; + apduBuffer[ISO7816.OFFSET_P2] = 0; + } else { + offset = ISO7816.OFFSET_CDATA; } JCSystem.beginTransaction(); - Util.arrayCopy(apduBuffer, ISO7816.OFFSET_CDATA, SharedMemory.ndefDataFile, (short) 0, dataLen); + Util.arrayCopy(apduBuffer, offset, SharedMemory.ndefDataFile, (short) 0, dataLen); JCSystem.commitTransaction(); } diff --git a/src/test/java/im/status/keycard/KeycardTest.java b/src/test/java/im/status/keycard/KeycardTest.java index aaf6fee..70adfa0 100644 --- a/src/test/java/im/status/keycard/KeycardTest.java +++ b/src/test/java/im/status/keycard/KeycardTest.java @@ -498,10 +498,9 @@ public class KeycardTest { response = cmdSet.setNDEF(ndefData); assertEquals(0x9000, response.getSw()); - // Wrong length - ndefData[1]++; - response = cmdSet.setNDEF(ndefData); - assertEquals(0x6A80, response.getSw()); + // Good case with no length. + response = cmdSet.setNDEF(Arrays.copyOfRange(ndefData, 2, ndefData.length)); + assertEquals(0x9000, response.getSw()); } @Test