Below is a differential between the unpatched vulnerable code and the patched update, for reference.
--- a/custom-twitter-feeds/custom-twitter-feed.php
+++ b/custom-twitter-feeds/custom-twitter-feed.php
@@ -5,7 +5,7 @@
Plugin Name: Custom Twitter Feeds
Plugin URI: https://smashballoon.com/custom-twitter-feeds
Description: Customizable X Feeds, formerly known as Twitter feeds, for your website
-Version: 2.5.4
+Version: 2.5.5
Author: Smash Balloon
Author URI: https://smashballoon.com/
Text Domain: custom-twitter-feeds
@@ -31,7 +31,7 @@
define( 'CTF_DOING_SMASH_TWITTER', empty($ctf_options['consumer_key']) && empty($ctf_options['consumer_secret']));
define( 'CTF_URL', plugin_dir_path( __FILE__ ) );
- define( 'CTF_VERSION', '2.5.4' );
+ define( 'CTF_VERSION', '2.5.5' );
define( 'CTF_TITLE', 'Custom Twitter Feeds' );
define( 'CTF_JS_URL', plugins_url( '/js/ctf-scripts.min.js?ver=' . CTF_VERSION , __FILE__ ) );
define( 'CTF_PRODUCT_NAME', 'Custom Twitter Feeds' );
@@ -631,7 +631,7 @@
$date_str = date_i18n( 'd.m.y', $tz_offset_timestamp );
break;
case '19':
- date_i18n( 'd.m.y - G:i', $tz_offset_timestamp );
+ $date_str = date_i18n( 'd.m.y - G:i', $tz_offset_timestamp );
break;
case '13':
$date_str = date_i18n( 'd/m/y', $tz_offset_timestamp );
@@ -648,7 +648,7 @@
case '17':
$date_str = date_i18n( 'l jS F Y, G:i', $tz_offset_timestamp );
break;
- case '18':
+ case '20':
$date_str = date_i18n( 'Y-m-d', $tz_offset_timestamp );
break;
default:
--- a/custom-twitter-feeds/inc/Admin/CTF_Global_Settings.php
+++ b/custom-twitter-feeds/inc/Admin/CTF_Global_Settings.php
@@ -48,7 +48,7 @@
}
add_action('admin_menu', [$this, 'register_menu']);
- add_filter( 'admin_footer_text', [$this, 'remove_admin_footer_text'] );
+ add_action('in_admin_header', [$this, 'maybe_remove_admin_footer']);
add_action( 'wp_ajax_ctf_save_settings', [$this, 'ctf_save_settings'] );
add_action( 'wp_ajax_ctf_activate_license', [$this, 'ctf_activate_license'] );
@@ -687,14 +687,27 @@
}
/**
- * Remove admin footer message
+ * Conditionally remove admin footer on plugin pages only.
*
- * @since 2.0
- *
- * @return void
+ * @since 2.6
*/
+ public function maybe_remove_admin_footer() {
+ static $plugin_pages = array(
+ 'custom-twitter-feeds',
+ 'ctf-feed-builder',
+ 'ctf-settings',
+ 'ctf-about-us',
+ 'ctf-support',
+ );
+ $current_page = isset($_GET['page']) ? sanitize_key($_GET['page']) : '';
+ if (in_array($current_page, $plugin_pages, true)) {
+ add_filter('admin_footer_text', [$this, 'remove_admin_footer_text']);
+ add_filter('update_footer', [$this, 'remove_admin_footer_text'], 11);
+ }
+ }
+
public function remove_admin_footer_text() {
- return;
+ return '';
}
/**
@@ -703,8 +716,6 @@
* @since 2.0
*/
function register_menu() {
- // remove admin page update footer
- add_filter( 'update_footer', [$this, 'remove_admin_footer_text'] );
$cap = ctf_get_manage_options_cap();
--- a/custom-twitter-feeds/inc/Builder/CTF_Feed_Saver.php
+++ b/custom-twitter-feeds/inc/Builder/CTF_Feed_Saver.php
@@ -328,6 +328,12 @@
$return['feed_name'] = $settings_db_data[0]['feed_name'];
}
$return = wp_parse_args( $return, CTF_Feed_Saver::settings_defaults() );
+
+ // Ensure dateformat is always a string for proper select matching in the customizer.
+ if ( isset( $return['dateformat'] ) ) {
+ $return['dateformat'] = (string) $return['dateformat'];
+ }
+
return $return;
}
--- a/custom-twitter-feeds/inc/Builder/Tabs/CTF_Builder_Customizer_Tab.php
+++ b/custom-twitter-feeds/inc/Builder/Tabs/CTF_Builder_Customizer_Tab.php
@@ -135,7 +135,7 @@
'15' => date('jS F Y, G:i', $original),
'16' => date('d M Y, G:i', $original),
'17' => date('l jS F Y, G:i', $original),
- '18' => date('Y-m-d', $original),
+ '20' => date('Y-m-d', $original),
'custom' => __('Custom','custom-twitter-feeds')
];
}
--- a/custom-twitter-feeds/inc/CTF_Display_Elements.php
+++ b/custom-twitter-feeds/inc/CTF_Display_Elements.php
@@ -502,7 +502,7 @@
<a class="ctf-tweet-text-link" href="<?php echo esc_url( 'https://twitter.com/' . $author_screen_name . '/status/' .$post_id ) ?>" target = "_blank" rel = "noopener noreferrer">
<?php } ?>
<p class="ctf-tweet-text">
- <?php echo nl2br( $post_text ) ?>
+ <?php echo wp_kses_post( nl2br( $post_text ) ) ?>
<?php
if(!$feed_options['is_legacy'] || ($feed_options['is_legacy'] && ctf_show( 'placeholder', $feed_options ))){
echo $post_media_text;
@@ -518,7 +518,7 @@
<a class="ctf-tweet-text-link" <?php echo $text_and_link_attr; ?> href="<?php echo esc_url( 'https://twitter.com/' . $author_screen_name . '/status/' .$post_id ) ?>" target = "_blank" rel = "noopener noreferrer">
<p class="ctf-tweet-text" <?php echo $post_text_attr; ?>></p>
</a>
- <p class="ctf-tweet-text" <?php echo $text_no_link_attr; ?> <?php echo $post_text_attr; ?>><?php echo nl2br( $post_text ) ?></p>
+ <p class="ctf-tweet-text" <?php echo $text_no_link_attr; ?> <?php echo $post_text_attr; ?>><?php echo wp_kses_post( nl2br( $post_text ) ) ?></p>
<?php
if(!$feed_options['is_legacy'] || ($feed_options['is_legacy'] && ctf_show( 'placeholder', $feed_options ))){
echo $post_media_text;
--- a/custom-twitter-feeds/vendor/composer/installed.php
+++ b/custom-twitter-feeds/vendor/composer/installed.php
@@ -2,4 +2,4 @@
namespace SmashballoonTwitterFeedVendor;
-return array('root' => array('name' => 'smashballoon/custom-twitter-feeds', 'pretty_version' => 'v2.5.4', 'version' => '2.5.4.0', 'reference' => '5b6bfa2bb2c7ec07b5cdd43d73ebd99c1808ee44', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev' => false), 'versions' => array('laravel/serializable-closure' => array('pretty_version' => 'v1.3.7', 'version' => '1.3.7.0', 'reference' => '4f48ade902b94323ca3be7646db16209ec76be3d', 'type' => 'library', 'install_path' => __DIR__ . '/../laravel/serializable-closure', 'aliases' => array(), 'dev_requirement' => false), 'php-di/invoker' => array('pretty_version' => '2.3.7', 'version' => '2.3.7.0', 'reference' => '3c1ddfdef181431fbc4be83378f6d036d59e81e1', 'type' => 'library', 'install_path' => __DIR__ . '/../php-di/invoker', 'aliases' => array(), 'dev_requirement' => false), 'php-di/php-di' => array('dev_requirement' => false, 'replaced' => array(0 => '6.4.0')), 'php-di/phpdoc-reader' => array('pretty_version' => '2.2.1', 'version' => '2.2.1.0', 'reference' => '66daff34cbd2627740ffec9469ffbac9f8c8185c', 'type' => 'library', 'install_path' => __DIR__ . '/../php-di/phpdoc-reader', 'aliases' => array(), 'dev_requirement' => false), 'psr/container' => array('pretty_version' => '1.1.2', 'version' => '1.1.2.0', 'reference' => '513e0666f7216c7459170d56df27dfcefe1689ea', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/container', 'aliases' => array(), 'dev_requirement' => false), 'smashballoon/custom-twitter-feeds' => array('pretty_version' => 'v2.5.4', 'version' => '2.5.4.0', 'reference' => '5b6bfa2bb2c7ec07b5cdd43d73ebd99c1808ee44', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev_requirement' => false), 'smashballoon/framework' => array('pretty_version' => 'dev-master', 'version' => 'dev-master', 'reference' => 'fcf3511827434c056c90f80a7ff9935f4fbe99df', 'type' => 'library', 'install_path' => __DIR__ . '/../smashballoon/framework', 'aliases' => array(0 => '1.0.0', 1 => '9999999-dev'), 'dev_requirement' => false)));
+return array('root' => array('name' => 'smashballoon/custom-twitter-feeds', 'pretty_version' => 'v2.5.5', 'version' => '2.5.5.0', 'reference' => 'd01171ce56f032d8c06bf160433d2cbf4b39cfd3', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev' => false), 'versions' => array('laravel/serializable-closure' => array('pretty_version' => 'v1.3.7', 'version' => '1.3.7.0', 'reference' => '4f48ade902b94323ca3be7646db16209ec76be3d', 'type' => 'library', 'install_path' => __DIR__ . '/../laravel/serializable-closure', 'aliases' => array(), 'dev_requirement' => false), 'php-di/invoker' => array('pretty_version' => '2.3.7', 'version' => '2.3.7.0', 'reference' => '3c1ddfdef181431fbc4be83378f6d036d59e81e1', 'type' => 'library', 'install_path' => __DIR__ . '/../php-di/invoker', 'aliases' => array(), 'dev_requirement' => false), 'php-di/php-di' => array('dev_requirement' => false, 'replaced' => array(0 => '6.4.0')), 'php-di/phpdoc-reader' => array('pretty_version' => '2.2.1', 'version' => '2.2.1.0', 'reference' => '66daff34cbd2627740ffec9469ffbac9f8c8185c', 'type' => 'library', 'install_path' => __DIR__ . '/../php-di/phpdoc-reader', 'aliases' => array(), 'dev_requirement' => false), 'psr/container' => array('pretty_version' => '1.1.2', 'version' => '1.1.2.0', 'reference' => '513e0666f7216c7459170d56df27dfcefe1689ea', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/container', 'aliases' => array(), 'dev_requirement' => false), 'smashballoon/custom-twitter-feeds' => array('pretty_version' => 'v2.5.5', 'version' => '2.5.5.0', 'reference' => 'd01171ce56f032d8c06bf160433d2cbf4b39cfd3', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev_requirement' => false), 'smashballoon/framework' => array('pretty_version' => 'dev-master', 'version' => 'dev-master', 'reference' => 'fcf3511827434c056c90f80a7ff9935f4fbe99df', 'type' => 'library', 'install_path' => __DIR__ . '/../smashballoon/framework', 'aliases' => array(0 => '1.0.0', 1 => '9999999-dev'), 'dev_requirement' => false)));