You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2024/11/12 08:16:45 UTC
(directory-ldap-api) branch master updated: Fix for DIRAPI-414
This is an automated email from the ASF dual-hosted git repository.
elecharny pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/directory-ldap-api.git
The following commit(s) were added to refs/heads/master by this push:
new 8af641877 Fix for DIRAPI-414
8af641877 is described below
commit 8af6418771a6a14e0753fded8d06727bf6f66e1f
Author: emmanuel lecharny <el...@apache.org>
AuthorDate: Tue Nov 12 09:16:36 2024 +0100
Fix for DIRAPI-414
---
.../directory/api/ldap/codec/api/LdapEncoder.java | 2 +-
.../api/ldap/codec/factory/Messagefactory.java | 3 +-
.../ldap/codec/factory/ModifyDnRequestFactory.java | 24 +++++++++++++--
.../directory/api/ldap/codec/LdapDecoderTest.java | 35 ++++++++++++++++++++++
4 files changed, 59 insertions(+), 5 deletions(-)
diff --git a/ldap/codec/core/src/main/java/org/apache/directory/api/ldap/codec/api/LdapEncoder.java b/ldap/codec/core/src/main/java/org/apache/directory/api/ldap/codec/api/LdapEncoder.java
index 23af57f64..95be8f319 100644
--- a/ldap/codec/core/src/main/java/org/apache/directory/api/ldap/codec/api/LdapEncoder.java
+++ b/ldap/codec/core/src/main/java/org/apache/directory/api/ldap/codec/api/LdapEncoder.java
@@ -152,7 +152,7 @@ public final class LdapEncoder
* @param codec The LdapApiService instance
* @param message The message to encode
*/
- private static void encodeProtocolOp( Asn1Buffer buffer, LdapApiService codec, Message message )
+ private static void encodeProtocolOp( Asn1Buffer buffer, LdapApiService codec, Message message ) throws EncoderException
{
switch ( message.getType() )
{
diff --git a/ldap/codec/core/src/main/java/org/apache/directory/api/ldap/codec/factory/Messagefactory.java b/ldap/codec/core/src/main/java/org/apache/directory/api/ldap/codec/factory/Messagefactory.java
index 807ee4e05..8c5fa5304 100644
--- a/ldap/codec/core/src/main/java/org/apache/directory/api/ldap/codec/factory/Messagefactory.java
+++ b/ldap/codec/core/src/main/java/org/apache/directory/api/ldap/codec/factory/Messagefactory.java
@@ -19,6 +19,7 @@
*/
package org.apache.directory.api.ldap.codec.factory;
+import org.apache.directory.api.asn1.EncoderException;
import org.apache.directory.api.asn1.util.Asn1Buffer;
import org.apache.directory.api.ldap.codec.api.LdapApiService;
import org.apache.directory.api.ldap.model.message.Message;
@@ -38,5 +39,5 @@ public interface Messagefactory
* @param buffer The buffer where to put the PDU
* @param message The message to encode
*/
- void encodeReverse( LdapApiService codec, Asn1Buffer buffer, Message message );
+ void encodeReverse( LdapApiService codec, Asn1Buffer buffer, Message message ) throws EncoderException;
}
diff --git a/ldap/codec/core/src/main/java/org/apache/directory/api/ldap/codec/factory/ModifyDnRequestFactory.java b/ldap/codec/core/src/main/java/org/apache/directory/api/ldap/codec/factory/ModifyDnRequestFactory.java
index 4332ed2b6..8069e4961 100644
--- a/ldap/codec/core/src/main/java/org/apache/directory/api/ldap/codec/factory/ModifyDnRequestFactory.java
+++ b/ldap/codec/core/src/main/java/org/apache/directory/api/ldap/codec/factory/ModifyDnRequestFactory.java
@@ -19,12 +19,16 @@
*/
package org.apache.directory.api.ldap.codec.factory;
+import org.apache.directory.api.asn1.EncoderException;
import org.apache.directory.api.asn1.ber.tlv.BerValue;
import org.apache.directory.api.asn1.util.Asn1Buffer;
+import org.apache.directory.api.i18n.I18n;
import org.apache.directory.api.ldap.codec.api.LdapApiService;
import org.apache.directory.api.ldap.codec.api.LdapCodecConstants;
import org.apache.directory.api.ldap.model.message.Message;
import org.apache.directory.api.ldap.model.message.ModifyDnRequest;
+import org.apache.directory.api.ldap.model.name.Dn;
+import org.apache.directory.api.ldap.model.name.Rdn;
import org.apache.directory.api.util.Strings;
/**
@@ -60,7 +64,7 @@ public final class ModifyDnRequestFactory implements Messagefactory
* @param message the ModifyRequest to encode
*/
@Override
- public void encodeReverse( LdapApiService codec, Asn1Buffer buffer, Message message )
+ public void encodeReverse( LdapApiService codec, Asn1Buffer buffer, Message message ) throws EncoderException
{
int start = buffer.getPos();
ModifyDnRequest modifyDnRequest = ( ModifyDnRequest ) message;
@@ -77,10 +81,24 @@ public final class ModifyDnRequestFactory implements Messagefactory
BerValue.encodeBoolean( buffer, modifyDnRequest.getDeleteOldRdn() );
// The new RDN
- BerValue.encodeOctetString( buffer, modifyDnRequest.getNewRdn().getName() );
+ Rdn newRdn = modifyDnRequest.getNewRdn();
+
+ if ( newRdn == null )
+ {
+ throw new EncoderException( I18n.err( I18n.ERR_03023_NEW_RDN_ATTRIBUTE_REQUESTED ) );
+ }
+
+ BerValue.encodeOctetString( buffer, newRdn.getName() );
// The entry DN
- BerValue.encodeOctetString( buffer, modifyDnRequest.getName().getName() );
+ Dn name = modifyDnRequest.getName();
+
+ if ( name == null )
+ {
+ throw new EncoderException( I18n.err( I18n.ERR_03022_NULL_REQUEST_NAME ) );
+ }
+
+ BerValue.encodeOctetString( buffer, name.getName() );
// The ModifyDnRequest tag
BerValue.encodeSequence( buffer, LdapCodecConstants.MODIFY_DN_REQUEST_TAG, start );
diff --git a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/LdapDecoderTest.java b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/LdapDecoderTest.java
index cf030c9b3..0dfbed1b7 100644
--- a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/LdapDecoderTest.java
+++ b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/LdapDecoderTest.java
@@ -35,11 +35,13 @@ import org.apache.directory.api.asn1.EncoderException;
import org.apache.directory.api.asn1.ber.Asn1Decoder;
import org.apache.directory.api.asn1.ber.tlv.TLVStateEnum;
import org.apache.directory.api.asn1.util.Asn1Buffer;
+import org.apache.directory.api.ldap.codec.api.LdapApiService;
import org.apache.directory.api.ldap.codec.api.LdapDecoder;
import org.apache.directory.api.ldap.codec.api.LdapEncoder;
import org.apache.directory.api.ldap.codec.api.LdapMessageContainer;
import org.apache.directory.api.ldap.codec.api.ResponseCarryingException;
import org.apache.directory.api.ldap.codec.osgi.AbstractCodecServiceTest;
+import org.apache.directory.api.ldap.codec.osgi.DefaultLdapCodecService;
import org.apache.directory.api.ldap.model.exception.ResponseCarryingMessageException;
import org.apache.directory.api.ldap.model.message.BindRequest;
import org.apache.directory.api.ldap.model.message.Message;
@@ -538,4 +540,37 @@ public class LdapDecoderTest extends AbstractCodecServiceTest
// Decode a PDU which is going to be bigger than the MAX PDU size: should throw an exception
assertThrows( DecoderException.class, () -> { Asn1Decoder.decode( stream, container ); } );
}
+
+
+ @Test
+ public void testNullRdnModifyDnRequest() throws DecoderException, EncoderException
+ {
+ String base64Bytes = "MHoCAwAxSmxKSixKShISbmRyb2lkEkpKPQIsAEpKEhJuZHJvaWQSSko9AiwASiFKLA==";
+
+ byte[] input = java.util.Base64.getDecoder().decode(base64Bytes);
+ ByteBuffer stream = ByteBuffer.allocate(input.length);
+ stream.put(input);
+ stream.flip();
+
+ LdapApiService codec = new DefaultLdapCodecService();
+ LdapMessageContainer<Message> container = new LdapMessageContainer<>(codec);
+
+ try {
+ Asn1Decoder.decode(stream, container);
+ } catch (DecoderException de) {
+ // we expect DecoderException
+ return;
+ }
+
+ Asn1Buffer buffer = new Asn1Buffer();
+
+ Message message = container.getMessage();
+ if (message == null) {
+ return;
+ }
+
+ assertThrows( EncoderException.class, () -> { LdapEncoder.encodeMessage(buffer, codec, message ); } );
+
+ buffer.clear();
+ }
}