From 5362c159062866896aa52f517078a83afc87ceb3 Mon Sep 17 00:00:00 2001 From: Kurt Zeilenga Date: Mon, 2 Dec 2002 19:23:23 +0000 Subject: [PATCH] Fix "cn: \n" bug --- libraries/libldif/line64.c | 39 ++++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/libraries/libldif/line64.c b/libraries/libldif/line64.c index 3f16c95d60..94c3f9dd4b 100644 --- a/libraries/libldif/line64.c +++ b/libraries/libldif/line64.c @@ -114,16 +114,10 @@ ldif_parse_line( url = 0; b64 = 0; - if ( *s == '\0' ) { - /* no value */ - value = ""; - vlen = 0; - goto done; - } - if ( *s == '<' ) { s++; url = 1; + } else if ( *s == ':' ) { /* base 64 encoded value */ s++; @@ -142,20 +136,19 @@ ldif_parse_line( } *d = '\0'; - /* if no value is present, error out */ - if ( *s == '\0' ) { - ber_pvt_log_printf( LDAP_DEBUG_PARSE, ldif_debug, - "ldif_parse_line: %s missing %svalue\n", type, - url ? "URL " : b64 ? "base64 " : "" ); - value = NULL; - vlen = 0; - goto done; - } - if ( b64 ) { char *byte = s; - value = s; + if ( *s == '\0' ) { + /* no value is present, error out */ + ber_pvt_log_printf( LDAP_DEBUG_PARSE, ldif_debug, + "ldif_parse_line: %s missing base64 value\n", type ); + value = NULL; + vlen = 0; + goto done; + } + + byte = value = s; for ( p = s, vlen = 0; p < d; p += 4, vlen += 3 ) { int i; @@ -199,6 +192,15 @@ ldif_parse_line( s[ vlen ] = '\0'; } else if ( url ) { + if ( *s == '\0' ) { + /* no value is present, error out */ + ber_pvt_log_printf( LDAP_DEBUG_PARSE, ldif_debug, + "ldif_parse_line: %s missing URL value\n", type ); + value = NULL; + vlen = 0; + goto done; + } + if( ldif_fetch_url( s, &value, &vlen ) ) { ber_pvt_log_printf( LDAP_DEBUG_ANY, ldif_debug, "ldif_parse_line: %s: URL \"%s\" fetch failed\n", @@ -218,6 +220,7 @@ done: if( type == NULL ) { ber_pvt_log_printf( LDAP_DEBUG_ANY, ldif_debug, "ldif_parse_line: type malloc failed\n"); + if( url ) ber_memfree( value ); ber_memfree( freeme ); return( -1 ); } -- 2.39.5