From: Howard Chu Date: Thu, 2 Feb 2012 11:26:53 +0000 (-0800) Subject: ITS#7146 fix prev commit X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=3423b56690fe2b2376140ce09f274dc701ff0632;p=openldap ITS#7146 fix prev commit --- diff --git a/servers/slapd/back-mdb/attr.c b/servers/slapd/back-mdb/attr.c index e57c5d7145..8faf17a59c 100644 --- a/servers/slapd/back-mdb/attr.c +++ b/servers/slapd/back-mdb/attr.c @@ -556,6 +556,12 @@ int mdb_ad_read( struct mdb_info *mdb, MDB_txn *txn ) if ( rc ) { rc = slap_bv2undef_ad( &bdata, &mdb->mi_ads[i], &text, 0 ); } else { + if ( ad->ad_index >= MDB_MAXADS ) { + Debug( LDAP_DEBUG_ANY, + "mdb_adb_read: too many AttributeDescriptions in use\n", + 0, 0, 0 ); + return LDAP_OTHER; + } mdb->mi_adxs[ad->ad_index] = i; mdb->mi_ads[i] = ad; } diff --git a/servers/slapd/back-mdb/id2entry.c b/servers/slapd/back-mdb/id2entry.c index cdc2e051a2..863ccf6c1f 100644 --- a/servers/slapd/back-mdb/id2entry.c +++ b/servers/slapd/back-mdb/id2entry.c @@ -500,6 +500,11 @@ static int mdb_entry_partsize(struct mdb_info *mdb, MDB_txn *txn, Entry *e, for (a=e->e_attrs; a; a=a->a_next) { /* For AttributeDesc, we only store the attr index */ nat++; + if (a->a_desc->ad_index >= MDB_MAXADS) { + Debug( LDAP_DEBUG_ANY, "mdb_entry_partsize: too many AttributeDescriptions used\n", + 0, 0, 0 ); + return LDAP_OTHER; + } if (!mdb->mi_adxs[a->a_desc->ad_index]) { int rc = mdb_ad_get(mdb, txn, a->a_desc); if (rc) @@ -569,11 +574,6 @@ static int mdb_entry_encode(Operation *op, Entry *e, MDB_val *data, Ecount *eh) ptr = (unsigned char *)(lp + eh->offset); for (a=e->e_attrs; a; a=a->a_next) { - if (a->a_desc->ad_index >= MDB_MAXADS) { - Debug( LDAP_DEBUG_ANY, "mdb_entry_encode: too many AttributeDescriptions used\n", - 0, 0, 0 ); - return LDAP_OTHER; - } *lp++ = mdb->mi_adxs[a->a_desc->ad_index]; l = a->a_numvals; if (a->a_nvals != a->a_vals)