From 189f312d6488a564029f75255e9247efd26086cc Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Fri, 11 Jul 2014 12:25:47 -0700 Subject: [PATCH] ITS#7859 refix This was actually broken by 65e163d2, ITS#6947. Reverting both of those changes and fixing #6947 again. --- libraries/libldap/ldif.c | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/libraries/libldap/ldif.c b/libraries/libldap/ldif.c index 9f868102ee..d8aa28ae8c 100644 --- a/libraries/libldap/ldif.c +++ b/libraries/libldap/ldif.c @@ -838,20 +838,24 @@ ldif_read_record( break; } } - if ( stop ) - break; - - if ( fgets( line, sizeof( line ), lfp->fp ) == NULL ) { - stop = 1; - len = 0; - } else { - len = strlen( line ); + if ( !stop ) { + if ( fgets( line, sizeof( line ), lfp->fp ) == NULL ) { + stop = 1; + len = 0; + } else { + len = strlen( line ); + } } - if ( len == 0 || line[len-1] != '\n' ) { - /* Add \n in case the line/file does not end with newline */ - line[len] = '\n'; - line[++len] = '\0'; + if ( stop ) { + /* Add \n in case the file does not end with newline */ + if (last_ch != '\n') { + len = 1; + line[0] = '\n'; + line[1] = '\0'; + goto last; + } + break; } /* Squash \r\n to \n */ @@ -920,9 +924,10 @@ ldif_read_record( } } } - } + } } +last: if ( *buflenp - lcur <= len ) { *buflenp += len + LDIF_MAXLINE; nbufp = ber_memrealloc( *bufp, *buflenp ); -- 2.39.5