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

Ensure we avoid an infinite recursive call stack through any price format filter #8634

Conversation

gpressutto5
Copy link
Contributor

@gpressutto5 gpressutto5 commented Apr 12, 2024

Changes proposed in this Pull Request

This PR supplements the fix from #8625. Removing only wc_get_price_decimals already fixed the issue, but I also removed get_price_thousand_separator and woocommerce_price_format to be extra sure.

Testing instructions

Regression Test: Ensure Currency Formatting Still Applied Correctly

  • Switch to the fix/infinite-recursive-call-for-price-decimal-separator-filter branch.
  • Ensure the cart page is using the WCBlocks-cart.
  • Enable multi-currency.
  • Change the store's currency to one whose format you are familiar with.
  • Modify the other currency options so that they are non-standard, such as:
    • Change the currency position to Left
    • Change the thousands separator to -
    • Change the decimal separator to *
    • Change the number of decimals to 4
  • Save your settings.
  • Change your presentment currency to match the site's default.
  • Add enough product to your cart to increase the value so that a thousand separator is displayed
  • Ensure that the currency position, thousands separator, number of decimals, and decimal separator all match the settings configured in Step 3.

Test: Ensure We Avoid An Infinite Recursive Call Through wc_get_price_decimal_separator Filter
We were unable to reproduce a second time. So, in order to test this, read through the code to ensure the following stack trace will not be reproducible:

- WCPay\MultiCurrency\FrontendCurrencies->get_price_decimals() /var/www/html/wp-includes/class-wp-hook.php:324
- WCPay\MultiCurrency\FrontendCurrencies->get_currency_code() /var/www/html/wp-content/plugins/woocommerce-payments/includes/multi-currency/FrontendCurrencies.php:176
- WCPay\MultiCurrency\FrontendCurrencies->init_order_currency_from_query_vars() /var/www/html/wp-content/plugins/woocommerce-payments/includes/multi-currency/FrontendCurrencies.php:374
- WCPay\MultiCurrency\FrontendCurrencies->init_order_currency() /var/www/html/wp-content/plugins/woocommerce-payments/includes/multi-currency/FrontendCurrencies.php:298
- wc_get_order() /var/www/html/wp-content/plugins/woocommerce-payments/includes/multi-currency/FrontendCurrencies.php:276
- WC_Order_Factory::get_order() /var/www/html/wp-content/plugins/woocommerce/includes/wc-order-functions.php:86
- Automattic\WooCommerce\Admin\Overrides\Order->__construct() /var/www/html/wp-content/plugins/woocommerce/includes/class-wc-order-factory.php:49
- WC_Data_Store->read() /var/www/html/wp-content/plugins/woocommerce/includes/abstracts/abstract-wc-order.php:130
- WC_Order_Data_Store_CPT->read() /var/www/html/wp-content/plugins/woocommerce/includes/class-wc-data-store.php:159
- WC_Order_Data_Store_CPT->read_order_data() /var/www/html/wp-content/plugins/woocommerce/includes/data-stores/abstract-wc-order-data-store-cpt.php:151
- WC_Order_Data_Store_CPT->read_order_data() /var/www/html/wp-content/plugins/woocommerce/includes/data-stores/class-wc-order-data-store-cpt.php:114
- WC_Order_Data_Store_CPT->set_order_props() /var/www/html/wp-content/plugins/woocommerce/includes/data-stores/abstract-wc-order-data-store-cpt.php:419
- Automattic\WooCommerce\Admin\Overrides\Order->set_props() /var/www/html/wp-content/plugins/woocommerce/includes/data-stores/abstract-wc-order-data-store-cpt.php:172
- Automattic\WooCommerce\Admin\Overrides\Order->set_shipping_tax() /var/www/html/wp-content/plugins/woocommerce/includes/abstracts/abstract-wc-data.php:801
- Automattic\WooCommerce\Admin\Overrides\Order->set_total_tax() /var/www/html/wp-content/plugins/woocommerce/includes/abstracts/abstract-wc-order.php:745
- wc_get_price_decimals() /var/www/html/wp-content/plugins/woocommerce/includes/abstracts/abstract-wc-order.php:767
- apply_filters() /var/www/html/wp-content/plugins/woocommerce/includes/wc-formatting-functions.php:539
- WP_Hook->apply_filters() /var/www/html/wp-includes/plugin.php:205
- WCPay\MultiCurrency\FrontendCurrencies->get_price_decimals() /var/www/html/wp-includes/class-wp-hook.php:324
- WCPay\MultiCurrency\FrontendCurrencies->get_currency_code() /var/www/html/wp-content/plugins/woocommerce-payments/includes/multi-currency/FrontendCurrencies.php:176
- WCPay\MultiCurrency\FrontendCurrencies->init_order_currency_from_query_vars() /var/www/html/wp-content/plugins/woocommerce-payments/includes/multi-currency/FrontendCurrencies.php:374
- WCPay\MultiCurrency\FrontendCurrencies->init_order_currency() /var/www/html/wp-content/plugins/woocommerce-payments/includes/multi-currency/FrontendCurrencies.php:298

  • Run npm run changelog to add a changelog file, choose patch to leave it empty if the change is not significant. You can add multiple changelog files in one PR by running this command a few times.
  • Covered with tests (or have a good reason not to test in description ☝️)
  • Tested on mobile (or does not apply)

Post merge

@gpressutto5 gpressutto5 requested review from lovo-h and reykjalin April 12, 2024 15:56
@botwoo
Copy link
Collaborator

botwoo commented Apr 12, 2024

Test the build

Option 1. Jetpack Beta

  • Install and activate Jetpack Beta.
  • Use this build by searching for PR number 8634 or branch name fix/infinite-recursive-call-for-price-decimal-separator-filter-2 in your-test.site/wp-admin/admin.php?page=jetpack-beta&plugin=woocommerce-payments

Option 2. Jurassic Ninja - available for logged-in A12s

🚀 Launch a JN site with this branch 🚀

ℹ️ Install this Tampermonkey script to get more options.


Build info:

  • Latest commit: aafdf26
  • Build time: 2024-04-12 18:08:10 UTC

Note: the build is updated when a new commit is pushed to this PR.

@gpressutto5 gpressutto5 marked this pull request as ready for review April 12, 2024 16:02
Copy link
Contributor

github-actions bot commented Apr 12, 2024

Size Change: 0 B

Total Size: 1.23 MB

ℹ️ View Unchanged
Filename Size
release/woocommerce-payments/assets/css/admin.css 1.08 kB
release/woocommerce-payments/assets/css/admin.rtl.css 1.08 kB
release/woocommerce-payments/assets/css/success.css 158 B
release/woocommerce-payments/assets/css/success.rtl.css 158 B
release/woocommerce-payments/dist/blocks-checkout-rtl.css 2.02 kB
release/woocommerce-payments/dist/blocks-checkout.css 2.02 kB
release/woocommerce-payments/dist/blocks-checkout.js 56.9 kB
release/woocommerce-payments/dist/cart-block.js 21.5 kB
release/woocommerce-payments/dist/cart.js 4.45 kB
release/woocommerce-payments/dist/checkout-rtl.css 599 B
release/woocommerce-payments/dist/checkout.css 599 B
release/woocommerce-payments/dist/checkout.js 37.8 kB
release/woocommerce-payments/dist/index-rtl.css 40.4 kB
release/woocommerce-payments/dist/index.css 40.4 kB
release/woocommerce-payments/dist/index.js 291 kB
release/woocommerce-payments/dist/multi-currency-analytics.js 1.05 kB
release/woocommerce-payments/dist/multi-currency-rtl.css 3.28 kB
release/woocommerce-payments/dist/multi-currency-switcher-block.js 59.4 kB
release/woocommerce-payments/dist/multi-currency.css 3.29 kB
release/woocommerce-payments/dist/multi-currency.js 54.5 kB
release/woocommerce-payments/dist/order-rtl.css 733 B
release/woocommerce-payments/dist/order.css 735 B
release/woocommerce-payments/dist/order.js 41.7 kB
release/woocommerce-payments/dist/payment-gateways-rtl.css 1.21 kB
release/woocommerce-payments/dist/payment-gateways.css 1.21 kB
release/woocommerce-payments/dist/payment-gateways.js 38.5 kB
release/woocommerce-payments/dist/payment-request-rtl.css 155 B
release/woocommerce-payments/dist/payment-request.css 155 B
release/woocommerce-payments/dist/payment-request.js 12.4 kB
release/woocommerce-payments/dist/product-details-rtl.css 398 B
release/woocommerce-payments/dist/product-details.css 402 B
release/woocommerce-payments/dist/product-details.js 17.2 kB
release/woocommerce-payments/dist/settings-rtl.css 11 kB
release/woocommerce-payments/dist/settings.css 10.8 kB
release/woocommerce-payments/dist/settings.js 201 kB
release/woocommerce-payments/dist/subscription-edit-page.js 669 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal-rtl.css 527 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal.css 527 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal.js 19.4 kB
release/woocommerce-payments/dist/subscription-product-onboarding-toast.js 710 B
release/woocommerce-payments/dist/subscriptions-empty-state-rtl.css 120 B
release/woocommerce-payments/dist/subscriptions-empty-state.css 120 B
release/woocommerce-payments/dist/subscriptions-empty-state.js 18.5 kB
release/woocommerce-payments/dist/tos-rtl.css 235 B
release/woocommerce-payments/dist/tos.css 236 B
release/woocommerce-payments/dist/tos.js 21 kB
release/woocommerce-payments/dist/woopay-direct-checkout.js 4.67 kB
release/woocommerce-payments/dist/woopay-express-button-rtl.css 155 B
release/woocommerce-payments/dist/woopay-express-button.css 155 B
release/woocommerce-payments/dist/woopay-express-button.js 21.1 kB
release/woocommerce-payments/dist/woopay-rtl.css 4.44 kB
release/woocommerce-payments/dist/woopay.css 4.41 kB
release/woocommerce-payments/dist/woopay.js 70.9 kB
release/woocommerce-payments/includes/subscriptions/assets/css/plugin-page.css 622 B
release/woocommerce-payments/includes/subscriptions/assets/js/plugin-page.js 815 B
release/woocommerce-payments/vendor/automattic/jetpack-assets/build/i18n-loader.js 2.44 kB
release/woocommerce-payments/vendor/automattic/jetpack-assets/src/js/i18n-loader.js 1.01 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/tracks-ajax.js 522 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/tracks-callables.js 581 B
release/woocommerce-payments/vendor/automattic/jetpack-identity-crisis/babel.config.js 160 B
release/woocommerce-payments/vendor/automattic/jetpack-identity-crisis/build/index.css 2.37 kB
release/woocommerce-payments/vendor/automattic/jetpack-identity-crisis/build/index.js 13.5 kB
release/woocommerce-payments/vendor/automattic/jetpack-identity-crisis/build/index.rtl.css 2.37 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/about.css 1.03 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/admin-empty-state.css 291 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/admin-order-statuses.css 403 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/admin.css 3.6 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/checkout.css 299 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/modal.css 742 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/view-subscription.css 572 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/wcs-upgrade.css 411 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/admin-pointers.js 544 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/admin.js 9.4 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/jstz.js 6.8 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/jstz.min.js 3.83 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/meta-boxes-coupon.js 544 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/meta-boxes-subscription.js 2.52 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/moment.js 22.1 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/moment.min.js 11.6 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/payment-method-restrictions.js 1.29 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/wcs-meta-boxes-order.js 502 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/payment-methods.js 355 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/single-product.js 429 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/view-subscription.js 1.38 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/wcs-cart.js 781 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/modal.js 1.1 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/wcs-upgrade.js 1.27 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/build/index.css 392 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/build/index.js 3.05 kB

compressed-size-action

@gpressutto5 gpressutto5 enabled auto-merge April 12, 2024 16:37
Copy link
Contributor

@reykjalin reykjalin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Small tweak to the comment, otherwise this looks good and tests well 💯

I'll just go ahead and commit the suggestion and resolve the conversation, and then we can merge!

includes/multi-currency/FrontendCurrencies.php Outdated Show resolved Hide resolved
Copy link
Contributor

@reykjalin reykjalin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking good! 🚀

@gpressutto5 gpressutto5 added this pull request to the merge queue Apr 12, 2024
Merged via the queue into develop with commit 23ad09b Apr 12, 2024
22 checks passed
@gpressutto5 gpressutto5 deleted the fix/infinite-recursive-call-for-price-decimal-separator-filter-2 branch April 12, 2024 18:18
naman03malhotra pushed a commit that referenced this pull request Apr 15, 2024
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.

3 participants