make sure CommandApdu consistently copies input data

This commit is contained in:
Vincent Breitmoser 2018-02-02 02:27:33 +01:00
parent 34f65d4f53
commit 5d40822ea5

View file

@ -42,43 +42,39 @@ public abstract class CommandApdu {
} }
public static CommandApdu create(int cla, int ins, int p1, int p2) { public static CommandApdu create(int cla, int ins, int p1, int p2) {
return create(cla, ins, p1, p2, null, 0); return create(cla, ins, p1, p2, null, 0, 0, 0);
} }
public static CommandApdu create(int cla, int ins, int p1, int p2, int ne) { public static CommandApdu create(int cla, int ins, int p1, int p2, int ne) {
return create(cla, ins, p1, p2, null, ne); return create(cla, ins, p1, p2, null, 0, 0, ne);
} }
public static CommandApdu create(int cla, int ins, int p1, int p2, byte[] data) { public static CommandApdu create(int cla, int ins, int p1, int p2, byte[] data) {
return create(cla, ins, p1, p2, data, 0); return create(cla, ins, p1, p2, data, 0, data.length, 0);
} }
public static CommandApdu create(int cla, int ins, int p1, int p2, byte[] data, int dataOffset, int dataLength) { public static CommandApdu create(int cla, int ins, int p1, int p2, byte[] data, int dataOffset, int dataLength) {
if (data != null) { return create(cla, ins, p1, p2, data, dataOffset, dataLength,0);
data = Arrays.copyOfRange(data, dataOffset, dataOffset + dataLength);
}
return create(cla, ins, p1, p2, data, 0);
}
public static CommandApdu create(int cla, int ins, int p1, int p2, byte[] data, int dataOffset, int dataLength,
int ne) {
if (data != null) {
data = Arrays.copyOfRange(data, dataOffset, dataOffset + dataLength);
}
return create(cla, ins, p1, p2, data, ne);
} }
public static CommandApdu create(int cla, int ins, int p1, int p2, byte[] data, int ne) { public static CommandApdu create(int cla, int ins, int p1, int p2, byte[] data, int ne) {
return create(cla, ins, p1, p2, data, 0, data.length, ne);
}
public static CommandApdu create(
int cla, int ins, int p1, int p2, byte[] data, int dataOffset, int dataLength, int ne) {
if (ne < 0) { if (ne < 0) {
throw new IllegalArgumentException("ne must not be negative"); throw new IllegalArgumentException("ne must not be negative");
} }
if (ne > 65536) { if (ne > 65536) {
throw new IllegalArgumentException("ne is too large"); throw new IllegalArgumentException("ne is too large");
} }
if (data != null) {
if (data == null) { data = Arrays.copyOfRange(data, dataOffset, dataOffset + dataLength);
} else {
data = new byte[0]; data = new byte[0];
} }
return new AutoValue_CommandApdu(cla, ins, p1, p2, data, ne); return new AutoValue_CommandApdu(cla, ins, p1, p2, data, ne);
} }