From: Howard Chu Date: Wed, 26 Aug 2020 12:22:52 +0000 (+0100) Subject: ITS#9328 cldap: check for error on connected socket X-Git-Tag: OPENLDAP_REL_ENG_2_4_52~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ec5eba5393e5cc65b05e54658c55500cdbff775a;p=thirdparty%2Fopenldap.git ITS#9328 cldap: check for error on connected socket libldap doesn't use a connected socket for UDP sessions, but 3rd parties can, passed in with ldap_init_fd(). --- diff --git a/libraries/libldap/result.c b/libraries/libldap/result.c index bdced135bb..e2b2206305 100644 --- a/libraries/libldap/result.c +++ b/libraries/libldap/result.c @@ -486,7 +486,8 @@ retry: #ifdef LDAP_CONNECTIONLESS if ( LDAP_IS_UDP(ld) ) { struct sockaddr_storage from; - ber_int_sb_read( lc->lconn_sb, &from, sizeof(struct sockaddr_storage) ); + if ( ber_int_sb_read( lc->lconn_sb, &from, sizeof(struct sockaddr_storage) ) < 0 ) + goto fail; if ( ld->ld_options.ldo_version == LDAP_VERSION2 ) isv2 = 1; } nextresp3: @@ -502,10 +503,11 @@ nextresp3: break; case LBER_DEFAULT: +fail: err = sock_errno(); #ifdef LDAP_DEBUG Debug( LDAP_DEBUG_CONNS, - "ber_get_next failed.\n", 0, 0, 0 ); + "ber_get_next failed, errno=%d.\n", err, 0, 0 ); #endif if ( err == EWOULDBLOCK ) return LDAP_MSG_X_KEEP_LOOKING; if ( err == EAGAIN ) return LDAP_MSG_X_KEEP_LOOKING;