]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#8864 Fix ber_realloc after a partial ber_flush
authorOndřej Kuzník <okuznik@symas.com>
Fri, 8 Jun 2018 11:51:35 +0000 (12:51 +0100)
committerQuanah Gibson-Mount <quanah@openldap.org>
Mon, 17 Jun 2019 15:27:17 +0000 (15:27 +0000)
libraries/liblber/io.c

index 3f7e63fccc17280a38b94d4a89bbafb42b9e283e..3bc9d376ef56ccf5c6f26564d9f421c8ebe9b5f6 100644 (file)
@@ -128,7 +128,7 @@ ber_write(
 int
 ber_realloc( BerElement *ber, ber_len_t len )
 {
-       ber_len_t       total, offset, sos_offset;
+       ber_len_t       total, offset, sos_offset, rw_offset;
        char            *buf;
 
        assert( ber != NULL );
@@ -165,6 +165,7 @@ ber_realloc( BerElement *ber, ber_len_t len )
        offset = ber->ber_ptr - buf;
        sos_offset = ber->ber_sos_ptr ? ber->ber_sos_ptr - buf : 0;
        /* if ber_sos_ptr != NULL, it is > ber_buf so that sos_offset > 0 */
+       rw_offset = ber->ber_rwptr ? ber->ber_rwptr - buf : 0;
 
        buf = (char *) ber_memrealloc_x( buf, total, ber->ber_memctx );
        if ( buf == NULL ) {
@@ -176,6 +177,8 @@ ber_realloc( BerElement *ber, ber_len_t len )
        ber->ber_ptr = buf + offset;
        if ( sos_offset )
                ber->ber_sos_ptr = buf + sos_offset;
+       if ( ber->ber_rwptr )
+               ber->ber_rwptr = buf + rw_offset;
 
        return( 0 );
 }