// Used to merge two distinct TokenBasedSets (used currently only in PermissionSet Deserialization) internal TokenBasedSet SpecialUnion(TokenBasedSet other) { // This gets called from PermissionSet.OnDeserialized and it's possible that the TokenBasedSets have // not been subjected to VTS callbacks yet OnDeserializedInternal(); TokenBasedSet unionSet = new TokenBasedSet(); int maxMax; if (other != null) { other.OnDeserializedInternal(); maxMax = this.GetMaxUsedIndex() > other.GetMaxUsedIndex() ? this.GetMaxUsedIndex() : other.GetMaxUsedIndex(); } else { maxMax = this.GetMaxUsedIndex(); } for (int i = 0; i <= maxMax; ++i) { Object thisObj = this.GetItem(i); IPermission thisPerm = thisObj as IPermission; Object otherObj = (other != null)?other.GetItem(i):null; IPermission otherPerm = otherObj as IPermission; if (thisObj == null && otherObj == null) { continue; } if (thisObj == null) { PermissionToken token = PermissionToken.GetToken(otherPerm); if (token == null) { throw new SerializationException(Environment.GetResourceString("Serialization_InsufficientState")); } unionSet.SetItem(token.m_index, otherPerm); } else if (otherObj == null) { PermissionToken token = PermissionToken.GetToken(thisPerm); if (token == null) { throw new SerializationException(Environment.GetResourceString("Serialization_InsufficientState")); } unionSet.SetItem(token.m_index, thisPerm); } else { Debug.Assert((thisObj == null || otherObj == null), "Permission cannot be in both TokenBasedSets"); } } return(unionSet); }
internal TokenBasedSet SpecialUnion(TokenBasedSet other) { int maxUsedIndex; this.OnDeserializedInternal(); TokenBasedSet set = new TokenBasedSet(); if (other != null) { other.OnDeserializedInternal(); maxUsedIndex = (this.GetMaxUsedIndex() > other.GetMaxUsedIndex()) ? this.GetMaxUsedIndex() : other.GetMaxUsedIndex(); } else { maxUsedIndex = this.GetMaxUsedIndex(); } for (int i = 0; i <= maxUsedIndex; i++) { object item = this.GetItem(i); IPermission perm = item as IPermission; ISecurityElementFactory factory = item as ISecurityElementFactory; object obj3 = (other != null) ? other.GetItem(i) : null; IPermission permission2 = obj3 as IPermission; ISecurityElementFactory factory2 = obj3 as ISecurityElementFactory; if ((item != null) || (obj3 != null)) { if (item == null) { if (factory2 != null) { permission2 = PermissionSet.CreatePerm(factory2, false); } PermissionToken token = PermissionToken.GetToken(permission2); if (token == null) { throw new SerializationException(Environment.GetResourceString("Serialization_InsufficientState")); } set.SetItem(token.m_index, permission2); } else if (obj3 == null) { if (factory != null) { perm = PermissionSet.CreatePerm(factory, false); } PermissionToken token2 = PermissionToken.GetToken(perm); if (token2 == null) { throw new SerializationException(Environment.GetResourceString("Serialization_InsufficientState")); } set.SetItem(token2.m_index, perm); } } } return(set); }
// Used to merge two distinct TokenBasedSets (used currently only in PermissionSet Deserialization) internal TokenBasedSet SpecialUnion(TokenBasedSet other) { // This gets called from PermissionSet.OnDeserialized and it's possible that the TokenBasedSets have // not been subjected to VTS callbacks yet OnDeserializedInternal(); TokenBasedSet unionSet = new TokenBasedSet(); int maxMax; if (other != null) { other.OnDeserializedInternal(); maxMax = this.GetMaxUsedIndex() > other.GetMaxUsedIndex() ? this.GetMaxUsedIndex() : other.GetMaxUsedIndex(); } else maxMax = this.GetMaxUsedIndex(); for (int i = 0; i <= maxMax; ++i) { Object thisObj = this.GetItem( i ); IPermission thisPerm = thisObj as IPermission; #if FEATURE_CAS_POLICY ISecurityElementFactory thisElem = thisObj as ISecurityElementFactory; #endif // FEATURE_CAS_POLICY Object otherObj = (other != null)?other.GetItem( i ):null; IPermission otherPerm = otherObj as IPermission; #if FEATURE_CAS_POLICY ISecurityElementFactory otherElem = otherObj as ISecurityElementFactory; #endif // FEATURE_CAS_POLICY if (thisObj == null && otherObj == null) continue; if (thisObj == null) { #if FEATURE_CAS_POLICY if (otherElem != null) { otherPerm = PermissionSet.CreatePerm(otherElem, false); } #endif // FEATURE_CAS_POLICY PermissionToken token = PermissionToken.GetToken(otherPerm); if (token == null) { throw new SerializationException(Environment.GetResourceString("Serialization_InsufficientState")); } unionSet.SetItem(token.m_index, otherPerm); } else if (otherObj == null) { #if FEATURE_CAS_POLICY if (thisElem != null) { thisPerm = PermissionSet.CreatePerm(thisElem, false); } #endif // FEATURE_CAS_POLICY PermissionToken token = PermissionToken.GetToken(thisPerm); if (token == null) { throw new SerializationException(Environment.GetResourceString("Serialization_InsufficientState")); } unionSet.SetItem( token.m_index, thisPerm); } else { Contract.Assert( (thisObj == null || otherObj == null), "Permission cannot be in both TokenBasedSets" ); } } return unionSet; }
// Used to merge two distinct TokenBasedSets (used currently only in PermissionSet Deserialization) internal TokenBasedSet SpecialUnion(TokenBasedSet other, ref bool canUnrestrictedOverride) { // This gets called from PermissionSet.OnDeserialized and it's possible that the TokenBasedSets have // not been subjected to VTS callbacks yet OnDeserializedInternal(); TokenBasedSet unionSet = new TokenBasedSet(); int maxMax; if (other != null) { other.OnDeserializedInternal(); maxMax = this.GetMaxUsedIndex() > other.GetMaxUsedIndex() ? this.GetMaxUsedIndex() : other.GetMaxUsedIndex(); } else { maxMax = this.GetMaxUsedIndex(); } for (int i = 0; i <= maxMax; ++i) { Object thisObj = this.GetItem(i); IPermission thisPerm = thisObj as IPermission; ISecurityElementFactory thisElem = thisObj as ISecurityElementFactory; Object otherObj = (other != null)?other.GetItem(i):null; IPermission otherPerm = otherObj as IPermission; ISecurityElementFactory otherElem = otherObj as ISecurityElementFactory; if (thisObj == null && otherObj == null) { continue; } if (thisObj == null) { if (otherElem != null) { otherPerm = PermissionSet.CreatePerm(otherElem, false); } PermissionToken token = PermissionToken.GetToken(otherPerm); if (token == null) { throw new SerializationException(Environment.GetResourceString("Serialization_InsufficientState")); } unionSet.SetItem(token.m_index, otherPerm); if (!CodeAccessPermission.CanUnrestrictedOverride(otherPerm)) { canUnrestrictedOverride = false; } } else if (otherObj == null) { if (thisElem != null) { thisPerm = PermissionSet.CreatePerm(thisElem, false); } PermissionToken token = PermissionToken.GetToken(thisPerm); if (token == null) { throw new SerializationException(Environment.GetResourceString("Serialization_InsufficientState")); } unionSet.SetItem(token.m_index, thisPerm); if (!CodeAccessPermission.CanUnrestrictedOverride(thisPerm)) { canUnrestrictedOverride = false; } } else { BCLDebug.Assert((thisObj == null || otherObj == null), "Permission cannot be in both TokenBasedSets"); } } return(unionSet); }
internal TokenBasedSet SpecialUnion(TokenBasedSet other) { int maxUsedIndex; this.OnDeserializedInternal(); TokenBasedSet set = new TokenBasedSet(); if (other != null) { other.OnDeserializedInternal(); maxUsedIndex = (this.GetMaxUsedIndex() > other.GetMaxUsedIndex()) ? this.GetMaxUsedIndex() : other.GetMaxUsedIndex(); } else { maxUsedIndex = this.GetMaxUsedIndex(); } for (int i = 0; i <= maxUsedIndex; i++) { object item = this.GetItem(i); IPermission perm = item as IPermission; ISecurityElementFactory factory = item as ISecurityElementFactory; object obj3 = (other != null) ? other.GetItem(i) : null; IPermission permission2 = obj3 as IPermission; ISecurityElementFactory factory2 = obj3 as ISecurityElementFactory; if ((item != null) || (obj3 != null)) { if (item == null) { if (factory2 != null) { permission2 = PermissionSet.CreatePerm(factory2, false); } PermissionToken token = PermissionToken.GetToken(permission2); if (token == null) { throw new SerializationException(Environment.GetResourceString("Serialization_InsufficientState")); } set.SetItem(token.m_index, permission2); } else if (obj3 == null) { if (factory != null) { perm = PermissionSet.CreatePerm(factory, false); } PermissionToken token2 = PermissionToken.GetToken(perm); if (token2 == null) { throw new SerializationException(Environment.GetResourceString("Serialization_InsufficientState")); } set.SetItem(token2.m_index, perm); } } } return set; }
// Used to merge two distinct TokenBasedSets (used currently only in PermissionSet Deserialization) internal TokenBasedSet SpecialUnion(TokenBasedSet other, ref bool canUnrestrictedOverride) { // This gets called from PermissionSet.OnDeserialized and it's possible that the TokenBasedSets have // not been subjected to VTS callbacks yet OnDeserializedInternal(); TokenBasedSet unionSet = new TokenBasedSet(); int maxMax; if (other != null) { other.OnDeserializedInternal(); maxMax = this.GetMaxUsedIndex() > other.GetMaxUsedIndex() ? this.GetMaxUsedIndex() : other.GetMaxUsedIndex(); } else maxMax = this.GetMaxUsedIndex(); for (int i = 0; i <= maxMax; ++i) { Object thisObj = this.GetItem( i ); IPermission thisPerm = thisObj as IPermission; ISecurityElementFactory thisElem = thisObj as ISecurityElementFactory; Object otherObj = (other != null)?other.GetItem( i ):null; IPermission otherPerm = otherObj as IPermission; ISecurityElementFactory otherElem = otherObj as ISecurityElementFactory; if (thisObj == null && otherObj == null) continue; if (thisObj == null) { if (otherElem != null) { otherPerm = PermissionSet.CreatePerm(otherElem, false); } PermissionToken token = PermissionToken.GetToken(otherPerm); if (token == null) { throw new SerializationException(Environment.GetResourceString("Serialization_InsufficientState")); } unionSet.SetItem(token.m_index, otherPerm); if (!CodeAccessPermission.CanUnrestrictedOverride(otherPerm)) canUnrestrictedOverride = false; } else if (otherObj == null) { if (thisElem != null) { thisPerm = PermissionSet.CreatePerm(thisElem, false); } PermissionToken token = PermissionToken.GetToken(thisPerm); if (token == null) { throw new SerializationException(Environment.GetResourceString("Serialization_InsufficientState")); } unionSet.SetItem( token.m_index, thisPerm); if (!CodeAccessPermission.CanUnrestrictedOverride(thisPerm)) canUnrestrictedOverride = false; } else { BCLDebug.Assert( (thisObj == null || otherObj == null), "Permission cannot be in both TokenBasedSets" ); } } return unionSet; }