-
-
Notifications
You must be signed in to change notification settings - Fork 825
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
Conversation
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...
🤖 Thank you for contributing to CiviCRM! ❤️ We will need to test and review this PR. 👷 Introduction for new contributors...
Quick links for reviewers...
|
Nice! I asked Guy to test, since he finds all the bugs. |
@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. |
@mlutfy. I just dug a little deeper and discovered that the real cause of the regression was 0ae1b99, which accidentally caused escaped characters like 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. |
@mlutfy ok here's the fix for the root cause of the regression #29400 |
@colemanw excellent thank you. I will merge this since it is against master and has been tested. |
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