From 1901f85d2a380a8abdb80dcb6d99490c498b4196 Mon Sep 17 00:00:00 2001
From: Quanah Gibson-Mount <quanah@openldap.org>
Date: Sat, 31 Oct 2009 00:57:34 +0000
Subject: [PATCH] ITS#6344

---
 CHANGES                    | 1 +
 libraries/liblber/encode.c | 9 +++++----
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/CHANGES b/CHANGES
index ba16521d4e..56f6f22ac3 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,7 @@
 OpenLDAP 2.4 Change Log
 
 OpenLDAP 2.4.20 Engineering
+	Fixed liblber to return failure on certain failures (ITS#6344)
 	Fixed libldap uninitialized return value (ITS#6355)
 	Fixed liblutil constant (ITS#5909)
 	Added slapd handling of hex server IDs (ITS#6297)
diff --git a/libraries/liblber/encode.c b/libraries/liblber/encode.c
index a5c1de0286..d2a432fe1e 100644
--- a/libraries/liblber/encode.c
+++ b/libraries/liblber/encode.c
@@ -151,6 +151,7 @@ ber_encode_oid( BerValue *in, BerValue *out )
 			der[j] = tmp;
 		}
 		der += len;
+
 		if ( ptr == inend )
 			break;
 
@@ -242,10 +243,10 @@ ber_put_ostring(
 	rc = ber_write( ber, (char *) ptr, &header[sizeof(header)] - ptr, 0 );
 	if ( rc >= 0 && ber_write( ber, str, len, 0 ) >= 0 ) {
 		/* length(tag + length + contents) */
-		rc += (int) len;
+		return rc + (int) len;
 	}
 
-	return rc;
+	return -1;
 }
 
 int
@@ -300,10 +301,10 @@ ber_put_bitstring(
 	rc = ber_write( ber, (char *) ptr, &header[sizeof(header)] - ptr, 0 );
 	if ( rc >= 0 && ber_write( ber, str, len, 0 ) >= 0 ) {
 		/* length(tag + length + unused bit count + bitstring) */
-		rc += (int) len;
+		return rc + (int) len;
 	}
 
-	return rc;
+	return -1;
 }
 
 int
-- 
GitLab