]> git.sur5r.net Git - openldap/commitdiff
ITS#7859 refix
authorHoward Chu <hyc@openldap.org>
Fri, 11 Jul 2014 19:25:47 +0000 (12:25 -0700)
committerHoward Chu <hyc@openldap.org>
Fri, 11 Jul 2014 19:29:15 +0000 (12:29 -0700)
This was actually broken by 65e163d2, ITS#6947. Reverting both
of those changes and fixing #6947 again.

libraries/libldap/ldif.c

index 9f868102ee7862925d19210082add8f9bee8b505..d8aa28ae8cf092c4423b42b5cd26a450ff3e562c 100644 (file)
@@ -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 );