#include <security_cdsa_utilities/cssmdata.h>
#include <security_cdsa_utilities/cssmpods.h>
#include <security_cdsa_utilities/cssmalloc.h>
-#include <security_cdsa_utilities/walkers.h>
+#include <security_cdsa_utilities/cssmwalkers.h>
#include <security_cdsa_utilities/cssmdbname.h>
CssmDlDbHandle *handles() const { return CssmDlDbHandle::overlay(DLDBHandle); }
CssmDlDbHandle * &handles() { return CssmDlDbHandle::overlayVar(DLDBHandle); }
- CssmDlDbHandle &operator [] (uint32 ix) const
- { assert(ix < count()); return CssmDlDbHandle::overlay(DLDBHandle[ix]); }
+ CssmDlDbHandle &operator [] (uint32 ix) const {
+ if (ix >= count()) {
+ secemergency("CssmDlDbList: attempt to index beyond bounds");
+ abort();
+ }
+ return CssmDlDbHandle::overlay(DLDBHandle[ix]);
+ }
void setDlDbList(uint32 n, CSSM_DL_DB_HANDLE *list)
{ count() = n; handles() = CssmDlDbHandle::overlay(list); }
{ return CssmDbAttributeInfo::overlayVar(AttributeInfo); }
CssmDbAttributeInfo *attributes() const
{ return CssmDbAttributeInfo::overlay(AttributeInfo); }
- CssmDbAttributeInfo &at(uint32 ix) const
- { assert(ix < size()); return attributes()[ix]; }
+ CssmDbAttributeInfo &at(uint32 ix) const {
+ if (ix >= size()) {
+ secemergency("CssmDbRecordAttributeInfo: attempt to index beyond bounds");
+ abort();
+ }
+ return attributes()[ix];
+ }
CssmDbAttributeInfo &operator [] (uint32 ix) const { return at(ix); }
};
{ return CssmDbAttributeData::overlay(AttributeData); }
// Attributes by position
- CssmDbAttributeData &at(unsigned int ix) const
- { assert(ix < size()); return attributes()[ix]; }
+ CssmDbAttributeData &at(unsigned int ix) const {
+ if (ix >= size()) {
+ secemergency("CssmDbRecordAttributeData: attempt to index beyond bounds");
+ abort();
+ }
+ return attributes()[ix];
+ }
CssmDbAttributeData &operator [] (unsigned int ix) const { return at(ix); }
CssmDbAttributeData &add(const CSSM_DB_ATTRIBUTE_INFO &info);
CssmDbAttributeData &add(const CSSM_DB_ATTRIBUTE_INFO &info, const CssmPolyData &value);
+ // Take the attributes from the object, and overlay them onto this one
+ void updateWith(const CssmAutoDbRecordAttributeData* newValues);
+
// So clients can pass this as the allocator argument to add()
operator Allocator &() const { return mValueAllocator; }
+
+ CssmDbAttributeData* findAttribute (const CSSM_DB_ATTRIBUTE_INFO &info);
private:
Allocator &mValueAllocator;
-
- CssmDbAttributeData* findAttribute (const CSSM_DB_ATTRIBUTE_INFO &info);
+
CssmDbAttributeData& getAttributeReference (const CSSM_DB_ATTRIBUTE_INFO &info);
};
CssmSelectionPredicate *predicates() const
{ return CssmSelectionPredicate::overlay(SelectionPredicate); }
- CssmSelectionPredicate &at(uint32 ix) const
- { assert(ix < size()); return predicates()[ix]; }
+ CssmSelectionPredicate &at(uint32 ix) const {
+ if (ix >= size()) {
+ secemergency("CssmDbRecordAttributeData: attempt to index beyond bounds");
+ abort();
+ }
+ return predicates()[ix];
+ }
CssmSelectionPredicate &operator[] (uint32 ix) const { return at(ix); }