]> git.sur5r.net Git - openldap/blobdiff - libraries/liblber/io.c
Re-fix ITS#6764 (check for ber == NULL _before_ using ber)
[openldap] / libraries / liblber / io.c
index f494e91238723a8e9a18187f4434b3318f5c4ffa..40b5acf6bf364f481b3111aa1d76274da8bcf8ee 100644 (file)
@@ -2,7 +2,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1998-2010 The OpenLDAP Foundation.
+ * Copyright 1998-2011 The OpenLDAP Foundation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -395,6 +395,10 @@ int ber_flatten2(
                bv->bv_val = NULL;
                bv->bv_len = 0;
 
+       } else if ( ber->ber_sos_ptr != NULL ) {
+               /* unmatched "{" and "}" */
+               return -1;
+
        } else {
                /* copy the berval */
                ber_len_t len = ber_pvt_ber_write( ber );
@@ -549,11 +553,7 @@ ber_get_next(
                                }
                                /* Did we run out of bytes? */
                                if ((char *)p == ber->ber_rwptr) {
-#if defined( EWOULDBLOCK )
                                        sock_errset(EWOULDBLOCK);
-#elif defined( EAGAIN )
-                                       sock_errset(EAGAIN);
-#endif                 
                                        return LBER_DEFAULT;
                                }
                        }
@@ -562,11 +562,7 @@ ber_get_next(
                }
 
                if ( ber->ber_ptr == ber->ber_rwptr ) {
-#if defined( EWOULDBLOCK )
                        sock_errset(EWOULDBLOCK);
-#elif defined( EAGAIN )
-                       sock_errset(EAGAIN);
-#endif                 
                        return LBER_DEFAULT;
                }
 
@@ -581,11 +577,7 @@ ber_get_next(
                        }
                        /* Not enough bytes? */
                        if (ber->ber_rwptr - (char *)p < llen) {
-#if defined( EWOULDBLOCK )
                                sock_errset(EWOULDBLOCK);
-#elif defined( EAGAIN )
-                               sock_errset(EAGAIN);
-#endif                 
                                return LBER_DEFAULT;
                        }
                        for (i=0; i<llen; i++) {
@@ -672,11 +664,7 @@ ber_get_next(
                ber->ber_rwptr+=res;
                
                if (res<to_go) {
-#if defined( EWOULDBLOCK )
                        sock_errset(EWOULDBLOCK);
-#elif defined( EAGAIN )
-                       sock_errset(EAGAIN);
-#endif                 
                        return LBER_DEFAULT;
                }
 done: