5.2.24. Other

5.2.24.1. [Critical] Possible Connext validation error while using a valid license

Some valid licenses may have failed Connext license validation.

[RTI Issue ID CORE-15738]

5.2.24.2. [Critical] Data races on architectures with weak memory models

On systems with weak memory architectures, such as Arm® and PowerPC®, data races could have led to undefined behavior or crashes in various Connext components.

[RTI Issue ID CORE-15638]

5.2.24.3. [Major] DomainParticipantFactoryQos could not be retrieved from QosProvider

There was no way to retrieve the DomainParticipantFactoryQos from the QosProvider. This functionality has now been added to the language bindings that did not previously support it: Modern C++, C#, and Python.

  • Modern C++:

    QosProvider qos_provider(user_qos_profiles_uri);
    DomainParticipantFactoryQos dpf_qos = qos_provider->participant_factory_qos();
    // or qos_provider.extensions().participant_factory_qos();
    
  • C#:

    QosProvider qosProvider = new QosProvider(userQosProfilesUri);
    DomainParticipantFactoryQos dpfQos = qosProvider.GetDomainParticipantFactoryQos();
    
  • Python:

    qos_provider = dds.QosProvider(user_qos_profiles_uri)
    dpf_qos = qos_provider.participant_factory_qos
    

[RTI Issue ID CORE-6845]

5.2.24.4. [Major] Incorrect hexadecimal formatting for uint8 and octet

Hexadecimal values in generated IDL were printed with an incorrect format (e.g., <5a>). The output has been updated to conform to the OMG Interface Definition Language™ specification, version 4.2, which requires that hexadecimal values start with the “0x” prefix (e.g., 0x5a). This change ensures better compatibility and adherence to standards.

[RTI Issue ID CORE-15797]

5.2.24.5. [Major] Printing to XML missed quotes for external union members

When printing a union with @external members into XML format, the external attribute was missing quotes (e.g., external=true instead of external="true"), resulting in malformed XML that could not be parsed.

[RTI Issue ID CORE-15934]

5.2.24.6. [Major] Printing an IDL or XML enum with a default literal produced incorrect output

When printing an IDL or XML enum that included the @default_literal annotation in one of its enumerators, the output omitted this annotation. As a result, the generated type differed from the original definition.

[RTI Issue ID CORE-15931]

5.2.24.7. [Major] Printing an enum default literal printed the ordinal value instead of enumerator name

When printing in XML or IDL format, default values for enum types were incorrectly represented using the numeric ordinal value (e.g., 1) instead of the enumerator name (e.g., BLUE_1). This resulted in invalid XML and IDL output.

Given this valid IDL:

enum ColorV1 {
    RED_1,
    @default_literal BLUE_1
};
typedef ColorV1 ColorV1Typedef;

struct ColorStructV1 {
    @key ColorV1Typedef color;
};

When printing the previous types, the resulting IDL and XML were:

// Idl
enum ColorV1 {
    @value(0) RED_1,
    @value(1) BLUE_1
};
@default(1) typedef ColorV1 ColorV1Typedef;

struct ColorStructV1 {
    @default(1) @key ColorV1Typedef color;
};

// Xml
<enum name="ColorV1">
    <enumerator name="RED_1" value="0"/>
    <enumerator name="BLUE_1" value="1"/>
</enum>

<typedef default="1" type="nonBasic" nonBasicTypeName="ColorV1" name="ColorV1Typedef"/>

<struct name="ColorStructV1">
    <member name="color" default="1" key="true" type="nonBasic" nonBasicTypeName="ColorV1Typedef"/>
</struct>

This output is invalid, because the XML parser expects the enumerator name (BLUE_1) in the default attribute, not its numeric value.

The output logic has been updated so that when a default value refers to an enum literal, the enumerator name is printed in the XML and IDL representations.

[RTI Issue ID CORE-15930]

5.2.24.8. [Major] XML parser rejected external members with ranges excluding zero

The XML type parser failed to correctly handle external members with a specified min and max range that did not include 0, even though external members are not required to have a default value. This check caused the XML parser to reject otherwise valid type definitions.

Given this XML type definition:

<struct name="MyStruct" extensibility="final">
    <member name="myFloat" external="true" type="float32" min="10" max="11"/>
</struct>

Loading this type using the QosProvider would result in a failure, with the following error:

DDS_XMLTypeCode_getAnnotationParameterValues:Parse error at line 7: annotation values are inconsistent. You must have min <= default <= max. If min or max is specified and min > 0 or max < 0, you must specify the default.

The validation logic has been updated, and now you can load external members with a min and max range that does not include 0.

[RTI Issue ID CORE-15929]

5.2.24.9. [Major] Incorrect string representation of union DynamicType with arrays of sequences

When printing (either in IDL or XML format) a union containing arrays of sequences, the array dimensions were missing from the output. This led to inaccurate or incomplete type representations.

Given the following IDL:

union ArraysOfSequencesUnion switch(long) {
case 0:
    sequence<short,2> myShortSequenceArray[2];
}

The previous (incorrect) string representations were:

// Idl
union ArraysOfSequencesUnion switch(long) {
    case 0:
        sequence<short,2> myShortSequenceArray;
}
// Xml
<union name="ArraysOfSequencesUnion">
    <discriminator type="int32"/>
    <case>
    <caseDiscriminator value="0"/>
        <member name="myShortSequenceArray" type="int16" sequenceMaxLength="2"/>
    </case>
</union>

As shown, the array dimensions ([2]) were omitted from both outputs. The string representations now correctly include the array dimensions:

// Idl
union ArraysOfSequencesUnion switch(long) {
    case 0:
        sequence<short,2> myShortSequenceArray[2];
}
// Xml
<union name="ArraysOfSequencesUnion">
    <discriminator type="int32"/>
    <case>
    <caseDiscriminator value="0"/>
        <member name="myShortSequenceArray" type="int16" sequenceMaxLength="2" arrayDimensions="2"/>
    </case>
</union>

[RTI Issue ID CORE-15928]

5.2.24.10. [Major] Error parsing an XML with an external typedef

If you tried to load the following XML:

<typedef type="nonBasic" nonBasicTypeName="MyStruct" name="MyStructTypedef" external="true"/>

It complained with the following error: RTIXMLParser_validateOnStartTag:Parse error at line 37: Unexpected attribute 'external'. The above XML is now correctly parsed.

[RTI Issue ID CORE-15921]

5.2.24.11. [Major] Invalid escaping of special characters in default strings for XML and IDL output

When converting a DynamicType to a string in XML or IDL format, special characters in default string values (such as “, &, <, and >) were not properly escaped. This led to invalid XML and IDL outputs, breaking compatibility with parsers and tools—particularly during code generation workflows.

Default string values are now properly escaped according to the XML and IDL specifications:

[RTI Issue ID CORE-15886]

5.2.24.12. [Major] DynamicType with default string value incorrectly formatted for XML format

When converting a DynamicType to a string in XML format, if the DynamicType contained a default string, the output was previously default=""default String"". It now correctly renders as default="default String".

[RTI Issue ID CORE-15847]

5.2.24.13. [Minor] Multiple attachments of same Condition to a WaitSet

Attaching the same Condition multiple times to a WaitSet did not report an error and allowed duplicate attachments. This led to inconsistent behavior: although each attachment appeared successful, calling detach_condition would only remove the condition once, leaving the WaitSet in an inconsistent state.

This issue has been resolved by updating attach_condition to perform a no-op and silently return success if the Condition is already attached. This ensures the internal state remains consistent without requiring additional checks in the application code.

[RTI Issue ID CORE-6857]

5.2.24.14. [Major] Error when parsing an XML with a struct that has an enum member with a default enumerator

If you tried to load the type MyStruct from the following xml:

<enum name="MyKind">
      <enumerator name="Kind0"/>
      <enumerator name="Kind1"/>
      <enumerator name="Kind2"/>
</enum>
<struct name= "MyStruct">
      <member name="an_enum_w_default" type="nonBasic"  nonBasicTypeName= "MyKind" default="MyKind::Kind1"/>
</struct>

The XML parser in the Core Libraries complained because it was not able to find the enumerator name. The above XML is now correctly parsed.

[RTI Issue ID CORE-15919]

5.2.24.15. [Major] XML string literal interpretation divergence between Core Libraries and Code Generator

There was a mismatch in how XML string literals were interpreted between the Core Libraries and Code Generator:

  • The Core Libraries interpreted string values literally.

  • Code Generator treated unescaped strings as references, requiring values like “Foo” to be escaped as “Foo” to ensure they were parsed as literal values rather than references.

For example, to achieve the string "Foo", the Core Libraries required default="Foo", and Code Generator required default=""Foo"". This inconsistency led to unexpected or garbled values when using the same XML across different XML parsers.

This divergence has been resolved. Now, both the Core Libraries and Code Generator consistently interpret string constants. You can use default="Foo" in both, and it will correctly resolve to the string literal "Foo".

[RTI Issue ID CORE-14664]

5.2.24.16. [Major] XML parser did not parse scientific notation when exponent included an explicit positive sign

The XML parser didn’t correctly understand the literals expressed in scientific notation when the exponent included an explicit positive sign.

[RTI Issue ID CORE-15933]

5.2.24.17. [Major] Error when parsing an XML with a union that has a member with a default value

If you tried to load the type MyUnion from the following XML:

<union name="MyUnion" extensibility="mutable">
        <discriminator type="int16"/>
        <case>
        <caseDiscriminator value="1"/>
            <member name="member1" default="82" type="int16"/>
        </case>
</union>

It complained with the following error: DDS_XMLTypeCode_getAnnotationParameterValue:Parse error at line 15: default annotation is not supported for optional members. The above XML is now correctly parsed.

[RTI Issue ID CORE-15920]

5.2.24.18. [Minor] Building a Connext application with Wundef warning category could generate unexpected warnings

Building a Connext application with the Wundef category enabled could generate some warnings about undefined preprocessor directives being evaluated. The warning was harmless and had no implications in the final compiled code. The code has been enhanced to prevent the warning.

[RTI Issue ID CORE-15543]