Fix memory corruption when maximum number of parameters is exceeded (#456)
If the maximum number is exceeded fail with an informative error message. Fixes #419. Signed-off-by: Jacob Perron <jacob@openrobotics.org>
This commit is contained in:
parent
79b3ec1052
commit
ec8539b65c
3 changed files with 546 additions and 0 deletions
|
@ -1129,6 +1129,15 @@ static rcl_ret_t parse_key(
|
|||
}
|
||||
*is_new_map = false;
|
||||
}
|
||||
|
||||
// Guard against adding more than the maximum allowed parameters
|
||||
if (params_st->params[node_idx].num_params >= MAX_NUM_PARAMS_PER_NODE) {
|
||||
RCL_SET_ERROR_MSG_WITH_FORMAT_STRING(
|
||||
"Exceeded maximum allowed number of parameters for a node (%d)",
|
||||
MAX_NUM_PARAMS_PER_NODE);
|
||||
return RCL_RET_ERROR;
|
||||
}
|
||||
|
||||
/// Add a parameter name into the node parameters
|
||||
parameter_idx = params_st->params[node_idx].num_params;
|
||||
parameter_ns = ns_tracker->parameter_ns;
|
||||
|
|
519
rcl_yaml_param_parser/test/max_num_params.yaml
Normal file
519
rcl_yaml_param_parser/test/max_num_params.yaml
Normal file
|
@ -0,0 +1,519 @@
|
|||
# config/test_yaml
|
||||
---
|
||||
|
||||
foo_ns:
|
||||
foo_name:
|
||||
ros__parameters:
|
||||
param1: 1
|
||||
param2: 2
|
||||
param3: 3
|
||||
param4: 4
|
||||
param5: 5
|
||||
param6: 6
|
||||
param7: 7
|
||||
param8: 8
|
||||
param9: 9
|
||||
param10: 10
|
||||
param11: 11
|
||||
param12: 12
|
||||
param13: 13
|
||||
param14: 14
|
||||
param15: 15
|
||||
param16: 16
|
||||
param17: 17
|
||||
param18: 18
|
||||
param19: 19
|
||||
param20: 20
|
||||
param21: 21
|
||||
param22: 22
|
||||
param23: 23
|
||||
param24: 24
|
||||
param25: 25
|
||||
param26: 26
|
||||
param27: 27
|
||||
param28: 28
|
||||
param29: 29
|
||||
param30: 30
|
||||
param31: 31
|
||||
param32: 32
|
||||
param33: 33
|
||||
param34: 34
|
||||
param35: 35
|
||||
param36: 36
|
||||
param37: 37
|
||||
param38: 38
|
||||
param39: 39
|
||||
param40: 40
|
||||
param41: 41
|
||||
param42: 42
|
||||
param43: 43
|
||||
param44: 44
|
||||
param45: 45
|
||||
param46: 46
|
||||
param47: 47
|
||||
param48: 48
|
||||
param49: 49
|
||||
param50: 50
|
||||
param51: 51
|
||||
param52: 52
|
||||
param53: 53
|
||||
param54: 54
|
||||
param55: 55
|
||||
param56: 56
|
||||
param57: 57
|
||||
param58: 58
|
||||
param59: 59
|
||||
param60: 60
|
||||
param61: 61
|
||||
param62: 62
|
||||
param63: 63
|
||||
param64: 64
|
||||
param65: 65
|
||||
param66: 66
|
||||
param67: 67
|
||||
param68: 68
|
||||
param69: 69
|
||||
param70: 70
|
||||
param71: 71
|
||||
param72: 72
|
||||
param73: 73
|
||||
param74: 74
|
||||
param75: 75
|
||||
param76: 76
|
||||
param77: 77
|
||||
param78: 78
|
||||
param79: 79
|
||||
param80: 80
|
||||
param81: 81
|
||||
param82: 82
|
||||
param83: 83
|
||||
param84: 84
|
||||
param85: 85
|
||||
param86: 86
|
||||
param87: 87
|
||||
param88: 88
|
||||
param89: 89
|
||||
param90: 90
|
||||
param91: 91
|
||||
param92: 92
|
||||
param93: 93
|
||||
param94: 94
|
||||
param95: 95
|
||||
param96: 96
|
||||
param97: 97
|
||||
param98: 98
|
||||
param99: 99
|
||||
param100: 100
|
||||
param101: 101
|
||||
param102: 102
|
||||
param103: 103
|
||||
param104: 104
|
||||
param105: 105
|
||||
param106: 106
|
||||
param107: 107
|
||||
param108: 108
|
||||
param109: 109
|
||||
param110: 110
|
||||
param111: 111
|
||||
param112: 112
|
||||
param113: 113
|
||||
param114: 114
|
||||
param115: 115
|
||||
param116: 116
|
||||
param117: 117
|
||||
param118: 118
|
||||
param119: 119
|
||||
param120: 120
|
||||
param121: 121
|
||||
param122: 122
|
||||
param123: 123
|
||||
param124: 124
|
||||
param125: 125
|
||||
param126: 126
|
||||
param127: 127
|
||||
param128: 128
|
||||
param129: 129
|
||||
param130: 130
|
||||
param131: 131
|
||||
param132: 132
|
||||
param133: 133
|
||||
param134: 134
|
||||
param135: 135
|
||||
param136: 136
|
||||
param137: 137
|
||||
param138: 138
|
||||
param139: 139
|
||||
param140: 140
|
||||
param141: 141
|
||||
param142: 142
|
||||
param143: 143
|
||||
param144: 144
|
||||
param145: 145
|
||||
param146: 146
|
||||
param147: 147
|
||||
param148: 148
|
||||
param149: 149
|
||||
param150: 150
|
||||
param151: 151
|
||||
param152: 152
|
||||
param153: 153
|
||||
param154: 154
|
||||
param155: 155
|
||||
param156: 156
|
||||
param157: 157
|
||||
param158: 158
|
||||
param159: 159
|
||||
param160: 160
|
||||
param161: 161
|
||||
param162: 162
|
||||
param163: 163
|
||||
param164: 164
|
||||
param165: 165
|
||||
param166: 166
|
||||
param167: 167
|
||||
param168: 168
|
||||
param169: 169
|
||||
param170: 170
|
||||
param171: 171
|
||||
param172: 172
|
||||
param173: 173
|
||||
param174: 174
|
||||
param175: 175
|
||||
param176: 176
|
||||
param177: 177
|
||||
param178: 178
|
||||
param179: 179
|
||||
param180: 180
|
||||
param181: 181
|
||||
param182: 182
|
||||
param183: 183
|
||||
param184: 184
|
||||
param185: 185
|
||||
param186: 186
|
||||
param187: 187
|
||||
param188: 188
|
||||
param189: 189
|
||||
param190: 190
|
||||
param191: 191
|
||||
param192: 192
|
||||
param193: 193
|
||||
param194: 194
|
||||
param195: 195
|
||||
param196: 196
|
||||
param197: 197
|
||||
param198: 198
|
||||
param199: 199
|
||||
param200: 200
|
||||
param201: 201
|
||||
param202: 202
|
||||
param203: 203
|
||||
param204: 204
|
||||
param205: 205
|
||||
param206: 206
|
||||
param207: 207
|
||||
param208: 208
|
||||
param209: 209
|
||||
param210: 210
|
||||
param211: 211
|
||||
param212: 212
|
||||
param213: 213
|
||||
param214: 214
|
||||
param215: 215
|
||||
param216: 216
|
||||
param217: 217
|
||||
param218: 218
|
||||
param219: 219
|
||||
param220: 220
|
||||
param221: 221
|
||||
param222: 222
|
||||
param223: 223
|
||||
param224: 224
|
||||
param225: 225
|
||||
param226: 226
|
||||
param227: 227
|
||||
param228: 228
|
||||
param229: 229
|
||||
param230: 230
|
||||
param231: 231
|
||||
param232: 232
|
||||
param233: 233
|
||||
param234: 234
|
||||
param235: 235
|
||||
param236: 236
|
||||
param237: 237
|
||||
param238: 238
|
||||
param239: 239
|
||||
param240: 240
|
||||
param241: 241
|
||||
param242: 242
|
||||
param243: 243
|
||||
param244: 244
|
||||
param245: 245
|
||||
param246: 246
|
||||
param247: 247
|
||||
param248: 248
|
||||
param249: 249
|
||||
param250: 250
|
||||
param251: 251
|
||||
param252: 252
|
||||
param253: 253
|
||||
param254: 254
|
||||
param255: 255
|
||||
param256: 256
|
||||
param257: 257
|
||||
param258: 258
|
||||
param259: 259
|
||||
param260: 260
|
||||
param261: 261
|
||||
param262: 262
|
||||
param263: 263
|
||||
param264: 264
|
||||
param265: 265
|
||||
param266: 266
|
||||
param267: 267
|
||||
param268: 268
|
||||
param269: 269
|
||||
param270: 270
|
||||
param271: 271
|
||||
param272: 272
|
||||
param273: 273
|
||||
param274: 274
|
||||
param275: 275
|
||||
param276: 276
|
||||
param277: 277
|
||||
param278: 278
|
||||
param279: 279
|
||||
param280: 280
|
||||
param281: 281
|
||||
param282: 282
|
||||
param283: 283
|
||||
param284: 284
|
||||
param285: 285
|
||||
param286: 286
|
||||
param287: 287
|
||||
param288: 288
|
||||
param289: 289
|
||||
param290: 290
|
||||
param291: 291
|
||||
param292: 292
|
||||
param293: 293
|
||||
param294: 294
|
||||
param295: 295
|
||||
param296: 296
|
||||
param297: 297
|
||||
param298: 298
|
||||
param299: 299
|
||||
param300: 300
|
||||
param301: 301
|
||||
param302: 302
|
||||
param303: 303
|
||||
param304: 304
|
||||
param305: 305
|
||||
param306: 306
|
||||
param307: 307
|
||||
param308: 308
|
||||
param309: 309
|
||||
param310: 310
|
||||
param311: 311
|
||||
param312: 312
|
||||
param313: 313
|
||||
param314: 314
|
||||
param315: 315
|
||||
param316: 316
|
||||
param317: 317
|
||||
param318: 318
|
||||
param319: 319
|
||||
param320: 320
|
||||
param321: 321
|
||||
param322: 322
|
||||
param323: 323
|
||||
param324: 324
|
||||
param325: 325
|
||||
param326: 326
|
||||
param327: 327
|
||||
param328: 328
|
||||
param329: 329
|
||||
param330: 330
|
||||
param331: 331
|
||||
param332: 332
|
||||
param333: 333
|
||||
param334: 334
|
||||
param335: 335
|
||||
param336: 336
|
||||
param337: 337
|
||||
param338: 338
|
||||
param339: 339
|
||||
param340: 340
|
||||
param341: 341
|
||||
param342: 342
|
||||
param343: 343
|
||||
param344: 344
|
||||
param345: 345
|
||||
param346: 346
|
||||
param347: 347
|
||||
param348: 348
|
||||
param349: 349
|
||||
param350: 350
|
||||
param351: 351
|
||||
param352: 352
|
||||
param353: 353
|
||||
param354: 354
|
||||
param355: 355
|
||||
param356: 356
|
||||
param357: 357
|
||||
param358: 358
|
||||
param359: 359
|
||||
param360: 360
|
||||
param361: 361
|
||||
param362: 362
|
||||
param363: 363
|
||||
param364: 364
|
||||
param365: 365
|
||||
param366: 366
|
||||
param367: 367
|
||||
param368: 368
|
||||
param369: 369
|
||||
param370: 370
|
||||
param371: 371
|
||||
param372: 372
|
||||
param373: 373
|
||||
param374: 374
|
||||
param375: 375
|
||||
param376: 376
|
||||
param377: 377
|
||||
param378: 378
|
||||
param379: 379
|
||||
param380: 380
|
||||
param381: 381
|
||||
param382: 382
|
||||
param383: 383
|
||||
param384: 384
|
||||
param385: 385
|
||||
param386: 386
|
||||
param387: 387
|
||||
param388: 388
|
||||
param389: 389
|
||||
param390: 390
|
||||
param391: 391
|
||||
param392: 392
|
||||
param393: 393
|
||||
param394: 394
|
||||
param395: 395
|
||||
param396: 396
|
||||
param397: 397
|
||||
param398: 398
|
||||
param399: 399
|
||||
param400: 400
|
||||
param401: 401
|
||||
param402: 402
|
||||
param403: 403
|
||||
param404: 404
|
||||
param405: 405
|
||||
param406: 406
|
||||
param407: 407
|
||||
param408: 408
|
||||
param409: 409
|
||||
param410: 410
|
||||
param411: 411
|
||||
param412: 412
|
||||
param413: 413
|
||||
param414: 414
|
||||
param415: 415
|
||||
param416: 416
|
||||
param417: 417
|
||||
param418: 418
|
||||
param419: 419
|
||||
param420: 420
|
||||
param421: 421
|
||||
param422: 422
|
||||
param423: 423
|
||||
param424: 424
|
||||
param425: 425
|
||||
param426: 426
|
||||
param427: 427
|
||||
param428: 428
|
||||
param429: 429
|
||||
param430: 430
|
||||
param431: 431
|
||||
param432: 432
|
||||
param433: 433
|
||||
param434: 434
|
||||
param435: 435
|
||||
param436: 436
|
||||
param437: 437
|
||||
param438: 438
|
||||
param439: 439
|
||||
param440: 440
|
||||
param441: 441
|
||||
param442: 442
|
||||
param443: 443
|
||||
param444: 444
|
||||
param445: 445
|
||||
param446: 446
|
||||
param447: 447
|
||||
param448: 448
|
||||
param449: 449
|
||||
param450: 450
|
||||
param451: 451
|
||||
param452: 452
|
||||
param453: 453
|
||||
param454: 454
|
||||
param455: 455
|
||||
param456: 456
|
||||
param457: 457
|
||||
param458: 458
|
||||
param459: 459
|
||||
param460: 460
|
||||
param461: 461
|
||||
param462: 462
|
||||
param463: 463
|
||||
param464: 464
|
||||
param465: 465
|
||||
param466: 466
|
||||
param467: 467
|
||||
param468: 468
|
||||
param469: 469
|
||||
param470: 470
|
||||
param471: 471
|
||||
param472: 472
|
||||
param473: 473
|
||||
param474: 474
|
||||
param475: 475
|
||||
param476: 476
|
||||
param477: 477
|
||||
param478: 478
|
||||
param479: 479
|
||||
param480: 480
|
||||
param481: 481
|
||||
param482: 482
|
||||
param483: 483
|
||||
param484: 484
|
||||
param485: 485
|
||||
param486: 486
|
||||
param487: 487
|
||||
param488: 488
|
||||
param489: 489
|
||||
param490: 490
|
||||
param491: 491
|
||||
param492: 492
|
||||
param493: 493
|
||||
param494: 494
|
||||
param495: 495
|
||||
param496: 496
|
||||
param497: 497
|
||||
param498: 498
|
||||
param499: 499
|
||||
param500: 500
|
||||
param501: 501
|
||||
param502: 502
|
||||
param503: 503
|
||||
param504: 504
|
||||
param505: 505
|
||||
param506: 506
|
||||
param507: 507
|
||||
param508: 508
|
||||
param509: 509
|
||||
param510: 510
|
||||
param511: 511
|
||||
param512: 512
|
||||
param513: 513
|
|
@ -225,6 +225,24 @@ TEST(test_file_parser, indented_ns) {
|
|||
allocator.deallocate(path, allocator.state);
|
||||
}
|
||||
|
||||
// Regression test for https://github.com/ros2/rcl/issues/419
|
||||
TEST(test_file_parser, maximum_number_parameters) {
|
||||
rcutils_reset_error();
|
||||
EXPECT_TRUE(rcutils_get_cwd(cur_dir, 1024));
|
||||
rcutils_allocator_t allocator = rcutils_get_default_allocator();
|
||||
char * test_path = rcutils_join_path(cur_dir, "test", allocator);
|
||||
char * path = rcutils_join_path(test_path, "max_num_params.yaml", allocator);
|
||||
fprintf(stderr, "cur_path: %s\n", path);
|
||||
EXPECT_TRUE(rcutils_exists(path));
|
||||
rcl_params_t * params_hdl = rcl_yaml_node_struct_init(allocator);
|
||||
EXPECT_FALSE(NULL == params_hdl);
|
||||
bool res = rcl_parse_yaml_file(path, params_hdl);
|
||||
fprintf(stderr, "%s\n", rcutils_get_error_string().str);
|
||||
EXPECT_FALSE(res);
|
||||
allocator.deallocate(test_path, allocator.state);
|
||||
allocator.deallocate(path, allocator.state);
|
||||
}
|
||||
|
||||
int32_t main(int32_t argc, char ** argv)
|
||||
{
|
||||
::testing::InitGoogleTest(&argc, argv);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue