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

Fix character escaping issues during config generation #199

Merged
merged 1 commit into from
Aug 19, 2020

Conversation

HowardWolosky
Copy link
Member

This is a re-implementation of #198 for the v2 branch.

Many years ago, #24 attempted to properly escape special characters in string by creating its own Get-EscapedJsonValue function, but that only escaped \, \t, \r, \n. That doesn't cover all the possible characters needing to be encoded though.

A user had a < character (which was properly JSON-escaped as \u003c), but that didn't get escaped by this logic, and thus caused an issue when trying to get decoded by ConvertFrom-Json later on.

Back then, Get-EscapedJsonValue must have seemed like a good idea, but looking back at this code with more experience, it's not clear to me why I didn't just use ConvertTo-Json directly. Doing that now.

One additional update that needed to be done however was to replace // with \\ in tag and notesForCertification. This isn't completely correct, but not doing so meant that anything after that would be improperly flagged as a comment by Remove-Comment and then removed. This was found because the same user had a URL in their notesForCertification and the closing JSON was getting stripped out incorrectly as soon as it found the // in https://.....

> This is a re-implementation of microsoft#198 for the v2 branch.

Many years ago, microsoft#24 attempted to properly escape special characters in
a string by creating its own `Get-EscapedJsonValue` function, but that
only escaped `\`, `\t`, `\r`, `\n`.  That doesn't cover all the possible
characters needing to be encoded though.

A user had a `<` character (which was properly JSON-escaped as `\u003c`),
but that didn't get escaped by this logic, and thus caused an issue when
trying to get decoded by `ConvertFrom-Json` later on.

Back then, `Get-EscapedJsonValue` must have seemed like a _good_ idea,
but looking back at this code with more experience, it's not clear to me
why I didn't just use `ConvertTo-Json` directly. Doing that now.

One additional update that needed to be done however was to replace `//`
with `\\`  in `tag` and `notesForCertification`.  This isn't _completely_
correct, but not doing so meant that anything after that would be
improperly flagged as a comment by `Remove-Comment` and then removed.
This was found because the same user had a URL in their
`notesForCertification` and the closing JSON was getting stripped out
incorrectly as soon as it found the `//` in `https://....`.
@HowardWolosky HowardWolosky merged commit 6ebb0bd into microsoft:v2 Aug 19, 2020
@HowardWolosky HowardWolosky deleted the fixConfigGeneration_v2 branch August 19, 2020 21:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants