diff options
author | Noriko Hosoi <nhosoi@redhat.com> | 2010-08-19 18:13:00 -0700 |
---|---|---|
committer | Noriko Hosoi <nhosoi@redhat.com> | 2010-08-20 11:50:53 -0700 |
commit | bee3bc00d4655589e1dc6b88f9d6804948ffa133 (patch) | |
tree | 34bf90bf83ae647365810d0a364fb8a758a3ca83 /ldap/servers/slapd/back-ldbm/index.c | |
parent | bfac0d544d1edd7514ebc1ce68a2102bcfcb8c28 (diff) | |
download | ds-bee3bc00d4655589e1dc6b88f9d6804948ffa133.tar.gz ds-bee3bc00d4655589e1dc6b88f9d6804948ffa133.tar.xz ds-bee3bc00d4655589e1dc6b88f9d6804948ffa133.zip |
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
https://bugzilla.redhat.com/show_bug.cgi?id=613056
Resolves: bug 613056
Bug description: Fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
description: The index_index2prefix() has been modified to return NULL when indextype is NULL.
All callers have been modified to handle NULL return value.
Diffstat (limited to 'ldap/servers/slapd/back-ldbm/index.c')
-rw-r--r-- | ldap/servers/slapd/back-ldbm/index.c | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/ldap/servers/slapd/back-ldbm/index.c b/ldap/servers/slapd/back-ldbm/index.c index e1a8ecf4..49b967b4 100644 --- a/ldap/servers/slapd/back-ldbm/index.c +++ b/ldap/servers/slapd/back-ldbm/index.c @@ -840,6 +840,10 @@ index_read_ext( if (unindexed != NULL) *unindexed = 0; prefix = index_index2prefix( indextype ); + if (prefix == NULL) { + LDAPDebug0Args( LDAP_DEBUG_ANY, "index_read_ext: NULL prefix\n" ); + return NULL; + } LDAPDebug( LDAP_DEBUG_TRACE, "=> index_read( \"%s\" %s \"%s\" )\n", type, prefix, encode (val, buf)); @@ -1133,7 +1137,14 @@ index_range_read( int timelimit = -1; *err = 0; - plen = strlen( prefix = index_index2prefix( indextype )); + + prefix = index_index2prefix( indextype ); + if (prefix == NULL) { + LDAPDebug0Args( LDAP_DEBUG_ANY, "index_range_read: NULL prefix\n" ); + return( NULL ); + } + + plen = strlen(prefix); slapi_pblock_get(pb, SLAPI_SEARCH_IS_AND, &is_and); if (!is_and) { @@ -1511,6 +1522,13 @@ addordel_values( (flags & BE_INDEX_ADD) ? "add" : "del", 0, 0); prefix = index_index2prefix( indextype ); + + if (prefix == NULL) { + LDAPDebug( LDAP_DEBUG_ANY, "<= %s_values: NULL prefix\n", + (flags & BE_INDEX_ADD) ? "add" : "del", 0, 0 ); + return( -1 ); + } + if ( vals == NULL ) { key.dptr = prefix; key.dsize = strlen( prefix ) + 1; /* include null terminator */ @@ -1651,6 +1669,11 @@ addordel_values_sv( (flags & BE_INDEX_ADD) ? "add" : "del", 0, 0); prefix = index_index2prefix( indextype ); + if (prefix == NULL) { + LDAPDebug0Args( LDAP_DEBUG_ANY, "addordel_values_sv: NULL prefix\n" ); + return( -1 ); + } + if ( vals == NULL ) { key.dptr = prefix; key.dsize = strlen( prefix ) + 1; /* include null terminator */ @@ -1982,7 +2005,7 @@ index_addordel_values_ext_sv( if ( err != 0 ) { ldbm_nasty(errmsg, 1260, err); - slapi_ch_free(&keys); + slapi_ch_free((void **)&keys); goto bad; } } @@ -1991,7 +2014,7 @@ index_addordel_values_ext_sv( * But, for simplicity, we destroy it now: */ destroy_matchrule_indexer(pb); - slapi_ch_free(&keys); + slapi_ch_free((void **)&keys); } } } @@ -2054,7 +2077,8 @@ char* index_index2prefix (const char* indextype) { char* prefix; - if ( indextype == indextype_PRESENCE ) prefix = prefix_PRESENCE; + if ( indextype == NULL ) prefix = NULL; + else if ( indextype == indextype_PRESENCE ) prefix = prefix_PRESENCE; else if ( indextype == indextype_EQUALITY ) prefix = prefix_EQUALITY; else if ( indextype == indextype_APPROX ) prefix = prefix_APPROX; else if ( indextype == indextype_SUB ) prefix = prefix_SUB; |