loofah 2.19.0 → 2.23.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "set"
3
4
 
4
5
  module Loofah
@@ -47,962 +48,976 @@ module Loofah
47
48
  # </html5_license>
48
49
  module SafeList
49
50
  ACCEPTABLE_ELEMENTS = Set.new([
50
- "a",
51
- "abbr",
52
- "acronym",
53
- "address",
54
- "area",
55
- "article",
56
- "aside",
57
- "audio",
58
- "b",
59
- "bdi",
60
- "bdo",
61
- "big",
62
- "blockquote",
63
- "br",
64
- "button",
65
- "canvas",
66
- "caption",
67
- "center",
68
- "cite",
69
- "code",
70
- "col",
71
- "colgroup",
72
- "command",
73
- "datalist",
74
- "dd",
75
- "del",
76
- "details",
77
- "dfn",
78
- "dir",
79
- "div",
80
- "dl",
81
- "dt",
82
- "em",
83
- "fieldset",
84
- "figcaption",
85
- "figure",
86
- "font",
87
- "footer",
88
- "form",
89
- "h1",
90
- "h2",
91
- "h3",
92
- "h4",
93
- "h5",
94
- "h6",
95
- "header",
96
- "hr",
97
- "i",
98
- "img",
99
- "input",
100
- "ins",
101
- "kbd",
102
- "label",
103
- "legend",
104
- "li",
105
- "main",
106
- "map",
107
- "mark",
108
- "menu",
109
- "meter",
110
- "nav",
111
- "ol",
112
- "optgroup",
113
- "option",
114
- "output",
115
- "p",
116
- "pre",
117
- "q",
118
- "s",
119
- "samp",
120
- "section",
121
- "select",
122
- "small",
123
- "span",
124
- "strike",
125
- "strong",
126
- "sub",
127
- "summary",
128
- "sup",
129
- "table",
130
- "tbody",
131
- "td",
132
- "textarea",
133
- "tfoot",
134
- "th",
135
- "thead",
136
- "time",
137
- "tr",
138
- "tt",
139
- "u",
140
- "ul",
141
- "var",
142
- "video",
143
- "wbr",
144
- ])
51
+ "a",
52
+ "abbr",
53
+ "acronym",
54
+ "address",
55
+ "area",
56
+ "article",
57
+ "aside",
58
+ "audio",
59
+ "b",
60
+ "bdi",
61
+ "bdo",
62
+ "big",
63
+ "blockquote",
64
+ "br",
65
+ "button",
66
+ "canvas",
67
+ "caption",
68
+ "center",
69
+ "cite",
70
+ "code",
71
+ "col",
72
+ "colgroup",
73
+ "command",
74
+ "datalist",
75
+ "dd",
76
+ "del",
77
+ "details",
78
+ "dfn",
79
+ "dir",
80
+ "div",
81
+ "dl",
82
+ "dt",
83
+ "em",
84
+ "fieldset",
85
+ "figcaption",
86
+ "figure",
87
+ "font",
88
+ "footer",
89
+ "form",
90
+ "h1",
91
+ "h2",
92
+ "h3",
93
+ "h4",
94
+ "h5",
95
+ "h6",
96
+ "header",
97
+ "hr",
98
+ "i",
99
+ "img",
100
+ "input",
101
+ "ins",
102
+ "kbd",
103
+ "label",
104
+ "legend",
105
+ "li",
106
+ "main",
107
+ "map",
108
+ "mark",
109
+ "menu",
110
+ "meter",
111
+ "nav",
112
+ "ol",
113
+ "optgroup",
114
+ "option",
115
+ "output",
116
+ "p",
117
+ "pre",
118
+ "q",
119
+ "s",
120
+ "samp",
121
+ "section",
122
+ "select",
123
+ "small",
124
+ "span",
125
+ "strike",
126
+ "strong",
127
+ "sub",
128
+ "summary",
129
+ "sup",
130
+ "table",
131
+ "tbody",
132
+ "td",
133
+ "textarea",
134
+ "tfoot",
135
+ "th",
136
+ "thead",
137
+ "time",
138
+ "tr",
139
+ "tt",
140
+ "u",
141
+ "ul",
142
+ "var",
143
+ "video",
144
+ "wbr",
145
+ ])
145
146
 
146
147
  MATHML_ELEMENTS = Set.new([
147
- "annotation",
148
- "annotation-xml",
149
- "maction",
150
- "math",
151
- "menclose",
152
- "merror",
153
- "mfenced",
154
- "mfrac",
155
- "mi",
156
- "mmultiscripts",
157
- "mn",
158
- "mo",
159
- "mover",
160
- "mpadded",
161
- "mphantom",
162
- "mprescripts",
163
- "mroot",
164
- "mrow",
165
- "ms",
166
- "mspace",
167
- "msqrt",
168
- "mstyle",
169
- "msub",
170
- "msubsup",
171
- "msup",
172
- "mtable",
173
- "mtd",
174
- "mtext",
175
- "mtr",
176
- "munder",
177
- "munderover",
178
- "none",
179
- "semantics",
180
- ])
148
+ "annotation",
149
+ "annotation-xml",
150
+ "maction",
151
+ "math",
152
+ "menclose",
153
+ "merror",
154
+ "mfenced",
155
+ "mfrac",
156
+ "mi",
157
+ "mmultiscripts",
158
+ "mn",
159
+ "mo",
160
+ "mover",
161
+ "mpadded",
162
+ "mphantom",
163
+ "mprescripts",
164
+ "mroot",
165
+ "mrow",
166
+ "ms",
167
+ "mspace",
168
+ "msqrt",
169
+ "mstyle",
170
+ "msub",
171
+ "msubsup",
172
+ "msup",
173
+ "mtable",
174
+ "mtd",
175
+ "mtext",
176
+ "mtr",
177
+ "munder",
178
+ "munderover",
179
+ "none",
180
+ "semantics",
181
+ ])
181
182
 
182
183
  SVG_ELEMENTS = Set.new([
183
- "a",
184
- "animate",
185
- "animateColor",
186
- "animateMotion",
187
- "animateTransform",
188
- "circle",
189
- "clipPath",
190
- "defs",
191
- "desc",
192
- "ellipse",
193
- "feGaussianBlur",
194
- "filter",
195
- "font-face",
196
- "font-face-name",
197
- "font-face-src",
198
- "foreignObject",
199
- "g",
200
- "glyph",
201
- "hkern",
202
- "line",
203
- "linearGradient",
204
- "marker",
205
- "mask",
206
- "metadata",
207
- "missing-glyph",
208
- "mpath",
209
- "path",
210
- "polygon",
211
- "polyline",
212
- "radialGradient",
213
- "rect",
214
- "set",
215
- "stop",
216
- "svg",
217
- "switch",
218
- "symbol",
219
- "text",
220
- "textPath",
221
- "title",
222
- "tspan",
223
- "use",
224
- ])
184
+ "a",
185
+ "altGlyph",
186
+ "animate",
187
+ "animateColor",
188
+ "animateMotion",
189
+ "animateTransform",
190
+ "circle",
191
+ "clipPath",
192
+ "cursor",
193
+ "defs",
194
+ "desc",
195
+ "ellipse",
196
+ "feGaussianBlur",
197
+ "feImage",
198
+ "filter",
199
+ "font-face",
200
+ "font-face-name",
201
+ "font-face-src",
202
+ "foreignObject",
203
+ "g",
204
+ "glyph",
205
+ "hkern",
206
+ "line",
207
+ "linearGradient",
208
+ "marker",
209
+ "mask",
210
+ "metadata",
211
+ "missing-glyph",
212
+ "mpath",
213
+ "path",
214
+ "pattern",
215
+ "polygon",
216
+ "polyline",
217
+ "radialGradient",
218
+ "rect",
219
+ "set",
220
+ "stop",
221
+ "svg",
222
+ "switch",
223
+ "symbol",
224
+ "text",
225
+ "textPath",
226
+ "title",
227
+ "tref",
228
+ "tspan",
229
+ "use",
230
+ ])
225
231
 
226
232
  ACCEPTABLE_ATTRIBUTES = Set.new([
227
- "abbr",
228
- "accept",
229
- "accept-charset",
230
- "accesskey",
231
- "action",
232
- "align",
233
- "alt",
234
- "axis",
235
- "border",
236
- "cellpadding",
237
- "cellspacing",
238
- "char",
239
- "charoff",
240
- "charset",
241
- "checked",
242
- "cite",
243
- "class",
244
- "clear",
245
- "color",
246
- "cols",
247
- "colspan",
248
- "compact",
249
- "contenteditable",
250
- "coords",
251
- "datetime",
252
- "dir",
253
- "disabled",
254
- "enctype",
255
- "for",
256
- "frame",
257
- "headers",
258
- "height",
259
- "href",
260
- "hreflang",
261
- "hspace",
262
- "id",
263
- "ismap",
264
- "label",
265
- "lang",
266
- "longdesc",
267
- "loop",
268
- "loopcount",
269
- "loopend",
270
- "loopstart",
271
- "maxlength",
272
- "media",
273
- "method",
274
- "multiple",
275
- "name",
276
- "nohref",
277
- "noshade",
278
- "nowrap",
279
- "poster",
280
- "preload",
281
- "prompt",
282
- "readonly",
283
- "rel",
284
- "rev",
285
- "rows",
286
- "rowspan",
287
- "rules",
288
- "scope",
289
- "selected",
290
- "shape",
291
- "size",
292
- "span",
293
- "src",
294
- "start",
295
- "style",
296
- "summary",
297
- "tabindex",
298
- "target",
299
- "title",
300
- "type",
301
- "usemap",
302
- "valign",
303
- "value",
304
- "vspace",
305
- "width",
306
- "xml:lang",
307
- ])
233
+ "abbr",
234
+ "accept",
235
+ "accept-charset",
236
+ "accesskey",
237
+ "action",
238
+ "align",
239
+ "alt",
240
+ "axis",
241
+ "border",
242
+ "cellpadding",
243
+ "cellspacing",
244
+ "char",
245
+ "charoff",
246
+ "charset",
247
+ "checked",
248
+ "cite",
249
+ "class",
250
+ "clear",
251
+ "color",
252
+ "cols",
253
+ "colspan",
254
+ "compact",
255
+ "contenteditable",
256
+ "coords",
257
+ "datetime",
258
+ "dir",
259
+ "disabled",
260
+ "enctype",
261
+ "for",
262
+ "frame",
263
+ "headers",
264
+ "height",
265
+ "href",
266
+ "hreflang",
267
+ "hspace",
268
+ "id",
269
+ "ismap",
270
+ "label",
271
+ "lang",
272
+ "longdesc",
273
+ "loop",
274
+ "loopcount",
275
+ "loopend",
276
+ "loopstart",
277
+ "maxlength",
278
+ "media",
279
+ "method",
280
+ "multiple",
281
+ "name",
282
+ "nohref",
283
+ "noshade",
284
+ "nowrap",
285
+ "poster",
286
+ "preload",
287
+ "prompt",
288
+ "readonly",
289
+ "rel",
290
+ "rev",
291
+ "rows",
292
+ "rowspan",
293
+ "rules",
294
+ "scope",
295
+ "selected",
296
+ "shape",
297
+ "size",
298
+ "span",
299
+ "src",
300
+ "start",
301
+ "style",
302
+ "summary",
303
+ "tabindex",
304
+ "target",
305
+ "title",
306
+ "type",
307
+ "usemap",
308
+ "valign",
309
+ "value",
310
+ "vspace",
311
+ "width",
312
+ "xml:lang",
313
+ ])
308
314
 
309
315
  MATHML_ATTRIBUTES = Set.new([
310
- "actiontype",
311
- "align",
312
- "close",
313
- "columnalign",
314
- "columnlines",
315
- "columnspacing",
316
- "columnspan",
317
- "depth",
318
- "dir",
319
- "display",
320
- "displaystyle",
321
- "encoding",
322
- "equalcolumns",
323
- "equalrows",
324
- "fence",
325
- "fontstyle",
326
- "fontweight",
327
- "frame",
328
- "height",
329
- "href",
330
- "linethickness",
331
- "lquote",
332
- "lspace",
333
- "mathbackground",
334
- "mathcolor",
335
- "mathsize",
336
- "mathvariant",
337
- "maxsize",
338
- "minsize",
339
- "notation",
340
- "open",
341
- "other",
342
- "rowalign",
343
- "rowlines",
344
- "rowspacing",
345
- "rowspan",
346
- "rquote",
347
- "rspace",
348
- "scriptlevel",
349
- "selection",
350
- "separator",
351
- "separators",
352
- "stretchy",
353
- "width",
354
- "xlink:href",
355
- "xlink:show",
356
- "xlink:type",
357
- "xmlns",
358
- "xmlns:xlink",
359
- ])
316
+ "actiontype",
317
+ "align",
318
+ "close",
319
+ "columnalign",
320
+ "columnlines",
321
+ "columnspacing",
322
+ "columnspan",
323
+ "depth",
324
+ "dir",
325
+ "display",
326
+ "displaystyle",
327
+ "encoding",
328
+ "equalcolumns",
329
+ "equalrows",
330
+ "fence",
331
+ "fontstyle",
332
+ "fontweight",
333
+ "frame",
334
+ "height",
335
+ "href",
336
+ "linethickness",
337
+ "lquote",
338
+ "lspace",
339
+ "mathbackground",
340
+ "mathcolor",
341
+ "mathsize",
342
+ "mathvariant",
343
+ "maxsize",
344
+ "minsize",
345
+ "notation",
346
+ "open",
347
+ "other",
348
+ "rowalign",
349
+ "rowlines",
350
+ "rowspacing",
351
+ "rowspan",
352
+ "rquote",
353
+ "rspace",
354
+ "scriptlevel",
355
+ "selection",
356
+ "separator",
357
+ "separators",
358
+ "stretchy",
359
+ "width",
360
+ "xlink:href",
361
+ "xlink:show",
362
+ "xlink:type",
363
+ "xmlns",
364
+ "xmlns:xlink",
365
+ ])
360
366
 
361
367
  SVG_ATTRIBUTES = Set.new([
362
- "accent-height",
363
- "accumulate",
364
- "additive",
365
- "alphabetic",
366
- "arabic-form",
367
- "ascent",
368
- "attributeName",
369
- "attributeType",
370
- "baseProfile",
371
- "bbox",
372
- "begin",
373
- "calcMode",
374
- "cap-height",
375
- "class",
376
- "clip-path",
377
- "clip-rule",
378
- "color",
379
- "color-interpolation-filters",
380
- "color-rendering",
381
- "content",
382
- "cx",
383
- "cy",
384
- "d",
385
- "descent",
386
- "display",
387
- "dur",
388
- "dx",
389
- "dy",
390
- "end",
391
- "fill",
392
- "fill-opacity",
393
- "fill-rule",
394
- "filterRes",
395
- "filterUnits",
396
- "font-family",
397
- "font-size",
398
- "font-stretch",
399
- "font-style",
400
- "font-variant",
401
- "font-weight",
402
- "fx",
403
- "fy",
404
- "g1",
405
- "g2",
406
- "glyph-name",
407
- "gradientUnits",
408
- "hanging",
409
- "height",
410
- "horiz-adv-x",
411
- "horiz-origin-x",
412
- "id",
413
- "ideographic",
414
- "k",
415
- "keyPoints",
416
- "keySplines",
417
- "keyTimes",
418
- "lang",
419
- "marker-end",
420
- "marker-mid",
421
- "marker-start",
422
- "markerHeight",
423
- "markerUnits",
424
- "markerWidth",
425
- "maskContentUnits",
426
- "maskUnits",
427
- "mathematical",
428
- "max",
429
- "method",
430
- "min",
431
- "name",
432
- "offset",
433
- "opacity",
434
- "orient",
435
- "origin",
436
- "overline-position",
437
- "overline-thickness",
438
- "panose-1",
439
- "path",
440
- "pathLength",
441
- "patternContentUnits",
442
- "patternTransform",
443
- "patternUnits",
444
- "points",
445
- "preserveAspectRatio",
446
- "primitiveUnits",
447
- "r",
448
- "refX",
449
- "refY",
450
- "repeatCount",
451
- "repeatDur",
452
- "requiredExtensions",
453
- "requiredFeatures",
454
- "restart",
455
- "rotate",
456
- "rx",
457
- "ry",
458
- "slope",
459
- "spacing",
460
- "startOffset",
461
- "stdDeviation",
462
- "stemh",
463
- "stemv",
464
- "stop-color",
465
- "stop-opacity",
466
- "strikethrough-position",
467
- "strikethrough-thickness",
468
- "stroke",
469
- "stroke-dasharray",
470
- "stroke-dashoffset",
471
- "stroke-linecap",
472
- "stroke-linejoin",
473
- "stroke-miterlimit",
474
- "stroke-opacity",
475
- "stroke-width",
476
- "systemLanguage",
477
- "target",
478
- "text-anchor",
479
- "transform",
480
- "type",
481
- "u1",
482
- "u2",
483
- "underline-position",
484
- "underline-thickness",
485
- "unicode",
486
- "unicode-range",
487
- "units-per-em",
488
- "version",
489
- "viewBox",
490
- "visibility",
491
- "width",
492
- "widths",
493
- "x",
494
- "x-height",
495
- "x1",
496
- "x2",
497
- "xlink:actuate",
498
- "xlink:arcrole",
499
- "xlink:href",
500
- "xlink:role",
501
- "xlink:show",
502
- "xlink:title",
503
- "xlink:type",
504
- "xml:base",
505
- "xml:lang",
506
- "xml:space",
507
- "xmlns",
508
- "xmlns:xlink",
509
- "y",
510
- "y1",
511
- "y2",
512
- "zoomAndPan",
513
- ])
368
+ "accent-height",
369
+ "accumulate",
370
+ "additive",
371
+ "alphabetic",
372
+ "arabic-form",
373
+ "ascent",
374
+ "attributeName",
375
+ "attributeType",
376
+ "baseProfile",
377
+ "bbox",
378
+ "begin",
379
+ "calcMode",
380
+ "cap-height",
381
+ "class",
382
+ "clip-path",
383
+ "clip-rule",
384
+ "color",
385
+ "color-interpolation-filters",
386
+ "color-profile",
387
+ "color-rendering",
388
+ "content",
389
+ "cursor",
390
+ "cx",
391
+ "cy",
392
+ "d",
393
+ "descent",
394
+ "display",
395
+ "dur",
396
+ "dx",
397
+ "dy",
398
+ "end",
399
+ "fill",
400
+ "fill-opacity",
401
+ "fill-rule",
402
+ "filter",
403
+ "filterRes",
404
+ "filterUnits",
405
+ "font-family",
406
+ "font-size",
407
+ "font-stretch",
408
+ "font-style",
409
+ "font-variant",
410
+ "font-weight",
411
+ "fx",
412
+ "fy",
413
+ "g1",
414
+ "g2",
415
+ "glyph-name",
416
+ "gradientUnits",
417
+ "hanging",
418
+ "height",
419
+ "horiz-adv-x",
420
+ "horiz-origin-x",
421
+ "id",
422
+ "ideographic",
423
+ "k",
424
+ "keyPoints",
425
+ "keySplines",
426
+ "keyTimes",
427
+ "lang",
428
+ "marker",
429
+ "marker-end",
430
+ "marker-mid",
431
+ "marker-start",
432
+ "markerHeight",
433
+ "markerUnits",
434
+ "markerWidth",
435
+ "mask",
436
+ "maskContentUnits",
437
+ "maskUnits",
438
+ "mathematical",
439
+ "max",
440
+ "method",
441
+ "min",
442
+ "name",
443
+ "offset",
444
+ "opacity",
445
+ "orient",
446
+ "origin",
447
+ "overline-position",
448
+ "overline-thickness",
449
+ "panose-1",
450
+ "path",
451
+ "pathLength",
452
+ "patternContentUnits",
453
+ "patternTransform",
454
+ "patternUnits",
455
+ "points",
456
+ "preserveAspectRatio",
457
+ "primitiveUnits",
458
+ "r",
459
+ "refX",
460
+ "refY",
461
+ "repeatCount",
462
+ "repeatDur",
463
+ "requiredExtensions",
464
+ "requiredFeatures",
465
+ "restart",
466
+ "rotate",
467
+ "rx",
468
+ "ry",
469
+ "slope",
470
+ "spacing",
471
+ "startOffset",
472
+ "stdDeviation",
473
+ "stemh",
474
+ "stemv",
475
+ "stop-color",
476
+ "stop-opacity",
477
+ "strikethrough-position",
478
+ "strikethrough-thickness",
479
+ "stroke",
480
+ "stroke-dasharray",
481
+ "stroke-dashoffset",
482
+ "stroke-linecap",
483
+ "stroke-linejoin",
484
+ "stroke-miterlimit",
485
+ "stroke-opacity",
486
+ "stroke-width",
487
+ "systemLanguage",
488
+ "target",
489
+ "text-anchor",
490
+ "transform",
491
+ "type",
492
+ "u1",
493
+ "u2",
494
+ "underline-position",
495
+ "underline-thickness",
496
+ "unicode",
497
+ "unicode-range",
498
+ "units-per-em",
499
+ "version",
500
+ "viewBox",
501
+ "visibility",
502
+ "width",
503
+ "widths",
504
+ "x",
505
+ "x-height",
506
+ "x1",
507
+ "x2",
508
+ "xlink:actuate",
509
+ "xlink:arcrole",
510
+ "xlink:href",
511
+ "xlink:role",
512
+ "xlink:show",
513
+ "xlink:title",
514
+ "xlink:type",
515
+ "xml:base",
516
+ "xml:lang",
517
+ "xml:space",
518
+ "xmlns",
519
+ "xmlns:xlink",
520
+ "y",
521
+ "y1",
522
+ "y2",
523
+ "zoomAndPan",
524
+ ])
514
525
 
515
526
  ARIA_ATTRIBUTES = Set.new([
516
- "aria-activedescendant",
517
- "aria-atomic",
518
- "aria-autocomplete",
519
- "aria-braillelabel",
520
- "aria-brailleroledescription",
521
- "aria-busy",
522
- "aria-checked",
523
- "aria-colcount",
524
- "aria-colindex",
525
- "aria-colindextext",
526
- "aria-colspan",
527
- "aria-controls",
528
- "aria-current",
529
- "aria-describedby",
530
- "aria-description",
531
- "aria-details",
532
- "aria-disabled",
533
- "aria-dropeffect",
534
- "aria-errormessage",
535
- "aria-expanded",
536
- "aria-flowto",
537
- "aria-grabbed",
538
- "aria-haspopup",
539
- "aria-hidden",
540
- "aria-invalid",
541
- "aria-keyshortcuts",
542
- "aria-label",
543
- "aria-labelledby",
544
- "aria-level",
545
- "aria-live",
546
- "aria-multiline",
547
- "aria-multiselectable",
548
- "aria-orientation",
549
- "aria-owns",
550
- "aria-placeholder",
551
- "aria-posinset",
552
- "aria-pressed",
553
- "aria-readonly",
554
- "aria-relevant",
555
- "aria-required",
556
- "aria-roledescription",
557
- "aria-rowcount",
558
- "aria-rowindex",
559
- "aria-rowindextext",
560
- "aria-rowspan",
561
- "aria-selected",
562
- "aria-setsize",
563
- "aria-sort",
564
- "aria-valuemax",
565
- "aria-valuemin",
566
- "aria-valuenow",
567
- "aria-valuetext",
568
- "role",
569
- ])
527
+ "aria-activedescendant",
528
+ "aria-atomic",
529
+ "aria-autocomplete",
530
+ "aria-braillelabel",
531
+ "aria-brailleroledescription",
532
+ "aria-busy",
533
+ "aria-checked",
534
+ "aria-colcount",
535
+ "aria-colindex",
536
+ "aria-colindextext",
537
+ "aria-colspan",
538
+ "aria-controls",
539
+ "aria-current",
540
+ "aria-describedby",
541
+ "aria-description",
542
+ "aria-details",
543
+ "aria-disabled",
544
+ "aria-dropeffect",
545
+ "aria-errormessage",
546
+ "aria-expanded",
547
+ "aria-flowto",
548
+ "aria-grabbed",
549
+ "aria-haspopup",
550
+ "aria-hidden",
551
+ "aria-invalid",
552
+ "aria-keyshortcuts",
553
+ "aria-label",
554
+ "aria-labelledby",
555
+ "aria-level",
556
+ "aria-live",
557
+ "aria-multiline",
558
+ "aria-multiselectable",
559
+ "aria-orientation",
560
+ "aria-owns",
561
+ "aria-placeholder",
562
+ "aria-posinset",
563
+ "aria-pressed",
564
+ "aria-readonly",
565
+ "aria-relevant",
566
+ "aria-required",
567
+ "aria-roledescription",
568
+ "aria-rowcount",
569
+ "aria-rowindex",
570
+ "aria-rowindextext",
571
+ "aria-rowspan",
572
+ "aria-selected",
573
+ "aria-setsize",
574
+ "aria-sort",
575
+ "aria-valuemax",
576
+ "aria-valuemin",
577
+ "aria-valuenow",
578
+ "aria-valuetext",
579
+ "role",
580
+ ])
570
581
 
571
582
  ATTR_VAL_IS_URI = Set.new([
572
- "action",
573
- "cite",
574
- "href",
575
- "longdesc",
576
- "poster",
577
- "preload",
578
- "src",
579
- "xlink:href",
580
- "xml:base",
581
- ])
583
+ "action",
584
+ "cite",
585
+ "href",
586
+ "longdesc",
587
+ "poster",
588
+ "preload",
589
+ "src",
590
+ "xlink:href",
591
+ "xml:base",
592
+ ])
582
593
 
583
594
  SVG_ATTR_VAL_ALLOWS_REF = Set.new([
584
- "clip-path",
585
- "color-profile",
586
- "cursor",
587
- "fill",
588
- "filter",
589
- "marker",
590
- "marker-end",
591
- "marker-mid",
592
- "marker-start",
593
- "mask",
594
- "stroke",
595
- ])
595
+ "clip-path",
596
+ "color-profile",
597
+ "cursor",
598
+ "fill",
599
+ "filter",
600
+ "marker",
601
+ "marker-end",
602
+ "marker-mid",
603
+ "marker-start",
604
+ "mask",
605
+ "stroke",
606
+ ])
596
607
 
597
608
  SVG_ALLOW_LOCAL_HREF = Set.new([
598
- "altGlyph",
599
- "animate",
600
- "animateColor",
601
- "animateMotion",
602
- "animateTransform",
603
- "cursor",
604
- "feImage",
605
- "filter",
606
- "linearGradient",
607
- "pattern",
608
- "radialGradient",
609
- "set",
610
- "textpath",
611
- "tref",
612
- "use",
613
- ])
609
+ "altGlyph",
610
+ "animate",
611
+ "animateColor",
612
+ "animateMotion",
613
+ "animateTransform",
614
+ "cursor",
615
+ "feImage",
616
+ "filter",
617
+ "linearGradient",
618
+ "pattern",
619
+ "radialGradient",
620
+ "set",
621
+ "textpath",
622
+ "tref",
623
+ "use",
624
+ ])
614
625
 
615
626
  ACCEPTABLE_CSS_PROPERTIES = Set.new([
616
- "azimuth",
617
- "align-content",
618
- "align-items",
619
- "align-self",
620
- "aspect-ratio",
621
- "background-color",
622
- "border-bottom-color",
623
- "border-collapse",
624
- "border-color",
625
- "border-left-color",
626
- "border-right-color",
627
- "border-top-color",
628
- "clear",
629
- "color",
630
- "cursor",
631
- "direction",
632
- "display",
633
- "elevation",
634
- "flex",
635
- "flex-basis",
636
- "flex-direction",
637
- "flex-flow",
638
- "flex-grow",
639
- "flex-shrink",
640
- "flex-wrap",
641
- "float",
642
- "font",
643
- "font-family",
644
- "font-size",
645
- "font-style",
646
- "font-variant",
647
- "font-weight",
648
- "height",
649
- "justify-content",
650
- "letter-spacing",
651
- "line-height",
652
- "list-style",
653
- "list-style-type",
654
- "max-width",
655
- "order",
656
- "overflow",
657
- "overflow-x",
658
- "overflow-y",
659
- "page-break-after",
660
- "page-break-before",
661
- "page-break-inside",
662
- "pause",
663
- "pause-after",
664
- "pause-before",
665
- "pitch",
666
- "pitch-range",
667
- "richness",
668
- "speak",
669
- "speak-header",
670
- "speak-numeral",
671
- "speak-punctuation",
672
- "speech-rate",
673
- "stress",
674
- "text-align",
675
- "text-decoration",
676
- "text-indent",
677
- "unicode-bidi",
678
- "vertical-align",
679
- "voice-family",
680
- "volume",
681
- "white-space",
682
- "width",
683
- ])
627
+ "azimuth",
628
+ "align-content",
629
+ "align-items",
630
+ "align-self",
631
+ "aspect-ratio",
632
+ "background-color",
633
+ "border-bottom-color",
634
+ "border-collapse",
635
+ "border-color",
636
+ "border-left-color",
637
+ "border-right-color",
638
+ "border-top-color",
639
+ "clear",
640
+ "color",
641
+ "cursor",
642
+ "direction",
643
+ "display",
644
+ "elevation",
645
+ "flex",
646
+ "flex-basis",
647
+ "flex-direction",
648
+ "flex-flow",
649
+ "flex-grow",
650
+ "flex-shrink",
651
+ "flex-wrap",
652
+ "float",
653
+ "font",
654
+ "font-family",
655
+ "font-size",
656
+ "font-style",
657
+ "font-variant",
658
+ "font-weight",
659
+ "height",
660
+ "justify-content",
661
+ "letter-spacing",
662
+ "line-height",
663
+ "list-style",
664
+ "list-style-type",
665
+ "max-height",
666
+ "max-width",
667
+ "min-height",
668
+ "min-width",
669
+ "order",
670
+ "overflow",
671
+ "overflow-x",
672
+ "overflow-y",
673
+ "page-break-after",
674
+ "page-break-before",
675
+ "page-break-inside",
676
+ "pause",
677
+ "pause-after",
678
+ "pause-before",
679
+ "pitch",
680
+ "pitch-range",
681
+ "richness",
682
+ "speak",
683
+ "speak-header",
684
+ "speak-numeral",
685
+ "speak-punctuation",
686
+ "speech-rate",
687
+ "stress",
688
+ "text-align",
689
+ "text-decoration",
690
+ "text-indent",
691
+ "unicode-bidi",
692
+ "vertical-align",
693
+ "voice-family",
694
+ "volume",
695
+ "white-space",
696
+ "width",
697
+ ])
684
698
 
685
699
  ACCEPTABLE_CSS_KEYWORDS = Set.new([
686
- "!important",
687
- "auto",
688
- "block",
689
- "bold",
690
- "both",
691
- "bottom",
692
- "center",
693
- "collapse",
694
- "dashed",
695
- "dotted",
696
- "double",
697
- "groove",
698
- "hidden",
699
- "inherit",
700
- "initial",
701
- "inset",
702
- "italic",
703
- "left",
704
- "medium",
705
- "none",
706
- "normal",
707
- "nowrap",
708
- "outset",
709
- "pointer",
710
- "revert",
711
- "ridge",
712
- "right",
713
- "separate",
714
- "solid",
715
- "thick",
716
- "thin",
717
- "top",
718
- "transparent",
719
- "underline",
720
- "unset",
721
- ])
700
+ "!important",
701
+ "auto",
702
+ "block",
703
+ "bold",
704
+ "both",
705
+ "bottom",
706
+ "center",
707
+ "collapse",
708
+ "dashed",
709
+ "dotted",
710
+ "double",
711
+ "groove",
712
+ "hidden",
713
+ "inherit",
714
+ "initial",
715
+ "inset",
716
+ "italic",
717
+ "left",
718
+ "medium",
719
+ "none",
720
+ "normal",
721
+ "nowrap",
722
+ "outset",
723
+ "pointer",
724
+ "revert",
725
+ "ridge",
726
+ "right",
727
+ "separate",
728
+ "solid",
729
+ "thick",
730
+ "thin",
731
+ "top",
732
+ "transparent",
733
+ "underline",
734
+ "unset",
735
+ ])
722
736
 
723
737
  # https://www.w3.org/TR/css-color-3/#html4
724
738
  ACCEPTABLE_CSS_COLORS = Set.new([
725
- "aqua",
726
- "black",
727
- "blue",
728
- "fuchsia",
729
- "gray",
730
- "green",
731
- "lime",
732
- "maroon",
733
- "navy",
734
- "olive",
735
- "purple",
736
- "red",
737
- "silver",
738
- "teal",
739
- "white",
740
- "yellow",
741
- ])
739
+ "aqua",
740
+ "black",
741
+ "blue",
742
+ "fuchsia",
743
+ "gray",
744
+ "green",
745
+ "lime",
746
+ "maroon",
747
+ "navy",
748
+ "olive",
749
+ "purple",
750
+ "red",
751
+ "silver",
752
+ "teal",
753
+ "white",
754
+ "yellow",
755
+ ])
742
756
 
743
757
  # https://www.w3.org/TR/css-color-3/#svg-color
744
758
  ACCEPTABLE_CSS_EXTENDED_COLORS = Set.new([
745
- "aliceblue",
746
- "antiquewhite",
747
- "aqua",
748
- "aquamarine",
749
- "azure",
750
- "beige",
751
- "bisque",
752
- "black",
753
- "blanchedalmond",
754
- "blue",
755
- "blueviolet",
756
- "brown",
757
- "burlywood",
758
- "cadetblue",
759
- "chartreuse",
760
- "chocolate",
761
- "coral",
762
- "cornflowerblue",
763
- "cornsilk",
764
- "crimson",
765
- "cyan",
766
- "darkblue",
767
- "darkcyan",
768
- "darkgoldenrod",
769
- "darkgray",
770
- "darkgreen",
771
- "darkgrey",
772
- "darkkhaki",
773
- "darkmagenta",
774
- "darkolivegreen",
775
- "darkorange",
776
- "darkorchid",
777
- "darkred",
778
- "darksalmon",
779
- "darkseagreen",
780
- "darkslateblue",
781
- "darkslategray",
782
- "darkslategrey",
783
- "darkturquoise",
784
- "darkviolet",
785
- "deeppink",
786
- "deepskyblue",
787
- "dimgray",
788
- "dimgrey",
789
- "dodgerblue",
790
- "firebrick",
791
- "floralwhite",
792
- "forestgreen",
793
- "fuchsia",
794
- "gainsboro",
795
- "ghostwhite",
796
- "gold",
797
- "goldenrod",
798
- "gray",
799
- "green",
800
- "greenyellow",
801
- "grey",
802
- "honeydew",
803
- "hotpink",
804
- "indianred",
805
- "indigo",
806
- "ivory",
807
- "khaki",
808
- "lavender",
809
- "lavenderblush",
810
- "lawngreen",
811
- "lemonchiffon",
812
- "lightblue",
813
- "lightcoral",
814
- "lightcyan",
815
- "lightgoldenrodyellow",
816
- "lightgray",
817
- "lightgreen",
818
- "lightgrey",
819
- "lightpink",
820
- "lightsalmon",
821
- "lightseagreen",
822
- "lightskyblue",
823
- "lightslategray",
824
- "lightslategrey",
825
- "lightsteelblue",
826
- "lightyellow",
827
- "lime",
828
- "limegreen",
829
- "linen",
830
- "magenta",
831
- "maroon",
832
- "mediumaquamarine",
833
- "mediumblue",
834
- "mediumorchid",
835
- "mediumpurple",
836
- "mediumseagreen",
837
- "mediumslateblue",
838
- "mediumspringgreen",
839
- "mediumturquoise",
840
- "mediumvioletred",
841
- "midnightblue",
842
- "mintcream",
843
- "mistyrose",
844
- "moccasin",
845
- "navajowhite",
846
- "navy",
847
- "oldlace",
848
- "olive",
849
- "olivedrab",
850
- "orange",
851
- "orangered",
852
- "orchid",
853
- "palegoldenrod",
854
- "palegreen",
855
- "paleturquoise",
856
- "palevioletred",
857
- "papayawhip",
858
- "peachpuff",
859
- "peru",
860
- "pink",
861
- "plum",
862
- "powderblue",
863
- "purple",
864
- "red",
865
- "rosybrown",
866
- "royalblue",
867
- "saddlebrown",
868
- "salmon",
869
- "sandybrown",
870
- "seagreen",
871
- "seashell",
872
- "sienna",
873
- "silver",
874
- "skyblue",
875
- "slateblue",
876
- "slategray",
877
- "slategrey",
878
- "snow",
879
- "springgreen",
880
- "steelblue",
881
- "tan",
882
- "teal",
883
- "thistle",
884
- "tomato",
885
- "turquoise",
886
- "violet",
887
- "wheat",
888
- "white",
889
- "whitesmoke",
890
- "yellow",
891
- "yellowgreen",
892
- ])
759
+ "aliceblue",
760
+ "antiquewhite",
761
+ "aqua",
762
+ "aquamarine",
763
+ "azure",
764
+ "beige",
765
+ "bisque",
766
+ "black",
767
+ "blanchedalmond",
768
+ "blue",
769
+ "blueviolet",
770
+ "brown",
771
+ "burlywood",
772
+ "cadetblue",
773
+ "chartreuse",
774
+ "chocolate",
775
+ "coral",
776
+ "cornflowerblue",
777
+ "cornsilk",
778
+ "crimson",
779
+ "cyan",
780
+ "darkblue",
781
+ "darkcyan",
782
+ "darkgoldenrod",
783
+ "darkgray",
784
+ "darkgreen",
785
+ "darkgrey",
786
+ "darkkhaki",
787
+ "darkmagenta",
788
+ "darkolivegreen",
789
+ "darkorange",
790
+ "darkorchid",
791
+ "darkred",
792
+ "darksalmon",
793
+ "darkseagreen",
794
+ "darkslateblue",
795
+ "darkslategray",
796
+ "darkslategrey",
797
+ "darkturquoise",
798
+ "darkviolet",
799
+ "deeppink",
800
+ "deepskyblue",
801
+ "dimgray",
802
+ "dimgrey",
803
+ "dodgerblue",
804
+ "firebrick",
805
+ "floralwhite",
806
+ "forestgreen",
807
+ "fuchsia",
808
+ "gainsboro",
809
+ "ghostwhite",
810
+ "gold",
811
+ "goldenrod",
812
+ "gray",
813
+ "green",
814
+ "greenyellow",
815
+ "grey",
816
+ "honeydew",
817
+ "hotpink",
818
+ "indianred",
819
+ "indigo",
820
+ "ivory",
821
+ "khaki",
822
+ "lavender",
823
+ "lavenderblush",
824
+ "lawngreen",
825
+ "lemonchiffon",
826
+ "lightblue",
827
+ "lightcoral",
828
+ "lightcyan",
829
+ "lightgoldenrodyellow",
830
+ "lightgray",
831
+ "lightgreen",
832
+ "lightgrey",
833
+ "lightpink",
834
+ "lightsalmon",
835
+ "lightseagreen",
836
+ "lightskyblue",
837
+ "lightslategray",
838
+ "lightslategrey",
839
+ "lightsteelblue",
840
+ "lightyellow",
841
+ "lime",
842
+ "limegreen",
843
+ "linen",
844
+ "magenta",
845
+ "maroon",
846
+ "mediumaquamarine",
847
+ "mediumblue",
848
+ "mediumorchid",
849
+ "mediumpurple",
850
+ "mediumseagreen",
851
+ "mediumslateblue",
852
+ "mediumspringgreen",
853
+ "mediumturquoise",
854
+ "mediumvioletred",
855
+ "midnightblue",
856
+ "mintcream",
857
+ "mistyrose",
858
+ "moccasin",
859
+ "navajowhite",
860
+ "navy",
861
+ "oldlace",
862
+ "olive",
863
+ "olivedrab",
864
+ "orange",
865
+ "orangered",
866
+ "orchid",
867
+ "palegoldenrod",
868
+ "palegreen",
869
+ "paleturquoise",
870
+ "palevioletred",
871
+ "papayawhip",
872
+ "peachpuff",
873
+ "peru",
874
+ "pink",
875
+ "plum",
876
+ "powderblue",
877
+ "purple",
878
+ "red",
879
+ "rosybrown",
880
+ "royalblue",
881
+ "saddlebrown",
882
+ "salmon",
883
+ "sandybrown",
884
+ "seagreen",
885
+ "seashell",
886
+ "sienna",
887
+ "silver",
888
+ "skyblue",
889
+ "slateblue",
890
+ "slategray",
891
+ "slategrey",
892
+ "snow",
893
+ "springgreen",
894
+ "steelblue",
895
+ "tan",
896
+ "teal",
897
+ "thistle",
898
+ "tomato",
899
+ "turquoise",
900
+ "violet",
901
+ "wheat",
902
+ "white",
903
+ "whitesmoke",
904
+ "yellow",
905
+ "yellowgreen",
906
+ ])
893
907
 
894
908
  # see https://www.quackit.com/css/functions/
895
909
  # omit `url` and `image` from that list
896
910
  ACCEPTABLE_CSS_FUNCTIONS = Set.new([
897
- "attr",
898
- "blur",
899
- "brightness",
900
- "calc",
901
- "circle",
902
- "contrast",
903
- "counter",
904
- "counters",
905
- "cubic-bezier",
906
- "drop-shadow",
907
- "ellipse",
908
- "grayscale",
909
- "hsl",
910
- "hsla",
911
- "hue-rotate",
912
- "hwb",
913
- "inset",
914
- "invert",
915
- "linear-gradient",
916
- "matrix",
917
- "matrix3d",
918
- "opacity",
919
- "perspective",
920
- "polygon",
921
- "radial-gradient",
922
- "repeating-linear-gradient",
923
- "repeating-radial-gradient",
924
- "rgb",
925
- "rgba",
926
- "rotate",
927
- "rotate3d",
928
- "rotateX",
929
- "rotateY",
930
- "rotateZ",
931
- "saturate",
932
- "sepia",
933
- "scale",
934
- "scale3d",
935
- "scaleX",
936
- "scaleY",
937
- "scaleZ",
938
- "skew",
939
- "skewX",
940
- "skewY",
941
- "symbols",
942
- "translate",
943
- "translate3d",
944
- "translateX",
945
- "translateY",
946
- "translateZ",
947
- ])
911
+ "attr",
912
+ "blur",
913
+ "brightness",
914
+ "calc",
915
+ "circle",
916
+ "contrast",
917
+ "counter",
918
+ "counters",
919
+ "cubic-bezier",
920
+ "drop-shadow",
921
+ "ellipse",
922
+ "grayscale",
923
+ "hsl",
924
+ "hsla",
925
+ "hue-rotate",
926
+ "hwb",
927
+ "inset",
928
+ "invert",
929
+ "linear-gradient",
930
+ "matrix",
931
+ "matrix3d",
932
+ "opacity",
933
+ "perspective",
934
+ "polygon",
935
+ "radial-gradient",
936
+ "repeating-linear-gradient",
937
+ "repeating-radial-gradient",
938
+ "rgb",
939
+ "rgba",
940
+ "rotate",
941
+ "rotate3d",
942
+ "rotateX",
943
+ "rotateY",
944
+ "rotateZ",
945
+ "saturate",
946
+ "sepia",
947
+ "scale",
948
+ "scale3d",
949
+ "scaleX",
950
+ "scaleY",
951
+ "scaleZ",
952
+ "skew",
953
+ "skewX",
954
+ "skewY",
955
+ "symbols",
956
+ "translate",
957
+ "translate3d",
958
+ "translateX",
959
+ "translateY",
960
+ "translateZ",
961
+ ])
948
962
 
949
963
  SHORTHAND_CSS_PROPERTIES = Set.new([
950
- "background",
951
- "border",
952
- "margin",
953
- "padding",
954
- ])
964
+ "background",
965
+ "border",
966
+ "margin",
967
+ "padding",
968
+ ])
955
969
 
956
970
  ACCEPTABLE_SVG_PROPERTIES = Set.new([
957
- "fill",
958
- "fill-opacity",
959
- "fill-rule",
960
- "stroke",
961
- "stroke-width",
962
- "stroke-linecap",
963
- "stroke-linejoin",
964
- "stroke-opacity",
965
- ])
971
+ "fill",
972
+ "fill-opacity",
973
+ "fill-rule",
974
+ "stroke",
975
+ "stroke-width",
976
+ "stroke-linecap",
977
+ "stroke-linejoin",
978
+ "stroke-opacity",
979
+ ])
966
980
 
967
981
  PROTOCOL_SEPARATOR = /:|(&#0*58)|(&#x70)|(&#x0*3a)|(%|&#37;)3A/i
968
982
 
969
983
  ACCEPTABLE_PROTOCOLS = Set.new([
970
- "afs",
971
- "aim",
972
- "callto",
973
- "data",
974
- "ed2k",
975
- "feed",
976
- "ftp",
977
- "gopher",
978
- "http",
979
- "https",
980
- "irc",
981
- "line",
982
- "mailto",
983
- "news",
984
- "nntp",
985
- "rsync",
986
- "rtsp",
987
- "sftp",
988
- "sms",
989
- "ssh",
990
- "tag",
991
- "tel",
992
- "telnet",
993
- "urn",
994
- "webcal",
995
- "xmpp",
996
- ])
984
+ "afs",
985
+ "aim",
986
+ "callto",
987
+ "data",
988
+ "ed2k",
989
+ "fax",
990
+ "feed",
991
+ "ftp",
992
+ "gopher",
993
+ "http",
994
+ "https",
995
+ "irc",
996
+ "line",
997
+ "mailto",
998
+ "modem",
999
+ "news",
1000
+ "nntp",
1001
+ "rsync",
1002
+ "rtsp",
1003
+ "sftp",
1004
+ "sms",
1005
+ "ssh",
1006
+ "tag",
1007
+ "tel",
1008
+ "telnet",
1009
+ "urn",
1010
+ "webcal",
1011
+ "xmpp",
1012
+ ])
997
1013
 
998
1014
  ACCEPTABLE_URI_DATA_MEDIATYPES = Set.new([
999
- "image/gif",
1000
- "image/jpeg",
1001
- "image/png",
1002
- "image/svg+xml",
1003
- "text/css",
1004
- "text/plain",
1005
- ])
1015
+ "image/gif",
1016
+ "image/jpeg",
1017
+ "image/png",
1018
+ "text/css",
1019
+ "text/plain",
1020
+ ])
1006
1021
 
1007
1022
  # subclasses may define their own versions of these constants
1008
1023
  ALLOWED_ELEMENTS = ACCEPTABLE_ELEMENTS + MATHML_ELEMENTS + SVG_ELEMENTS
@@ -1017,19 +1032,19 @@ module Loofah
1017
1032
  # TODO: remove VOID_ELEMENTS in a future major release
1018
1033
  # and put it in the tests (it is used only for testing, not for functional behavior)
1019
1034
  VOID_ELEMENTS = Set.new([
1020
- "area",
1021
- "br",
1022
- "hr",
1023
- "img",
1024
- "input",
1025
- ])
1035
+ "area",
1036
+ "br",
1037
+ "hr",
1038
+ "img",
1039
+ "input",
1040
+ ])
1026
1041
 
1027
1042
  # additional tags we should consider safe since we have libxml2 fixing up our documents.
1028
1043
  TAGS_SAFE_WITH_LIBXML2 = Set.new([
1029
- "body",
1030
- "head",
1031
- "html",
1032
- ])
1044
+ "body",
1045
+ "head",
1046
+ "html",
1047
+ ])
1033
1048
  ALLOWED_ELEMENTS_WITH_LIBXML2 = ALLOWED_ELEMENTS + TAGS_SAFE_WITH_LIBXML2
1034
1049
  end
1035
1050
 
@@ -1038,6 +1053,6 @@ module Loofah
1038
1053
  deprecate_constant :WhiteList
1039
1054
  end
1040
1055
 
1041
- ::Loofah::MetaHelpers.add_downcased_set_members_to_all_set_constants ::Loofah::HTML5::SafeList
1056
+ ::Loofah::MetaHelpers.add_downcased_set_members_to_all_set_constants(::Loofah::HTML5::SafeList)
1042
1057
  end
1043
1058
  end