diff --git a/sources/OpenMcdf.Extensions/OLEProperties/OLEPropertiesContainer.cs b/sources/OpenMcdf.Extensions/OLEProperties/OLEPropertiesContainer.cs index 351ea905..a0558475 100644 --- a/sources/OpenMcdf.Extensions/OLEProperties/OLEPropertiesContainer.cs +++ b/sources/OpenMcdf.Extensions/OLEProperties/OLEPropertiesContainer.cs @@ -180,11 +180,16 @@ public void AddProperty(OLEProperty property) /// /// The type of property to create. /// The name of the new property. - /// The new property, of null if this container can't contain user defined properties. + /// The new property. + /// If UserDefinedProperties aren't allowed for this container. + /// If a property with the name already exists."/> public OLEProperty AddUserDefinedProperty(VTPropertyType vtPropertyType, string name) { + // @@TBD@@ If this is a DocumentSummaryInfo container, we could forward the add on to that. if (this.ContainerType != ContainerType.UserDefinedProperties) - return null; + { + throw new InvalidOperationException($"UserDefinedProperties are not allowed in containers of type {this.ContainerType}"); + } // As per https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-OLEPS/4177a4bc-5547-49fe-a4d9-4767350fd9cf // the property names have to be unique, and are case insensitive. @@ -192,7 +197,7 @@ public OLEProperty AddUserDefinedProperty(VTPropertyType vtPropertyType, string { throw new ArgumentException($"User defined property names must be unique and {name} already exists", nameof(name)); } - + // Work out a property identifier - must be > 1 and unique as per // https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-oleps/333959a3-a999-4eca-8627-48a224e63e77 uint identifier = 2;