Skip to content

Commit d6f79f7

Browse files
petrsKarsten Ohme
authored andcommitted
added resize of ByteContainer if the new required length is bigger than existing one
1 parent 339e8a1 commit d6f79f7

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

src/main/java/com/licel/jcardsim/crypto/ByteContainer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ public void setBytes(byte[] buff) {
106106
* @param length length of data in byte array
107107
*/
108108
public void setBytes(byte[] buff, short offset, short length) {
109-
if (data == null) {
109+
if (data == null || (short) data.length < length) {
110110
switch (memoryType) {
111111
case JCSystem.MEMORY_TYPE_TRANSIENT_DESELECT:
112112
data = JCSystem.makeTransientByteArray(length, JCSystem.CLEAR_ON_DESELECT);

src/test/java/com/licel/jcardsim/crypto/ByteContainerTest.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import junit.framework.TestCase;
44

55
import java.math.BigInteger;
6+
import javacard.framework.JCSystem;
67

78
public class ByteContainerTest extends TestCase {
89
public ByteContainerTest(String name) {
@@ -52,4 +53,23 @@ private void checkRoundTrip(BigInteger expected) {
5253

5354
assertEquals(expected, new ByteContainer(expected).getBigInteger());
5455
}
56+
57+
public void testSetBytes() {
58+
short TEST_DATA_LEN = (short) 32;
59+
byte[] expected = new byte[TEST_DATA_LEN];
60+
ByteContainer container = new ByteContainer(expected, (short) 0, (short) expected.length);
61+
byte[] dataResult = container.getBytes(JCSystem.MEMORY_TYPE_TRANSIENT_RESET);
62+
assertEquals(expected.length, dataResult.length);
63+
64+
// Try to set with shorter and longer array - length should change accordingly
65+
byte[] shorter = new byte[(short) (TEST_DATA_LEN - 2)];
66+
container.setBytes(shorter);
67+
dataResult = container.getBytes(JCSystem.MEMORY_TYPE_TRANSIENT_RESET);
68+
assertEquals(shorter.length, dataResult.length);
69+
byte[] longer = new byte[(short) (TEST_DATA_LEN + 2)];
70+
container.setBytes(longer);
71+
dataResult = container.getBytes(JCSystem.MEMORY_TYPE_TRANSIENT_RESET);
72+
assertEquals(longer.length, dataResult.length);
73+
}
74+
5575
}

0 commit comments

Comments
 (0)