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

CRM_Utils_JS - Improve encoding of object keys #29392

Merged
merged 1 commit into from
Feb 15, 2024

Conversation

colemanw
Copy link
Member

@colemanw colemanw commented Feb 14, 2024

Overview

Originally this was to fix https://lab.civicrm.org/dev/core/-/issues/4977 but that turned out to have a different root cause (see #29400). But this still stands as a general improvement to our js encode/decode algorithm.

Before

Object keys and values were being encoded differently, even if they are both strings.

After

Uses same encoding method for both; gives more consistent results.

Technical Details

CRM_Utils_JS would normally put single quotes (or no quotes) around keys in an object, but was falling back to double-quotes if the string had any non-word characters (like a dot). Custom field names include a dot, so this was putting double quotes into the js string which was breaking out of the quoted html attribute.

Why the html attribute was not getting correctly encoded is another question...
Update: the regression was actually caused by 0ae1b99

Fixes https://lab.civicrm.org/dev/core/-/issues/4977

CRM_Utils_JS would normally put single quotes (or no quotes) around keys in an object,
but was falling back to double-quotes if the string had any non-word characters (like a dot).
Custom field names include a dot, so this was putting double quotes into the js string,
which was not breaking out of the quoted html attribute.

Why the html attribute was not getting correctly encoded is another question...
Copy link

civibot bot commented Feb 14, 2024

🤖 Thank you for contributing to CiviCRM! ❤️ We will need to test and review this PR. 👷

Introduction for new contributors...
  • If this is your first PR, an admin will greenlight automated testing with the command ok to test or add to whitelist.
  • A series of tests will automatically run. You can see the results at the bottom of this page (if there are any problems, it will include a link to see what went wrong).
  • A demo site will be built where anyone can try out a version of CiviCRM that includes your changes.
  • If this process needs to be repeated, an admin will issue the command test this please to rerun tests and build a new demo site.
  • Before this PR can be merged, it needs to be reviewed. Please keep in mind that reviewers are volunteers, and their response time can vary from a few hours to a few weeks depending on their availability and their knowledge of this particular part of CiviCRM.
  • A great way to speed up this process is to "trade reviews" with someone - find an open PR that you feel able to review, and leave a comment like "I'm reviewing this now, could you please review mine?" (include a link to yours). You don't have to wait for a response to get started (and you don't have to stop at one!) the more you review, the faster this process goes for everyone 😄
  • To ensure that you are credited properly in the final release notes, please add yourself to contributor-key.yml
  • For more information about contributing, see CONTRIBUTING.md.
Quick links for reviewers...

➡️ Online demo of this PR 🔗

@civibot civibot bot added the master label Feb 14, 2024
@mlutfy
Copy link
Member

mlutfy commented Feb 15, 2024

Nice! I asked Guy to test, since he finds all the bugs.

@mlutfy
Copy link
Member

mlutfy commented Feb 15, 2024

@colemanw Guy confirmed that it fixed two related issues around encoding (fixes custom fields on relationships too). Could this be backported to 5.70 or the RC? It used to work in earlier versions.

@colemanw
Copy link
Member Author

@mlutfy. I just dug a little deeper and discovered that the real cause of the regression was 0ae1b99, which accidentally caused escaped characters like " to get un-escaped.

I still think this PR is a good change for code-quality and consistency, but doesn't need to be backported if we fix the regression at its source. I'll work on a PR for that for 5.70.

@colemanw
Copy link
Member Author

@mlutfy ok here's the fix for the root cause of the regression #29400
(FYI @seamuslee001).

@colemanw colemanw changed the title Afform - Fix encoding of custom field names in values CRM_Utils_JS - Improve encoding of object keys Feb 15, 2024
@mlutfy
Copy link
Member

mlutfy commented Feb 15, 2024

@colemanw excellent thank you. I will merge this since it is against master and has been tested.

@mlutfy mlutfy merged commit 7e2d00f into civicrm:master Feb 15, 2024
3 checks passed
@colemanw colemanw deleted the jsEncode branch February 15, 2024 18:53
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.

2 participants