Skip to content

Commit bd7d15b

Browse files
MiguelCompanymergify[bot]
authored andcommitted
Be less strict with parameter lengths (#5225)
* Refs #21537. Add regression test for interoperability issue. Signed-off-by: Miguel Company <[email protected]> * Refs #21537. Add regression test for big parameters. Signed-off-by: Miguel Company <[email protected]> * Refs #21537. Fix builtin deserialization length checks. Signed-off-by: Miguel Company <[email protected]> * Refs #21537. Special cases in test. Signed-off-by: Miguel Company <[email protected]> * Refs #21537. Extend test to full non-custom range. Signed-off-by: Miguel Company <[email protected]> * Refs #21537. Extend parameter size to 64K. Signed-off-by: Miguel Company <[email protected]> * Refs #21537. Uncrustify. Signed-off-by: Miguel Company <[email protected]> * Refs #21638. Fix windows warning. Signed-off-by: Miguel Company <[email protected]> --------- Signed-off-by: Miguel Company <[email protected]> (cherry picked from commit 7b111f9) # Conflicts: # src/cpp/fastdds/core/policy/ParameterSerializer.hpp # test/unittest/rtps/builtin/BuiltinDataSerializationTests.cpp
1 parent 6f85f6a commit bd7d15b

File tree

3 files changed

+626
-32
lines changed

3 files changed

+626
-32
lines changed

src/cpp/fastdds/core/policy/ParameterSerializer.hpp

+97-16
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ inline bool ParameterSerializer<ParameterLocator_t>::read_content_from_cdr_messa
251251
fastrtps::rtps::CDRMessage_t* cdr_message,
252252
const uint16_t parameter_length)
253253
{
254-
if (parameter_length != PARAMETER_LOCATOR_LENGTH)
254+
if (parameter_length < PARAMETER_LOCATOR_LENGTH)
255255
{
256256
return false;
257257
}
@@ -273,7 +273,7 @@ inline bool ParameterSerializer<ParameterKey_t>::read_content_from_cdr_message(
273273
fastrtps::rtps::CDRMessage_t* cdr_message,
274274
const uint16_t parameter_length)
275275
{
276-
if (parameter_length != PARAMETER_KEY_HASH_LENGTH)
276+
if (parameter_length < PARAMETER_KEY_HASH_LENGTH)
277277
{
278278
return false;
279279
}
@@ -343,7 +343,7 @@ inline bool ParameterSerializer<ParameterPort_t>::read_content_from_cdr_message(
343343
fastrtps::rtps::CDRMessage_t* cdr_message,
344344
const uint16_t parameter_length)
345345
{
346-
if (parameter_length != PARAMETER_PORT_LENGTH)
346+
if (parameter_length < PARAMETER_PORT_LENGTH)
347347
{
348348
return false;
349349
}
@@ -367,7 +367,7 @@ inline bool ParameterSerializer<ParameterGuid_t>::read_content_from_cdr_message(
367367
fastrtps::rtps::CDRMessage_t* cdr_message,
368368
const uint16_t parameter_length)
369369
{
370-
if (parameter_length != PARAMETER_GUID_LENGTH)
370+
if (parameter_length < PARAMETER_GUID_LENGTH)
371371
{
372372
return false;
373373
}
@@ -394,7 +394,7 @@ inline bool ParameterSerializer<ParameterProtocolVersion_t>::read_content_from_c
394394
fastrtps::rtps::CDRMessage_t* cdr_message,
395395
const uint16_t parameter_length)
396396
{
397-
if (parameter_length != PARAMETER_PROTOCOL_LENGTH)
397+
if (parameter_length < PARAMETER_PROTOCOL_LENGTH)
398398
{
399399
return false;
400400
}
@@ -422,7 +422,7 @@ inline bool ParameterSerializer<ParameterVendorId_t>::read_content_from_cdr_mess
422422
fastrtps::rtps::CDRMessage_t* cdr_message,
423423
const uint16_t parameter_length)
424424
{
425-
if (parameter_length != PARAMETER_VENDOR_LENGTH)
425+
if (parameter_length < PARAMETER_VENDOR_LENGTH)
426426
{
427427
return false;
428428
}
@@ -434,6 +434,61 @@ inline bool ParameterSerializer<ParameterVendorId_t>::read_content_from_cdr_mess
434434
}
435435

436436
template<>
437+
<<<<<<< HEAD
438+
=======
439+
inline bool ParameterSerializer<ParameterProductVersion_t>::add_content_to_cdr_message(
440+
const ParameterProductVersion_t& parameter,
441+
rtps::CDRMessage_t* cdr_message)
442+
{
443+
bool valid = rtps::CDRMessage::addOctet(cdr_message, parameter.version.major);
444+
valid &= rtps::CDRMessage::addOctet(cdr_message, parameter.version.minor);
445+
valid &= rtps::CDRMessage::addOctet(cdr_message, parameter.version.patch);
446+
valid &= rtps::CDRMessage::addOctet(cdr_message, parameter.version.tweak);
447+
return valid;
448+
}
449+
450+
template<>
451+
inline bool ParameterSerializer<ParameterProductVersion_t>::read_content_from_cdr_message(
452+
ParameterProductVersion_t& parameter,
453+
rtps::CDRMessage_t* cdr_message,
454+
const uint16_t parameter_length)
455+
{
456+
if (parameter_length < PARAMETER_PRODUCT_VERSION_LENGTH)
457+
{
458+
return false;
459+
}
460+
parameter.length = parameter_length;
461+
bool valid = rtps::CDRMessage::readOctet(cdr_message, &parameter.version.major);
462+
valid &= rtps::CDRMessage::readOctet(cdr_message, &parameter.version.minor);
463+
valid &= rtps::CDRMessage::readOctet(cdr_message, &parameter.version.patch);
464+
valid &= rtps::CDRMessage::readOctet(cdr_message, &parameter.version.tweak);
465+
return valid;
466+
}
467+
468+
template<>
469+
inline bool ParameterSerializer<ParameterDomainId_t>::add_content_to_cdr_message(
470+
const ParameterDomainId_t& parameter,
471+
fastdds::rtps::CDRMessage_t* cdr_message)
472+
{
473+
return fastdds::rtps::CDRMessage::addUInt32(cdr_message, parameter.domain_id);
474+
}
475+
476+
template<>
477+
inline bool ParameterSerializer<ParameterDomainId_t>::read_content_from_cdr_message(
478+
ParameterDomainId_t& parameter,
479+
fastdds::rtps::CDRMessage_t* cdr_message,
480+
const uint16_t parameter_length)
481+
{
482+
if (parameter_length < PARAMETER_DOMAINID_LENGTH)
483+
{
484+
return false;
485+
}
486+
parameter.length = parameter_length;
487+
return fastdds::rtps::CDRMessage::readUInt32(cdr_message, &parameter.domain_id);
488+
}
489+
490+
template<>
491+
>>>>>>> 7b111f911 (Be less strict with parameter lengths (#5225))
437492
inline bool ParameterSerializer<ParameterIP4Address_t>::add_content_to_cdr_message(
438493
const ParameterIP4Address_t& parameter,
439494
fastrtps::rtps::CDRMessage_t* cdr_message)
@@ -447,7 +502,7 @@ inline bool ParameterSerializer<ParameterIP4Address_t>::read_content_from_cdr_me
447502
fastrtps::rtps::CDRMessage_t* cdr_message,
448503
const uint16_t parameter_length)
449504
{
450-
if (parameter_length != PARAMETER_IP4_LENGTH)
505+
if (parameter_length < PARAMETER_IP4_LENGTH)
451506
{
452507
return false;
453508
}
@@ -473,7 +528,7 @@ inline bool ParameterSerializer<ParameterBool_t>::read_content_from_cdr_message(
473528
fastrtps::rtps::CDRMessage_t* cdr_message,
474529
const uint16_t parameter_length)
475530
{
476-
if (parameter_length != PARAMETER_BOOL_LENGTH)
531+
if (parameter_length < PARAMETER_BOOL_LENGTH)
477532
{
478533
return false;
479534
}
@@ -501,7 +556,7 @@ inline bool ParameterSerializer<ParameterStatusInfo_t>::read_content_from_cdr_me
501556
fastrtps::rtps::CDRMessage_t* cdr_message,
502557
const uint16_t parameter_length)
503558
{
504-
if (parameter_length != PARAMETER_STATUS_INFO_LENGTH)
559+
if (parameter_length < PARAMETER_STATUS_INFO_LENGTH)
505560
{
506561
return false;
507562
}
@@ -530,7 +585,7 @@ inline bool ParameterSerializer<ParameterCount_t>::read_content_from_cdr_message
530585
fastrtps::rtps::CDRMessage_t* cdr_message,
531586
const uint16_t parameter_length)
532587
{
533-
if (parameter_length != PARAMETER_COUNT_LENGTH)
588+
if (parameter_length < PARAMETER_COUNT_LENGTH)
534589
{
535590
return false;
536591
}
@@ -552,7 +607,7 @@ inline bool ParameterSerializer<ParameterEntityId_t>::read_content_from_cdr_mess
552607
fastrtps::rtps::CDRMessage_t* cdr_message,
553608
const uint16_t parameter_length)
554609
{
555-
if (parameter_length != PARAMETER_ENTITYID_LENGTH)
610+
if (parameter_length < PARAMETER_ENTITYID_LENGTH)
556611
{
557612
return false;
558613
}
@@ -576,7 +631,7 @@ inline bool ParameterSerializer<ParameterTime_t>::read_content_from_cdr_message(
576631
fastrtps::rtps::CDRMessage_t* cdr_message,
577632
const uint16_t parameter_length)
578633
{
579-
if (parameter_length != PARAMETER_TIME_LENGTH)
634+
if (parameter_length < PARAMETER_TIME_LENGTH)
580635
{
581636
return false;
582637
}
@@ -604,12 +659,38 @@ inline bool ParameterSerializer<ParameterBuiltinEndpointSet_t>::read_content_fro
604659
fastrtps::rtps::CDRMessage_t* cdr_message,
605660
const uint16_t parameter_length)
606661
{
607-
if (parameter_length != PARAMETER_BUILTINENDPOINTSET_LENGTH)
662+
if (parameter_length < PARAMETER_BUILTINENDPOINTSET_LENGTH)
608663
{
609664
return false;
610665
}
611666
parameter.length = parameter_length;
667+
<<<<<<< HEAD
612668
return fastrtps::rtps::CDRMessage::readUInt32(cdr_message, &parameter.endpointSet);
669+
=======
670+
return rtps::CDRMessage::readUInt32(cdr_message, &parameter.endpointSet);
671+
}
672+
673+
template<>
674+
inline bool ParameterSerializer<ParameterNetworkConfigSet_t>::add_content_to_cdr_message(
675+
const ParameterNetworkConfigSet_t& parameter,
676+
rtps::CDRMessage_t* cdr_message)
677+
{
678+
return rtps::CDRMessage::addUInt32(cdr_message, parameter.netconfigSet);
679+
}
680+
681+
template<>
682+
inline bool ParameterSerializer<ParameterNetworkConfigSet_t>::read_content_from_cdr_message(
683+
ParameterNetworkConfigSet_t& parameter,
684+
rtps::CDRMessage_t* cdr_message,
685+
const uint16_t parameter_length)
686+
{
687+
if (parameter_length < PARAMETER_NETWORKCONFIGSET_LENGTH)
688+
{
689+
return false;
690+
}
691+
parameter.length = parameter_length;
692+
return rtps::CDRMessage::readUInt32(cdr_message, &parameter.netconfigSet);
693+
>>>>>>> 7b111f911 (Be less strict with parameter lengths (#5225))
613694
}
614695

615696
template<>
@@ -761,7 +842,7 @@ inline bool ParameterSerializer<ParameterSampleIdentity_t>::read_content_from_cd
761842
fastrtps::rtps::CDRMessage_t* cdr_message,
762843
const uint16_t parameter_length)
763844
{
764-
if (parameter_length != PARAMETER_SAMPLEIDENTITY_LENGTH)
845+
if (parameter_length < PARAMETER_SAMPLEIDENTITY_LENGTH)
765846
{
766847
return false;
767848
}
@@ -1039,7 +1120,7 @@ inline bool ParameterSerializer<ParameterParticipantSecurityInfo_t>::read_conten
10391120
fastrtps::rtps::CDRMessage_t* cdr_message,
10401121
const uint16_t parameter_length)
10411122
{
1042-
if (parameter_length != PARAMETER_PARTICIPANT_SECURITY_INFO_LENGTH)
1123+
if (parameter_length < PARAMETER_PARTICIPANT_SECURITY_INFO_LENGTH)
10431124
{
10441125
return false;
10451126
}
@@ -1065,7 +1146,7 @@ inline bool ParameterSerializer<ParameterEndpointSecurityInfo_t>::read_content_f
10651146
fastrtps::rtps::CDRMessage_t* cdr_message,
10661147
const uint16_t parameter_length)
10671148
{
1068-
if (parameter_length != PARAMETER_ENDPOINT_SECURITY_INFO_LENGTH)
1149+
if (parameter_length < PARAMETER_ENDPOINT_SECURITY_INFO_LENGTH)
10691150
{
10701151
return false;
10711152
}

src/cpp/fastdds/core/policy/QosPoliciesSerializer.hpp

+16-16
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ inline bool QosPoliciesSerializer<DurabilityQosPolicy>::read_content_from_cdr_me
9797
fastrtps::rtps::CDRMessage_t* cdr_message,
9898
const uint16_t parameter_length)
9999
{
100-
if (parameter_length != PARAMETER_KIND_LENGTH)
100+
if (parameter_length < PARAMETER_KIND_LENGTH)
101101
{
102102
return false;
103103
}
@@ -126,7 +126,7 @@ inline bool QosPoliciesSerializer<DeadlineQosPolicy>::read_content_from_cdr_mess
126126
fastrtps::rtps::CDRMessage_t* cdr_message,
127127
const uint16_t parameter_length)
128128
{
129-
if (parameter_length != PARAMETER_TIME_LENGTH)
129+
if (parameter_length < PARAMETER_TIME_LENGTH)
130130
{
131131
return false;
132132
}
@@ -155,7 +155,7 @@ inline bool QosPoliciesSerializer<LatencyBudgetQosPolicy>::read_content_from_cdr
155155
fastrtps::rtps::CDRMessage_t* cdr_message,
156156
const uint16_t parameter_length)
157157
{
158-
if (parameter_length != PARAMETER_TIME_LENGTH)
158+
if (parameter_length < PARAMETER_TIME_LENGTH)
159159
{
160160
return false;
161161
}
@@ -190,7 +190,7 @@ inline bool QosPoliciesSerializer<LivelinessQosPolicy>::read_content_from_cdr_me
190190
fastrtps::rtps::CDRMessage_t* cdr_message,
191191
const uint16_t parameter_length)
192192
{
193-
if (parameter_length != PARAMETER_KIND_LENGTH + PARAMETER_TIME_LENGTH)
193+
if (parameter_length < PARAMETER_KIND_LENGTH + PARAMETER_TIME_LENGTH)
194194
{
195195
return false;
196196
}
@@ -229,7 +229,7 @@ inline bool QosPoliciesSerializer<ReliabilityQosPolicy>::read_content_from_cdr_m
229229
fastrtps::rtps::CDRMessage_t* cdr_message,
230230
const uint16_t parameter_length)
231231
{
232-
if (parameter_length != PARAMETER_KIND_LENGTH + PARAMETER_TIME_LENGTH)
232+
if (parameter_length < PARAMETER_KIND_LENGTH + PARAMETER_TIME_LENGTH)
233233
{
234234
return false;
235235
}
@@ -263,7 +263,7 @@ inline bool QosPoliciesSerializer<OwnershipQosPolicy>::read_content_from_cdr_mes
263263
fastrtps::rtps::CDRMessage_t* cdr_message,
264264
const uint16_t parameter_length)
265265
{
266-
if (parameter_length != PARAMETER_KIND_LENGTH)
266+
if (parameter_length < PARAMETER_KIND_LENGTH)
267267
{
268268
return false;
269269
}
@@ -292,7 +292,7 @@ inline bool QosPoliciesSerializer<DestinationOrderQosPolicy>::read_content_from_
292292
fastrtps::rtps::CDRMessage_t* cdr_message,
293293
const uint16_t parameter_length)
294294
{
295-
if (parameter_length != PARAMETER_KIND_LENGTH)
295+
if (parameter_length < PARAMETER_KIND_LENGTH)
296296
{
297297
return false;
298298
}
@@ -323,7 +323,7 @@ inline bool QosPoliciesSerializer<ResourceLimitsQosPolicy>::read_content_from_cd
323323
fastrtps::rtps::CDRMessage_t* cdr_message,
324324
const uint16_t parameter_length)
325325
{
326-
if (parameter_length != 12)
326+
if (parameter_length < 12)
327327
{
328328
return false;
329329
}
@@ -357,7 +357,7 @@ inline bool QosPoliciesSerializer<TimeBasedFilterQosPolicy>::read_content_from_c
357357
fastrtps::rtps::CDRMessage_t* cdr_message,
358358
const uint16_t parameter_length)
359359
{
360-
if (parameter_length != PARAMETER_TIME_LENGTH)
360+
if (parameter_length < PARAMETER_TIME_LENGTH)
361361
{
362362
return false;
363363
}
@@ -397,7 +397,7 @@ inline bool QosPoliciesSerializer<PresentationQosPolicy>::read_content_from_cdr_
397397
fastrtps::rtps::CDRMessage_t* cdr_message,
398398
const uint16_t parameter_length)
399399
{
400-
if (parameter_length != PARAMETER_PRESENTATION_LENGTH)
400+
if (parameter_length < PARAMETER_PRESENTATION_LENGTH)
401401
{
402402
return false;
403403
}
@@ -516,7 +516,7 @@ inline bool QosPoliciesSerializer<HistoryQosPolicy>::read_content_from_cdr_messa
516516
fastrtps::rtps::CDRMessage_t* cdr_message,
517517
const uint16_t parameter_length)
518518
{
519-
if (parameter_length != PARAMETER_KIND_LENGTH + 4)
519+
if (parameter_length < PARAMETER_KIND_LENGTH + 4)
520520
{
521521
return false;
522522
}
@@ -553,7 +553,7 @@ inline bool QosPoliciesSerializer<DurabilityServiceQosPolicy>::read_content_from
553553
fastrtps::rtps::CDRMessage_t* cdr_message,
554554
const uint16_t parameter_length)
555555
{
556-
if (parameter_length != PARAMETER_TIME_LENGTH + PARAMETER_KIND_LENGTH + 16)
556+
if (parameter_length < PARAMETER_TIME_LENGTH + PARAMETER_KIND_LENGTH + 16)
557557
{
558558
return false;
559559
}
@@ -588,7 +588,7 @@ inline bool QosPoliciesSerializer<LifespanQosPolicy>::read_content_from_cdr_mess
588588
fastrtps::rtps::CDRMessage_t* cdr_message,
589589
const uint16_t parameter_length)
590590
{
591-
if (parameter_length != PARAMETER_TIME_LENGTH)
591+
if (parameter_length < PARAMETER_TIME_LENGTH)
592592
{
593593
return false;
594594
}
@@ -615,7 +615,7 @@ inline bool QosPoliciesSerializer<OwnershipStrengthQosPolicy>::read_content_from
615615
fastrtps::rtps::CDRMessage_t* cdr_message,
616616
const uint16_t parameter_length)
617617
{
618-
if (parameter_length != 4)
618+
if (parameter_length < 4)
619619
{
620620
return false;
621621
}
@@ -638,7 +638,7 @@ inline bool QosPoliciesSerializer<TransportPriorityQosPolicy>::read_content_from
638638
fastrtps::rtps::CDRMessage_t* cdr_message,
639639
const uint16_t parameter_length)
640640
{
641-
if (parameter_length != 4)
641+
if (parameter_length < 4)
642642
{
643643
return false;
644644
}
@@ -800,7 +800,7 @@ inline bool QosPoliciesSerializer<DisablePositiveACKsQosPolicy>::read_content_fr
800800
fastrtps::rtps::CDRMessage_t* cdr_message,
801801
const uint16_t parameter_length)
802802
{
803-
if (parameter_length != PARAMETER_BOOL_LENGTH)
803+
if (parameter_length < PARAMETER_BOOL_LENGTH)
804804
{
805805
return false;
806806
}

0 commit comments

Comments
 (0)