From 0ee90c5b3da6af95158db3f41462bf52fcfaf841 Mon Sep 17 00:00:00 2001 From: jwat Date: Thu, 7 Jul 2011 11:48:02 +0900 Subject: [PATCH] Bug fix on BerDecoder. Clearing content octets when a DerOctets is fixed. Fix ambiguous definition on FrightStatusTypes.asn. --- jp/bitmeister/asn1/codec/ber/BerDecoder.java | 3 +++ jp/bitmeister/asn1/codec/ber/DerEncoder.java | 26 ++++++++++++++++++++++++- jp/bitmeister/asn1/sample/FrightStatus.java | 5 +++-- jp/bitmeister/asn1/sample/FrightStatusTypes.asn | 2 +- 4 files changed, 32 insertions(+), 4 deletions(-) diff --git a/jp/bitmeister/asn1/codec/ber/BerDecoder.java b/jp/bitmeister/asn1/codec/ber/BerDecoder.java index 9e733cb..15c2e49 100644 --- a/jp/bitmeister/asn1/codec/ber/BerDecoder.java +++ b/jp/bitmeister/asn1/codec/ber/BerDecoder.java @@ -160,6 +160,8 @@ public class BerDecoder implements ASN1Decoder, } while (specification != null); try { data.accept(this); + } catch (ASN1DecodingException ex) { + throw ex; } catch (Exception e) { ASN1DecodingException ex = new ASN1DecodingException(); ex.setMessage("Exception thrown while decoding process.", e, @@ -416,6 +418,7 @@ public class BerDecoder implements ASN1Decoder, if (e.matches(BerDecoder.this.tagClass, BerDecoder.this.tagNumber)) { processComponent(data, e); + break; } } } diff --git a/jp/bitmeister/asn1/codec/ber/DerEncoder.java b/jp/bitmeister/asn1/codec/ber/DerEncoder.java index 8a3c843..8e66793 100644 --- a/jp/bitmeister/asn1/codec/ber/DerEncoder.java +++ b/jp/bitmeister/asn1/codec/ber/DerEncoder.java @@ -293,6 +293,7 @@ public class DerEncoder extends BerEncoder { System.arraycopy(e, 0, encodedOctets, index, e.length); index += e.length; } + clearContents(); } /** @@ -309,9 +310,16 @@ public class DerEncoder extends BerEncoder { } /** - * @return + * Returns all content octets. + * + * @return The array of content octets. */ abstract byte[][] getContents(); + + /** + * Clears content octets. + */ + abstract void clearContents(); /** * Comparator used for sorting elements by the canonical order for tags. @@ -419,6 +427,14 @@ public class DerEncoder extends BerEncoder { return new byte[][] {contents}; } + /* (non-Javadoc) + * @see jp.bitmeister.asn1.codec.ber.DerEncoder.DerOctets#clearContents() + */ + @Override + void clearContents() { + contents = null; + } + } /** @@ -480,6 +496,14 @@ public class DerEncoder extends BerEncoder { return contents; } + /* (non-Javadoc) + * @see jp.bitmeister.asn1.codec.ber.DerEncoder.DerOctets#clearContents() + */ + @Override + void clearContents() { + // nothing to do. + } + /** * Sorts elements by the canonical order for tags. * diff --git a/jp/bitmeister/asn1/sample/FrightStatus.java b/jp/bitmeister/asn1/sample/FrightStatus.java index cfbf89d..9050932 100644 --- a/jp/bitmeister/asn1/sample/FrightStatus.java +++ b/jp/bitmeister/asn1/sample/FrightStatus.java @@ -23,11 +23,11 @@ import jp.bitmeister.asn1.sample.FrightStatusTypes.Information; import jp.bitmeister.asn1.sample.FrightStatusTypes.Status; import jp.bitmeister.asn1.type.ASN1TagClass; import jp.bitmeister.asn1.type.ASN1TagMode; -import jp.bitmeister.asn1.type.builtin.SEQUENCE; +import jp.bitmeister.asn1.type.builtin.SET; @ASN1ModuleRef(FrightStatusTypes.class) @ASN1Tag(value = 0, tagClass = ASN1TagClass.APPLICATION, tagMode = ASN1TagMode.IMPLICIT) -public class FrightStatus extends SEQUENCE { +public class FrightStatus extends SET { @ASN1Element(0) public FrightNumber frightNo; @@ -41,6 +41,7 @@ public class FrightStatus extends SEQUENCE { public Information arrival; @ASN1Element(3) + @ASN1Tag(2) public Status status; public FrightStatus() {} diff --git a/jp/bitmeister/asn1/sample/FrightStatusTypes.asn b/jp/bitmeister/asn1/sample/FrightStatusTypes.asn index abd13ca..19ff5e6 100644 --- a/jp/bitmeister/asn1/sample/FrightStatusTypes.asn +++ b/jp/bitmeister/asn1/sample/FrightStatusTypes.asn @@ -24,7 +24,7 @@ FrightStatusTypes DEFINITIONS AUTOMATIC TAGS ::= BEGIN frightNo FrightNumber, departure [0] IMPLICIT Information, arrival [1] IMPLICIT Information, - status Status + status [2] Status } AllFrights ::= SEQUENCE OF FrightStatus -- 2.11.0