Index: src/test/org/apache/ldap/common/berlib/asn1/encoder/search/SearchRequestEncoderTest.java =================================================================== --- src/test/org/apache/ldap/common/berlib/asn1/encoder/search/SearchRequestEncoderTest.java (revision 356656) +++ src/test/org/apache/ldap/common/berlib/asn1/encoder/search/SearchRequestEncoderTest.java (working copy) @@ -58,4 +58,28 @@ encode( ( DefaultMutableTupleNode ) node ); TestUtils.assertEquals( expected, getEncoded() ); } + + /** + * Tests the encode method. + */ + public void testEncodePresenceFilter() throws Exception + { + FilterParserImpl parser = new FilterParserImpl(); + SearchRequestImpl request = new SearchRequestImpl( 33 ); + request.setBase( "dc=apache,dc=org" ); + request.setDerefAliases( DerefAliasesEnum.DEREFINSEARCHING ); + request.setFilter( parser.parse( + "(objectClass=*)" ) ); + request.setScope( ScopeEnum.SINGLELEVEL ); + request.setSizeLimit( 12 ); + request.setTimeLimit( 300 ); + request.setTypesOnly( true ); + + byte[] expected = new byte[] {0x30, 0x36, 0x02, 0x01, 0x21, 0x63, 0x31, 0x04, 0x10, 0x64, 0x63, 0x3D, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2C, 0x64, 0x63, 0x3D, 0x6F, 0x72, 0x67, 0x0A, 0x01, 0x01, 0x0A, 0x01, 0x01, 0x02, 0x01, 0x0C, 0x02, 0x02, 0x01, 0x2C, 0x01, 0x01, 0xFFFFFFFF, 0xFFFFFF87, 0x0B, 0x6F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x43, 0x6C, 0x61, 0x73, 0x73, 0x30, 0x00}; + + // Encode stub into tuple tree then into the accumulator + TupleNode node = SearchRequestEncoder.INSTANCE.encode( request ); + encode( ( DefaultMutableTupleNode ) node ); + TestUtils.assertEquals( expected, getEncoded() ); + } } Index: src/main/java/org/apache/ldap/common/berlib/asn1/encoder/search/SearchRequestEncoder.java =================================================================== --- src/main/java/org/apache/ldap/common/berlib/asn1/encoder/search/SearchRequestEncoder.java (revision 356656) +++ src/main/java/org/apache/ldap/common/berlib/asn1/encoder/search/SearchRequestEncoder.java (working copy) @@ -335,8 +335,9 @@ ( SimpleNode ) node ); break; case( LeafNode.PRESENCE ): - PresenceNode presence = ( PresenceNode ) node; - encode( parent, LdapTag.CONTEXT_SPECIFIC_TAG_7, presence ); + encode( parent, LdapTag.CONTEXT_SPECIFIC_TAG_7, + ( PresenceNode ) node ); + break; case( LeafNode.APPROXIMATE ): encode( parent, LdapTag.CONTEXT_SPECIFIC_TAG_8, ( SimpleNode ) node );