-
Notifications
You must be signed in to change notification settings - Fork 39
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
Properly escape special characters when generating config files #24
Conversation
Hi @HowardWolosky, I'm your friendly neighborhood Microsoft Pull Request Bot (You can call me MSBOT). Thanks for your contribution!
TTYL, MSBOT; |
531e0e3
to
cda9522
Compare
[AllowEmptyString()] | ||
[string] $Value | ||
) | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Would be nice to have a comment acknowledging the confusion for future readers.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done
StoreBroker/Helpers.ps1
Outdated
Escapes special characters within a string for use within a JSON value. | ||
|
||
.SYNOPSIS | ||
Escapes special characters within a string for use within a JSON value. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
.Description
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good catch. That was from a copy/paste error with Get-SHA512Hash
, so I've fixed it there too.
StoreBroker/Helpers.ps1
Outdated
|
||
.NOTES | ||
Normalizes newlines and carraige returns to always be \r\n. | ||
#> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
typo: carraige
ea47c64
to
c281045
Compare
We were escaping linefeeds when generating config files, but we were not escaping back slashes, quote characters or tabs. Creates a helper function for doing the escaping, and then normalizes our usage of that helper function wherever we need it.
c281045
to
1b010f5
Compare
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. At the time, this clearly 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.
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. At the time, this clearly 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 "escape" in `tag` and `notesForCertification` with '//' with '\\'. 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.
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. At the time, this clearly 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 "escape" in `tag` and `notesForCertification` with '//' with '\\'. 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 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://....`.
> 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://....`.
> 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://....`.
> 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://....`.
* Fix character escaping issues during config generation Many years ago, #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. At the time, this clearly 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 "escape" in `tag` and `notesForCertification` with '//' with '\\'. 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 is a re-implementation of #198 for the v2 branch. Many years ago, #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://....`.
We were escaping linefeeds when generating config files, but we
were not escaping back slashes, quote characters or tabs.