Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug] Implement selective escape for sanitizing titles and descriptions #301

Merged
merged 6 commits into from
Oct 18, 2022

Conversation

sserrata
Copy link
Member

@sserrata sserrata commented Oct 17, 2022

Description

See #299 for background.

This PR implements selective replace for < and > characters in order to preserve support for inline HTML. Previously, lodash escape() was being used to HTML-encode all special characters, which broke inline-HTML.

Motivation and Context

Renders titles and descriptions as intended, including HTML.

How Has This Been Tested?

Tested with Petstore and IOT APIs but more testing will be welcomed to ensure no regression bugs are introduced.

Additional testing with Threat Prevention API.

Note: during IOT testing I found that there were improperly formatted tags, like <b> <b/> which I needed to fix in order to successfully build. Previously, these issues were being masked.

@github-actions
Copy link

github-actions bot commented Oct 17, 2022

Size Change: +201 kB (+5%) 🔍

Total Size: 3.96 MB

Filename Size Change
demo/build/assets/js/common.********.js 386 kB +201 kB (+108%) 🆘
ℹ️ View Unchanged
Filename Size Change
demo/.docusaurus/globalData.json 19.7 kB 0 B
demo/build/assets/css/styles.********.css 94.4 kB 0 B
demo/build/assets/js/006e727e.********.js 14 kB 0 B
demo/build/assets/js/05f64ae1.********.js 2.83 kB 0 B
demo/build/assets/js/06b64fc1.********.js 575 B 0 B
demo/build/assets/js/06e5f0f0.********.js 36.9 kB 0 B
demo/build/assets/js/081bfb0d.********.js 10 kB 0 B
demo/build/assets/js/09e07b87.********.js 3.01 kB 0 B
demo/build/assets/js/0d832478.********.js 26.5 kB 0 B
demo/build/assets/js/12693653.********.js 25.7 kB 0 B
demo/build/assets/js/14eb3368.********.js 9.28 kB 0 B
demo/build/assets/js/1639936b.********.js 4.46 kB 0 B
demo/build/assets/js/16577668.********.js 387 B 0 B
demo/build/assets/js/177e86db.********.js 11.3 kB 0 B
demo/build/assets/js/18c41134.********.js 12.7 kB 0 B
demo/build/assets/js/19d75775.********.js 9.33 kB 0 B
demo/build/assets/js/1a8cc2a6.********.js 12.1 kB 0 B
demo/build/assets/js/1be78505.********.js 10.6 kB 0 B
demo/build/assets/js/1c54f54e.********.js 10.8 kB 0 B
demo/build/assets/js/1e4232ab.********.js 3.16 kB 0 B
demo/build/assets/js/1e6c5cae.********.js 34.8 kB 0 B
demo/build/assets/js/1e6ff21d.********.js 10.9 kB 0 B
demo/build/assets/js/1f818248.********.js 14.8 kB 0 B
demo/build/assets/js/2c860537.********.js 7.91 kB 0 B
demo/build/assets/js/3136173c.********.js 361 B 0 B
demo/build/assets/js/326c3861.********.js 15.7 kB 0 B
demo/build/assets/js/3720c009.********.js 1.44 kB 0 B
demo/build/assets/js/3893.********.js 1.07 kB 0 B
demo/build/assets/js/3946f914.********.js 34.6 kB 0 B
demo/build/assets/js/39d00f16.********.js 16.2 kB 0 B
demo/build/assets/js/3e0d14e9.********.js 24.3 kB 0 B
demo/build/assets/js/40a238b6.********.js 25.7 kB 0 B
demo/build/assets/js/41cd56a1.********.js 10.3 kB 0 B
demo/build/assets/js/423cd203.********.js 13.9 kB 0 B
demo/build/assets/js/4261.********.js 480 B 0 B
demo/build/assets/js/466ac800.********.js 43.9 kB 0 B
demo/build/assets/js/46afcded.********.js 8.21 kB 0 B
demo/build/assets/js/46e5c6ac.********.js 6.86 kB 0 B
demo/build/assets/js/47abaca6.********.js 2.92 kB 0 B
demo/build/assets/js/4935.********.js 1.05 kB 0 B
demo/build/assets/js/4964e910.********.js 25.2 kB 0 B
demo/build/assets/js/49bd3d39.********.js 17.5 kB 0 B
demo/build/assets/js/4b891ed6.********.js 12 kB 0 B
demo/build/assets/js/4b901b1a.********.js 350 B 0 B
demo/build/assets/js/4c5e977b.********.js 41.8 kB 0 B
demo/build/assets/js/533a09ca.********.js 2.49 kB 0 B
demo/build/assets/js/55960ee5.********.js 383 B 0 B
demo/build/assets/js/55a6d13f.********.js 14.4 kB 0 B
demo/build/assets/js/56717cba.********.js 2.98 kB 0 B
demo/build/assets/js/57f1a671.********.js 11.4 kB 0 B
demo/build/assets/js/58ff8b1e.********.js 21.5 kB 0 B
demo/build/assets/js/597ddc40.********.js 10.6 kB 0 B
demo/build/assets/js/5c868d36.********.js 3.25 kB 0 B
demo/build/assets/js/5fb917be.********.js 2.64 kB 0 B
demo/build/assets/js/63fc267d.********.js 11.4 kB 0 B
demo/build/assets/js/66c76a57.********.js 35.5 kB 0 B
demo/build/assets/js/68b61ac5.********.js 44.6 kB 0 B
demo/build/assets/js/69a61f78.********.js 25.5 kB 0 B
demo/build/assets/js/6a105426.********.js 354 B 0 B
demo/build/assets/js/73b594ee.********.js 35.3 kB 0 B
demo/build/assets/js/77264a1a.********.js 34.6 kB 0 B
demo/build/assets/js/7ca3ae45.********.js 17.6 kB 0 B
demo/build/assets/js/7ed7dafe.********.js 26.9 kB 0 B
demo/build/assets/js/8003.********.js 5.45 kB 0 B
demo/build/assets/js/822bd8ab.********.js 2.88 kB 0 B
demo/build/assets/js/85d3c400.********.js 2.91 kB 0 B
demo/build/assets/js/85ec4403.********.js 4.74 kB 0 B
demo/build/assets/js/86b273b1.********.js 10.6 kB 0 B
demo/build/assets/js/86c346b0.********.js 538 B 0 B
demo/build/assets/js/86c45737.********.js 26 kB 0 B
demo/build/assets/js/881db345.********.js 394 B 0 B
demo/build/assets/js/8961c7a6.********.js 25 kB 0 B
demo/build/assets/js/8ab9b16e.********.js 10.5 kB 0 B
demo/build/assets/js/8d4e78cd.********.js 2.85 kB 0 B
demo/build/assets/js/8f441c78.********.js 15.7 kB 0 B
demo/build/assets/js/91696e06.********.js 35.1 kB 0 B
demo/build/assets/js/9290.********.js 1.31 MB +4 B (0%)
demo/build/assets/js/93304a97.********.js 4.59 kB 0 B
demo/build/assets/js/935f2afb.********.js 44.2 kB 0 B
demo/build/assets/js/94589c06.********.js 20.5 kB 0 B
demo/build/assets/js/967247e2.********.js 8.71 kB 0 B
demo/build/assets/js/97810f3c.********.js 25.4 kB 0 B
demo/build/assets/js/9b5caaf3.********.js 26.3 kB 0 B
demo/build/assets/js/9c42c0f3.********.js 34.6 kB 0 B
demo/build/assets/js/a40c6d71.********.js 8.69 kB 0 B
demo/build/assets/js/a476e24e.********.js 344 B 0 B
demo/build/assets/js/a5491aaa.********.js 400 B 0 B
demo/build/assets/js/a6cd895f.********.js 22.1 kB 0 B
demo/build/assets/js/a728d93a.********.js 10.1 kB 0 B
demo/build/assets/js/aa2f1ec7.********.js 25 kB 0 B
demo/build/assets/js/ab09fd5c.********.js 21.6 kB 0 B
demo/build/assets/js/ab6072f2.********.js 25.6 kB 0 B
demo/build/assets/js/ae7f40a3.********.js 44.2 kB 0 B
demo/build/assets/js/b4ebd305.********.js 18 kB 0 B
demo/build/assets/js/b5c059ef.********.js 34.2 kB 0 B
demo/build/assets/js/bead4b8e.********.js 3.06 kB 0 B
demo/build/assets/js/bf271e74.********.js 401 B 0 B
demo/build/assets/js/c5644638.********.js 337 B 0 B
demo/build/assets/js/c65697f5.********.js 26.3 kB 0 B
demo/build/assets/js/c7a5be9f.********.js 10.7 kB 0 B
demo/build/assets/js/c7ded1cb.********.js 2.96 kB 0 B
demo/build/assets/js/cef3f2e2.********.js 5.8 kB 0 B
demo/build/assets/js/cf07762b.********.js 25.6 kB 0 B
demo/build/assets/js/d63c7029.********.js 2.94 kB 0 B
demo/build/assets/js/dd696920.********.js 25.8 kB 0 B
demo/build/assets/js/df203c0f.********.js 1.8 kB 0 B
demo/build/assets/js/dff1c289.********.js 3.9 kB 0 B
demo/build/assets/js/e015ccf9.********.js 26.3 kB 0 B
demo/build/assets/js/e01f8d18.********.js 8.76 kB 0 B
demo/build/assets/js/e2ce9793.********.js 402 B 0 B
demo/build/assets/js/e44a2883.********.js 4.54 kB 0 B
demo/build/assets/js/e5e5340c.********.js 2.55 kB 0 B
demo/build/assets/js/e8b309fb.********.js 577 B 0 B
demo/build/assets/js/eae14b71.********.js 33.9 kB 0 B
demo/build/assets/js/eaf4471e.********.js 12.6 kB 0 B
demo/build/assets/js/ecc39b49.********.js 172 B 0 B
demo/build/assets/js/ee308fa3.********.js 10.2 kB 0 B
demo/build/assets/js/f212caf7.********.js 25.4 kB 0 B
demo/build/assets/js/f4486b6b.********.js 12.1 kB 0 B
demo/build/assets/js/f55d3e7a.********.js 2.71 kB 0 B
demo/build/assets/js/f65290a6.********.js 11.1 kB 0 B
demo/build/assets/js/f8409a7e.********.js 33.8 kB 0 B
demo/build/assets/js/f84e10c2.********.js 19.2 kB 0 B
demo/build/assets/js/fe97f0d1.********.js 20 kB 0 B
demo/build/assets/js/main.********.js 396 kB 0 B
demo/build/assets/js/runtime~main.********.js 9.2 kB 0 B
demo/build/index.html 13 kB 0 B

compressed-size-action

@github-actions
Copy link

github-actions bot commented Oct 17, 2022

Visit the preview URL for this PR (updated for commit 0d822b5):

https://docusaurus-openapi-36b86--pr301-5616eb4s.web.app

(expires Thu, 17 Nov 2022 13:38:54 GMT)

🔥 via Firebase Hosting GitHub Action 🌎

@blindaa121
Copy link
Collaborator

blindaa121 commented Oct 17, 2022

@sserrata Tested with IOT and the expected behavior looks great. Although, I did notice a similar issue for our <ParamsItem /> and <SchemaItem /> components. Dug into this a bit and the good news is that <ReactMarkdown /> accepts a rehypePlugin prop, which I've tested locally with the rehype-raw plugin to extend the desired behavior.

Before:
Screen Shot 2022-10-17 at 2 56 06 PM

After:
Screen Shot 2022-10-17 at 2 54 03 PM

I can push up these changes if they check out 👍

@sserrata
Copy link
Member Author

Nice! Feel free to push the changes.

@sserrata
Copy link
Member Author

Just need to make sure we have enough coverage of HTML and any potential Docusaurus-specific tags.

@blindaa121
Copy link
Collaborator

Just need to make sure we have enough coverage of HTML and any potential Docusaurus-specific tags.

I believe the rehype-raw plugin provides enough HTML coverage, but not entirely sure on potential Docusaurus-specific tags.

@sserrata sserrata added bug Something isn't working and removed DO NOT MERGE labels Oct 18, 2022
@sserrata sserrata merged commit f2f38f7 into main Oct 18, 2022
@sserrata sserrata deleted the selective-escape branch October 18, 2022 15:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants