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 #198

Merged
merged 2 commits into from
Aug 19, 2020

Conversation

HowardWolosky
Copy link
Member

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://.....

Fixes #197

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.
@HowardWolosky
Copy link
Member Author

/cc: @LanceMcCarthy

HowardWolosky added a commit to HowardWolosky/StoreBroker that referenced this pull request Aug 14, 2020
> 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 added a commit to HowardWolosky/StoreBroker that referenced this pull request Aug 14, 2020
> 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 added a commit to HowardWolosky/StoreBroker that referenced this pull request Aug 14, 2020
> 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 added a commit to HowardWolosky/StoreBroker that referenced this pull request Aug 14, 2020
> 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 f18939e into microsoft:master Aug 19, 2020
@HowardWolosky HowardWolosky deleted the fixConfigGeneration branch August 19, 2020 21:25
HowardWolosky added a commit that referenced this pull request Aug 19, 2020
> 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://....`.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[PackageTool.ps1] Conversion from JSON failed with error: Unterminated string.
2 participants