@@ -380,29 +380,55 @@ function createDOMPurify(window = getGlobal()) {
380
380
/* Shield configuration object from prototype pollution */
381
381
cfg = clone ( cfg ) ;
382
382
383
+ PARSER_MEDIA_TYPE =
384
+ // eslint-disable-next-line unicorn/prefer-includes
385
+ SUPPORTED_PARSER_MEDIA_TYPES . indexOf ( cfg . PARSER_MEDIA_TYPE ) === - 1
386
+ ? ( PARSER_MEDIA_TYPE = DEFAULT_PARSER_MEDIA_TYPE )
387
+ : ( PARSER_MEDIA_TYPE = cfg . PARSER_MEDIA_TYPE ) ;
388
+
389
+ // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.
390
+ transformCaseFunc =
391
+ PARSER_MEDIA_TYPE === 'application/xhtml+xml'
392
+ ? ( x ) => x
393
+ : stringToLowerCase ;
394
+
383
395
/* Set configuration parameters */
384
396
ALLOWED_TAGS =
385
397
'ALLOWED_TAGS' in cfg
386
- ? addToSet ( { } , cfg . ALLOWED_TAGS )
398
+ ? addToSet ( { } , cfg . ALLOWED_TAGS , transformCaseFunc )
387
399
: DEFAULT_ALLOWED_TAGS ;
388
400
ALLOWED_ATTR =
389
401
'ALLOWED_ATTR' in cfg
390
- ? addToSet ( { } , cfg . ALLOWED_ATTR )
402
+ ? addToSet ( { } , cfg . ALLOWED_ATTR , transformCaseFunc )
391
403
: DEFAULT_ALLOWED_ATTR ;
392
404
URI_SAFE_ATTRIBUTES =
393
405
'ADD_URI_SAFE_ATTR' in cfg
394
- ? addToSet ( clone ( DEFAULT_URI_SAFE_ATTRIBUTES ) , cfg . ADD_URI_SAFE_ATTR )
406
+ ? addToSet (
407
+ clone ( DEFAULT_URI_SAFE_ATTRIBUTES ) ,
408
+ cfg . ADD_URI_SAFE_ATTR ,
409
+ transformCaseFunc
410
+ )
395
411
: DEFAULT_URI_SAFE_ATTRIBUTES ;
396
412
DATA_URI_TAGS =
397
413
'ADD_DATA_URI_TAGS' in cfg
398
- ? addToSet ( clone ( DEFAULT_DATA_URI_TAGS ) , cfg . ADD_DATA_URI_TAGS )
414
+ ? addToSet (
415
+ clone ( DEFAULT_DATA_URI_TAGS ) ,
416
+ cfg . ADD_DATA_URI_TAGS ,
417
+ transformCaseFunc
418
+ )
399
419
: DEFAULT_DATA_URI_TAGS ;
400
420
FORBID_CONTENTS =
401
421
'FORBID_CONTENTS' in cfg
402
- ? addToSet ( { } , cfg . FORBID_CONTENTS )
422
+ ? addToSet ( { } , cfg . FORBID_CONTENTS , transformCaseFunc )
403
423
: DEFAULT_FORBID_CONTENTS ;
404
- FORBID_TAGS = 'FORBID_TAGS' in cfg ? addToSet ( { } , cfg . FORBID_TAGS ) : { } ;
405
- FORBID_ATTR = 'FORBID_ATTR' in cfg ? addToSet ( { } , cfg . FORBID_ATTR ) : { } ;
424
+ FORBID_TAGS =
425
+ 'FORBID_TAGS' in cfg
426
+ ? addToSet ( { } , cfg . FORBID_TAGS , transformCaseFunc )
427
+ : { } ;
428
+ FORBID_ATTR =
429
+ 'FORBID_ATTR' in cfg
430
+ ? addToSet ( { } , cfg . FORBID_ATTR , transformCaseFunc )
431
+ : { } ;
406
432
USE_PROFILES = 'USE_PROFILES' in cfg ? cfg . USE_PROFILES : false ;
407
433
ALLOW_ARIA_ATTR = cfg . ALLOW_ARIA_ATTR !== false ; // Default true
408
434
ALLOW_DATA_ATTR = cfg . ALLOW_DATA_ATTR !== false ; // Default true
@@ -443,18 +469,6 @@ function createDOMPurify(window = getGlobal()) {
443
469
cfg . CUSTOM_ELEMENT_HANDLING . allowCustomizedBuiltInElements ;
444
470
}
445
471
446
- PARSER_MEDIA_TYPE =
447
- // eslint-disable-next-line unicorn/prefer-includes
448
- SUPPORTED_PARSER_MEDIA_TYPES . indexOf ( cfg . PARSER_MEDIA_TYPE ) === - 1
449
- ? ( PARSER_MEDIA_TYPE = DEFAULT_PARSER_MEDIA_TYPE )
450
- : ( PARSER_MEDIA_TYPE = cfg . PARSER_MEDIA_TYPE ) ;
451
-
452
- // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.
453
- transformCaseFunc =
454
- PARSER_MEDIA_TYPE === 'application/xhtml+xml'
455
- ? ( x ) => x
456
- : stringToLowerCase ;
457
-
458
472
if ( SAFE_FOR_TEMPLATES ) {
459
473
ALLOW_DATA_ATTR = false ;
460
474
}
@@ -497,27 +511,27 @@ function createDOMPurify(window = getGlobal()) {
497
511
ALLOWED_TAGS = clone ( ALLOWED_TAGS ) ;
498
512
}
499
513
500
- addToSet ( ALLOWED_TAGS , cfg . ADD_TAGS ) ;
514
+ addToSet ( ALLOWED_TAGS , cfg . ADD_TAGS , transformCaseFunc ) ;
501
515
}
502
516
503
517
if ( cfg . ADD_ATTR ) {
504
518
if ( ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR ) {
505
519
ALLOWED_ATTR = clone ( ALLOWED_ATTR ) ;
506
520
}
507
521
508
- addToSet ( ALLOWED_ATTR , cfg . ADD_ATTR ) ;
522
+ addToSet ( ALLOWED_ATTR , cfg . ADD_ATTR , transformCaseFunc ) ;
509
523
}
510
524
511
525
if ( cfg . ADD_URI_SAFE_ATTR ) {
512
- addToSet ( URI_SAFE_ATTRIBUTES , cfg . ADD_URI_SAFE_ATTR ) ;
526
+ addToSet ( URI_SAFE_ATTRIBUTES , cfg . ADD_URI_SAFE_ATTR , transformCaseFunc ) ;
513
527
}
514
528
515
529
if ( cfg . FORBID_CONTENTS ) {
516
530
if ( FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS ) {
517
531
FORBID_CONTENTS = clone ( FORBID_CONTENTS ) ;
518
532
}
519
533
520
- addToSet ( FORBID_CONTENTS , cfg . FORBID_CONTENTS ) ;
534
+ addToSet ( FORBID_CONTENTS , cfg . FORBID_CONTENTS , transformCaseFunc ) ;
521
535
}
522
536
523
537
/* Add #text in case KEEP_CONTENT is set to true */
0 commit comments