Skip to content

Commit

Permalink
#1 Do not skipped a values with empty length while parsing and constr…
Browse files Browse the repository at this point in the history
…ucting
  • Loading branch information
Evgeniy Sinev committed Nov 12, 2017
1 parent b551868 commit f19dd6b
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/main/java/com/payneteasy/tlv/BerTlvParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ private ParseResult parseWithResult(int aLevel, byte[] aBuf, int aOffset, int aL
private void addChildren(int aLevel, byte[] aBuf, int aOffset, String levelPadding, int aTagBytesCount, int aDataBytesCount, int valueLength, ArrayList<BerTlv> list) {
int startPosition = aOffset + aTagBytesCount + aDataBytesCount;
int len = valueLength;
while (startPosition < aOffset + valueLength) {
while (startPosition <= aOffset + valueLength) {
ParseResult result = parseWithResult(aLevel+1, aBuf, startPosition, len);
list.add(result.tlv);

Expand Down
46 changes: 46 additions & 0 deletions src/test/java/com/payneteasy/tlv/BerTlvBuilderTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import org.junit.Assert;
import org.junit.Test;

import java.util.Arrays;
import java.util.List;

import static com.payneteasy.tlv.BerTlvBuilder.template;
Expand Down Expand Up @@ -159,6 +160,18 @@ public void addToTlvs() {

}

@Test
public void getContructedTagBytes() {
BerTlv constructedTag = new BerTlv(new BerTag(0xE4)
, Arrays.asList(new BerTlv(new BerTag(0x86), HexUtil.parseHex("ED3C3B8B03928D0E0012")))
);

BerTlvBuilder builder = new BerTlvBuilder();
builder.addBerTlv(constructedTag);
byte[] bytes = builder.buildArray();
Assert.assertEquals("[14] : E4 0C 86 0A ED 3C 3B 8B 03 92 8D 0E 00 12", HexUtil.toFormattedHexString(bytes));
}

@Test
public void testBigData() {
byte[] bigData = new byte[1024];
Expand All @@ -170,4 +183,37 @@ public void testBigData() {

Assert.assertEquals(1, berTlvs.getList().size());
}

@Test
public void test_empty() {
BerTlv tlv = new BerTlv(new BerTag(0x01), new byte[]{});

byte[] bytes = new BerTlvBuilder(new BerTag(0xe3))
.addBerTlv(tlv)
.buildArray();

BerTlv berTlv = new BerTlvBuilder(new BerTag(0xe3))
.addBerTlv(tlv)
.buildTlv();

BerTlvLogger.log(" ", berTlv, new BerTlvLoggerSlf4j());

System.out.println("bytes = " + HexUtil.toFormattedHexString(bytes));
}

@Test
public void test_empty_length() {
BerTlv tlv = new BerTlv(new BerTag(0x01),new byte[]{});

BerTlv some = new BerTlvBuilder()
.addBytes(new BerTag(0xE3), new BerTlvBuilder().addBerTlv(tlv).buildArray())
.buildTlv();

Assert.assertEquals(some.getTag(), new BerTag(0xe3));
Assert.assertNotNull(some.getValues());
Assert.assertEquals(1, some.getValues().size());
BerTlv empty = some.getValues().get(0);
Assert.assertEquals(new BerTag(0x01), empty.getTag());
Assert.assertEquals("", empty.getHexValue());
}
}
13 changes: 13 additions & 0 deletions src/test/java/com/payneteasy/tlv/BerTlvParserTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -98,4 +98,17 @@ public void testMulti() {


}

@Test
public void test_empty_length() {
BerTlv tlv = new BerTlvParser(LOG).parseConstructed(HexUtil.parseHex("E3 02 01 00"));
BerTlvLogger.log(" ", tlv, LOG);

Assert.assertEquals(tlv.getTag(), new BerTag(0xe3));
Assert.assertNotNull(tlv.getValues());
Assert.assertEquals(1, tlv.getValues().size());
BerTlv emptyTag = tlv.getValues().get(0);
Assert.assertEquals(new BerTag(0x01), emptyTag.getTag());
Assert.assertEquals("", emptyTag.getHexValue());
}
}

0 comments on commit f19dd6b

Please sign in to comment.