From 9298a6718f2edc6101ea71bbc88704591d6ee9d9 Mon Sep 17 00:00:00 2001 From: Ludwig Krispenz Date: Mon, 30 Sep 2013 21:44:05 +0200 Subject: [PATCH] Fix for coverty issues 12028,12029,12030 --- ldap/servers/plugins/sync/sync_persist.c | 2 +- ldap/servers/plugins/sync/sync_refresh.c | 4 ++++ ldap/servers/plugins/sync/sync_util.c | 23 ++++++++++++++++++++--- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/ldap/servers/plugins/sync/sync_persist.c b/ldap/servers/plugins/sync/sync_persist.c index d35dde9..7cd65c8 100644 --- a/ldap/servers/plugins/sync/sync_persist.c +++ b/ldap/servers/plugins/sync/sync_persist.c @@ -582,7 +582,7 @@ sync_send_results( void *arg ) char **noattrs = NULL; LDAPControl **ectrls = NULL; Slapi_Entry *ec; - int chg_type; + int chg_type = LDAP_SYNC_NONE; /* deque one element */ PR_Lock( req->req_lock ); diff --git a/ldap/servers/plugins/sync/sync_refresh.c b/ldap/servers/plugins/sync/sync_refresh.c index 1487289..83cb5ca 100644 --- a/ldap/servers/plugins/sync/sync_refresh.c +++ b/ldap/servers/plugins/sync/sync_refresh.c @@ -457,6 +457,10 @@ sync_read_entry_from_changelog( Slapi_Entry *cl_entry, void *cb_data) int index = 0; Sync_CallBackData *cb = (Sync_CallBackData *) cb_data; + if (cb == NULL) { + return(1); + } + uniqueid = sync_get_attr_value_from_entry (cl_entry, CL_ATTR_UNIQUEID); chgtype = sync_get_attr_value_from_entry (cl_entry, CL_ATTR_CHGTYPE); chgnr = sync_get_attr_value_from_entry (cl_entry, CL_ATTR_CHANGENUMBER); diff --git a/ldap/servers/plugins/sync/sync_util.c b/ldap/servers/plugins/sync/sync_util.c index 9e98561..5ec5e5d 100644 --- a/ldap/servers/plugins/sync/sync_util.c +++ b/ldap/servers/plugins/sync/sync_util.c @@ -80,8 +80,25 @@ sync_parse_control_value( struct berval *psbvp, ber_int_t *mode, int *reload, ch if ( ber_scanf( ber, "{e", mode ) == LBER_ERROR ) { rc= LDAP_PROTOCOL_ERROR; - } else if ( ber_scanf( ber, "a", cookie ) != LBER_ERROR ) - ber_scanf( ber, "b}", reload ); + } else { + ber_tag_t tag; + ber_len_t len; + tag = ber_peek_tag( ber, &len ); + if ( tag == LDAP_TAG_SYNC_COOKIE ) { + rc = ber_scanf( ber, "a", cookie ); + tag = ber_peek_tag( ber, &len ); + } + if (rc != LBER_ERROR && tag == LDAP_TAG_RELOAD_HINT ) { + rc = ber_scanf( ber, "b", reload ); + } + if (rc != LBER_ERROR) { + rc = ber_scanf( ber, "}"); + } + if (rc == LBER_ERROR) { + + rc= LDAP_PROTOCOL_ERROR; + }; + } /* the ber encoding is no longer needed */ ber_free(ber,1); @@ -147,7 +164,7 @@ sync_create_state_control( Slapi_Entry *e, LDAPControl **ctrlp, int type, Sync_C Slapi_Attr *attr; Slapi_Value *val; - if ( ctrlp == NULL || ( ber = der_alloc()) == NULL ) { + if ( type == LDAP_SYNC_NONE || ctrlp == NULL || ( ber = der_alloc()) == NULL ) { return( LDAP_OPERATIONS_ERROR ); } -- 1.7.11.7