diff options
| -rw-r--r-- | core/java/android/nfc/tech/MifareClassic.java | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/core/java/android/nfc/tech/MifareClassic.java b/core/java/android/nfc/tech/MifareClassic.java index 1b383f1168ef..34fd7cf73a45 100644 --- a/core/java/android/nfc/tech/MifareClassic.java +++ b/core/java/android/nfc/tech/MifareClassic.java @@ -22,6 +22,7 @@ import android.os.RemoteException; import java.io.IOException; import java.nio.ByteBuffer; +import java.nio.ByteOrder; /** * Technology class representing MIFARE Classic tags (also known as MIFARE Standard). @@ -328,12 +329,14 @@ public final class MifareClassic extends BasicTagTechnology { */ public void increment(int blockIndex, int value) throws IOException { validateBlock(blockIndex); + validateValueOperand(value); checkConnected(); ByteBuffer cmd = ByteBuffer.allocate(6); + cmd.order(ByteOrder.LITTLE_ENDIAN); cmd.put( (byte) 0xC1 ); cmd.put( (byte) blockIndex ); - cmd.putInt(value); // ByteBuffer does the correct big endian translation + cmd.putInt(value); transceive(cmd.array(), false); } @@ -345,16 +348,24 @@ public final class MifareClassic extends BasicTagTechnology { */ public void decrement(int blockIndex, int value) throws IOException { validateBlock(blockIndex); + validateValueOperand(value); checkConnected(); ByteBuffer cmd = ByteBuffer.allocate(6); + cmd.order(ByteOrder.LITTLE_ENDIAN); cmd.put( (byte) 0xC0 ); cmd.put( (byte) blockIndex ); - cmd.putInt(value); // ByteBuffer does the correct big endian translation + cmd.putInt(value); transceive(cmd.array(), false); } + private void validateValueOperand(int value) { + if (value < 0) { + throw new IllegalArgumentException("value operand negative"); + } + } + /** * Copy from temporary memory to value block. * @param blockIndex |