Make WordPress Core


Ignore:
Timestamp:
02/29/2024 10:15:20 AM (3 years ago)
Author:
youknowriad
Message:

Editor: Prevent infinite loops when filtering the font library folder.

Changing the font library is something we expect hosts to perform.
It's important that we make this filter as seemless as possible.
This commit prevents a potential infinite loop caused by calling wp_get_upload_dir() within the font_dir filter.

Props mmaattiiaass, ironprogrammer, costdev, swissspidy.
Fixes #60652.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php

    r57548 r57740  
    857857        protected function handle_font_file_upload( $file ) {
    858858                add_filter( 'upload_mimes', array( 'WP_Font_Utils', 'get_allowed_font_mime_types' ) );
    859                 add_filter( 'upload_dir', 'wp_get_font_dir' );
     859
     860                /*
     861                 * Set the upload directory to the fonts directory.
     862                 *
     863                 * wp_get_font_dir() contains the 'font_dir' hook, whose callbacks are
     864                 * likely to call wp_get_upload_dir().
     865                 *
     866                 * To avoid an infinite loop, don't hook wp_get_font_dir() to 'upload_dir'.
     867                 * Instead, just pass its return value to the 'upload_dir' callback.
     868                 */
     869                $font_dir       = wp_get_font_dir();
     870                $set_upload_dir = function () use ( $font_dir ) {
     871                        return $font_dir;
     872                };
     873                add_filter( 'upload_dir', $set_upload_dir );
    860874
    861875                $overrides = array(
     
    875889                $uploaded_file = wp_handle_upload( $file, $overrides );
    876890
    877                 remove_filter( 'upload_dir', 'wp_get_font_dir' );
     891                remove_filter( 'upload_dir', $set_upload_dir );
    878892                remove_filter( 'upload_mimes', array( 'WP_Font_Utils', 'get_allowed_font_mime_types' ) );
    879893
     
    903917
    904918        /**
    905         * Returns relative path to an uploaded font file.
    906         *
    907         * The path is relative to the current fonts directory.
    908         *
    909         * @since 6.5.0
    910         * @access private
    911         *
    912         * @param string $path Full path to the file.
    913         * @return string Relative path on success, unchanged path on failure.
    914         */
     919         * Returns relative path to an uploaded font file.
     920         *
     921         * The path is relative to the current fonts directory.
     922         *
     923         * @since 6.5.0
     924         * @access private
     925         *
     926         * @param string $path Full path to the file.
     927         * @return string Relative path on success, unchanged path on failure.
     928         */
    915929        protected function relative_fonts_path( $path ) {
    916930                $new_path = $path;
Note: See TracChangeset for help on using the changeset viewer.