Below is a differential between the unpatched vulnerable code and the patched update, for reference.
--- a/youtube-showcase/assets/ext/emd-meta-box/inc/helpers.php
+++ b/youtube-showcase/assets/ext/emd-meta-box/inc/helpers.php
@@ -51,9 +51,9 @@
{
$content .= sprintf(
'<li><a href="%s" title="%s">%s</a></li>',
- $file['url'],
- $file['title'],
- $file['name']
+ esc_url($file['url']),
+ esc_attr($file['title']),
+ esc_html($file['name'])
);
}
$content .= '</ul>';
@@ -70,20 +70,20 @@
{
$content .= sprintf(
'<li><a href="%s" title="%s"><img src="%s" alt="%s" title="%s" /></a></li>',
- $image['full_url'],
- $image['title'],
- $image['url'],
- $image['alt'],
- $image['title']
+ esc_url($image['full_url']),
+ esc_attr($image['title']),
+ esc_url($image['url']),
+ esc_attr($image['alt']),
+ esc_attr($image['title'])
);
}
else
{
$content .= sprintf(
'<li><img src="%s" alt="%s" title="%s" /></li>',
- $image['url'],
- $image['alt'],
- $image['title']
+ esc_url($image['url']),
+ esc_attr($image['alt']),
+ esc_attr($image['title'])
);
}
}
@@ -98,9 +98,9 @@
{
$content .= sprintf(
'<li><a href="%s" title="%s">%s</a></li>',
- get_term_link( $term, $atts['taxonomy'] ),
- $term->name,
- $term->name
+ esc_url(get_term_link( $term, $atts['taxonomy'] )),
+ esc_attr($term->name),
+ esc_html($term->name)
);
}
$content .= '</ul>';
@@ -319,9 +319,9 @@
$html = sprintf(
'<div id="emd-mb-map-canvas-%d" style="width:%s;height:%s"></div>',
- $counter,
- $args['width'],
- $args['height']
+ esc_attr($counter),
+ esc_attr($args['width']),
+ esc_attr($args['height'])
);
// Load Google Maps script only when needed
--- a/youtube-showcase/assets/ext/filepicker/upload.php
+++ b/youtube-showcase/assets/ext/filepicker/upload.php
@@ -26,7 +26,7 @@
'min_width' => __('Image requires a minimum width','youtube-showcase'),
'max_height' => __('Image exceeds maximum height','youtube-showcase'),
'min_height' => __('Image requires a minimum height','youtube-showcase')
- );
+ );
if (!empty($_FILES) && isset($_FILES['file'])) {
$upload_file = 0;
@@ -39,61 +39,61 @@
$fileTypes_arr = is_array($fileTypes) ? $fileTypes : explode(",", $fileTypes);
}
$fileTypes_arr = array_map('trim', $fileTypes_arr);
- $fileTypes_arr = array_map('strtolower', $fileTypes_arr);
+ $fileTypes_arr = array_map('strtolower', $fileTypes_arr);
- $original_name = $_FILES['file']['name'];
- $fileParts = pathinfo($original_name);
- $file_ext = isset($fileParts['extension']) ? strtolower($fileParts['extension']) : '';
+ $original_name = $_FILES['file']['name'];
+ $fileParts = pathinfo($original_name);
+ $file_ext = isset($fileParts['extension']) ? strtolower($fileParts['extension']) : '';
if (empty($file_ext) || !in_array($file_ext, $fileTypes_arr, true)) {
- echo esc_html__('Invalid file type.', 'youtube-showcase');
- return; // Halt execution immediately
- }
- if (strpos(strtolower($original_name), '.php') !== false) {
- echo esc_html__('Invalid file type signature.', 'youtube-showcase');
- return;
+ echo esc_html__('Invalid file type.', 'youtube-showcase');
+ return; // Halt execution immediately
+ }
+ if (strpos(strtolower($original_name), '.php') !== false) {
+ echo esc_html__('Invalid file type signature.', 'youtube-showcase');
+ return;
}
// If it survives all checks above, flag it as safe to upload
- $upload_file = 1;
+ $upload_file = 1;
+
+ if ($upload_file === 1) {
+ // Sanitize the file name inside the $_FILES array before WordPress touches it
+ $_FILES['file']['name'] = sanitize_file_name($original_name);
+
+ $file = wp_handle_upload($_FILES['file'], array('test_form' => false));
+
+ if (isset($file['error'])) {
+ echo esc_html($file['error']);
+ } else {
+ $_FILES['file']['path'] = $file['file'];
- if ($upload_file === 1) {
- // Sanitize the file name inside the $_FILES array before WordPress touches it
- $_FILES['file']['name'] = sanitize_file_name($original_name);
-
- $file = wp_handle_upload($_FILES['file'], array('test_form' => false));
-
- if (isset($file['error'])) {
- echo esc_html($file['error']);
- } else {
- $_FILES['file']['path'] = $file['file'];
-
if (!empty($myapp)) {
- $new_sess_files = array();
+ $new_sess_files = array();
- // Sanitize $myapp dynamically to prevent arbitrary class instantiation attacks
- $clean_myapp = preg_replace('/[^a-zA-Z0-9_-]/', '', $myapp);
- $sess_name = strtoupper($clean_myapp);
-
- if (function_exists($sess_name)) {
- $session_class = $sess_name();
- $sess_files = $session_class->session->get('uploads');
-
- if (!empty($sess_files) && is_array($sess_files)) {
- $new_sess_files = $sess_files;
- }
-
- if (empty($sess_files[$fieldid])) {
- $new_sess_files[$fieldid][] = $_FILES['file'];
- } elseif (is_array($sess_files[$fieldid])) {
- $new_sess_files[$fieldid] = $sess_files[$fieldid];
- $new_sess_files[$fieldid][] = $_FILES['file'];
- }
-
- $session_class->session->set('uploads', $new_sess_files);
- }
- }
- echo '1';
- }
+ // Sanitize $myapp dynamically to prevent arbitrary class instantiation attacks
+ $clean_myapp = preg_replace('/[^a-zA-Z0-9_-]/', '', $myapp);
+ $sess_name = strtoupper($clean_myapp);
+
+ if (function_exists($sess_name)) {
+ $session_class = $sess_name();
+ $sess_files = $session_class->session->get('uploads');
+
+ if (!empty($sess_files) && is_array($sess_files)) {
+ $new_sess_files = $sess_files;
+ }
+
+ if (empty($sess_files[$fieldid])) {
+ $new_sess_files[$fieldid][] = $_FILES['file'];
+ } elseif (is_array($sess_files[$fieldid])) {
+ $new_sess_files[$fieldid] = $sess_files[$fieldid];
+ $new_sess_files[$fieldid][] = $_FILES['file'];
+ }
+
+ $session_class->session->set('uploads', $new_sess_files);
+ }
+ }
+ echo '1';
+ }
}
}
}
--- a/youtube-showcase/includes/admin/getting-started.php
+++ b/youtube-showcase/includes/admin/getting-started.php
@@ -180,7 +180,7 @@
<p class="about-text">
<?php printf(__("YouTube Showcase is a powerful but simple-to-use YouTube video gallery plugin with responsive frontend.", 'youtube-showcase') , $display_version); ?>
</p>
-<div style="display: inline-block;"><a style="height: 50px; background:#ff8484;padding:10px 12px;color:#ffffff;text-align: center;font-weight: bold;line-height: 50px; font-family: Arial;border-radius: 6px; text-decoration: none;" href="https://emdplugins.com/plugin-pricing/youtube-showcase-wordpress-plugin-pricing/?pk_campaign=youtube-showcase-upgradebtn&pk_kwd=youtube-showcase-resources"><?php printf(__('Upgrade Now', 'youtube-showcase') , $display_version); ?></a></div>
+<div style="display: inline-block;"><a style="height: 50px; background:#ff8484;padding:10px 12px;color:#ffffff;text-align: center;font-weight: bold;line-height: 50px; font-family: Arial;border-radius: 6px; text-decoration: none;" href="https://emdplugins.com/youtube-showcase/pricing/?pk_campaign=youtube-showcase-upgradebtn&pk_kwd=youtube-showcase-resources"><?php printf(__('Upgrade Now', 'youtube-showcase') , $display_version); ?></a></div>
<div style="display: inline-block;margin-bottom: 20px;"><a style="height: 50px; background:#f0ad4e;padding:10px 12px;color:#ffffff;text-align: center;font-weight: bold;line-height: 50px; font-family: Arial;border-radius: 6px; text-decoration: none;" href="https://ytshowcase.emdplugins.com//?pk_campaign=youtube-showcase-buybtn&pk_kwd=youtube-showcase-resources"><?php printf(__('Visit Pro Demo Site', 'youtube-showcase') , $display_version); ?></a></div>
<?php
$tabs['getting-started'] = __('Getting Started', 'youtube-showcase');
@@ -232,14 +232,14 @@
text-decoration: none;
color: white;
margin: 10px 0;
- display: inline-block;" href="https://emdplugins.com/expert-service-pricing/?pk_campaign=youtube-showcase-gettingstarted&pk_kwd=youtube-showcase-livedemo">Purchase Work Order</a></p></div></div><div style="margin-top:15px"><a href="#rtop" class="top">Go to top</a></div><hr style="margin-top:40px"><div id="gs-sec-237"></div><div style="color:white;background:#0000003b;padding:5px 10px;font-size: 1.4em;font-weight: 600;">Need Help?</div><div class="changelog emd-section getting-started-237" style="margin:0;background-color:white;padding:10px"><div id="gallery"></div><div class="sec-desc"><p>There are many resources available in case you need help:</p>
+ display: inline-block;" href="https://support.emdplugins.com/expert-service-pricing/?pk_campaign=youtube-showcase-gettingstarted&pk_kwd=youtube-showcase-livedemo">Purchase Work Order</a></p></div></div><div style="margin-top:15px"><a href="#rtop" class="top">Go to top</a></div><hr style="margin-top:40px"><div id="gs-sec-237"></div><div style="color:white;background:#0000003b;padding:5px 10px;font-size: 1.4em;font-weight: 600;">Need Help?</div><div class="changelog emd-section getting-started-237" style="margin:0;background-color:white;padding:10px"><div id="gallery"></div><div class="sec-desc"><p>There are many resources available in case you need help:</p>
<ul>
-<li>Search our <a target="_blank" href="https://emdplugins.com/support">knowledge base</a></li>
-<li><a href="https://emdplugins.com/kb_tags/youtube-showcase" target="_blank">Browse our YouTube Showcase Community articles</a></li>
+<li>Search our <a target="_blank" href="https://support.emdplugins.com">knowledge base</a></li>
+<li><a href="https://support.emdplugins.com/kb_tags/youtube-showcase" target="_blank">Browse our YouTube Showcase Community articles</a></li>
<li><a href="https://docs.emdplugins.com/docs/youtube-showcase-community-documentation" target="_blank">Check out YouTube Showcase Community documentation for step by step instructions.</a></li>
-<li><a href="https://emdplugins.com/emdplugins-support-introduction/" target="_blank">Open a support ticket if you still could not find the answer to your question</a></li>
+<li><a href="https://support.emdplugins.com/emdplugins-support-introduction/" target="_blank">Open a support ticket if you still could not find the answer to your question</a></li>
</ul>
-<p>Please read <a href="https://emdplugins.com/questions/what-to-write-on-a-support-ticket-related-to-a-technical-issue/" target="_blank">"What to write to report a technical issue"</a> before submitting a support ticket.</p></div></div><div style="margin-top:15px"><a href="#rtop" class="top">Go to top</a></div><hr style="margin-top:40px"><div id="gs-sec-238"></div><div style="color:white;background:#0000003b;padding:5px 10px;font-size: 1.4em;font-weight: 600;">Learn More</div><div class="changelog emd-section getting-started-238" style="margin:0;background-color:white;padding:10px"><div id="gallery"></div><div class="sec-desc"><p>The following articles provide step by step instructions on various concepts covered in YouTube Showcase Community.</p>
+<p>Please read <a href="https://support.emdplugins.com/questions/what-to-write-on-a-support-ticket-related-to-a-technical-issue/" target="_blank">"What to write to report a technical issue"</a> before submitting a support ticket.</p></div></div><div style="margin-top:15px"><a href="#rtop" class="top">Go to top</a></div><hr style="margin-top:40px"><div id="gs-sec-238"></div><div style="color:white;background:#0000003b;padding:5px 10px;font-size: 1.4em;font-weight: 600;">Learn More</div><div class="changelog emd-section getting-started-238" style="margin:0;background-color:white;padding:10px"><div id="gallery"></div><div class="sec-desc"><p>The following articles provide step by step instructions on various concepts covered in YouTube Showcase Community.</p>
<ul><li>
<a target="_blank" href="https://docs.emdplugins.com/docs/youtube-showcase-community-documentation/#article208">Concepts</a>
</li>
@@ -297,7 +297,7 @@
text-decoration: none;
color: white;
margin: 10px 0;
- display: inline-block;" href="https://emdplugins.com/expert-service-pricing/?pk_campaign=youtube-showcase-gettingstarted&pk_kwd=youtube-showcase-livedemo">Purchase Work Order</a></p></div></div><div style="margin-top:15px"><a href="#rtop" class="top">Go to top</a></div><hr style="margin-top:40px"><div id="gs-sec-175"></div><div style="color:white;background:#0000003b;padding:5px 10px;font-size: 1.4em;font-weight: 600;">Introduction to YouTube Showcase</div><div class="changelog emd-section getting-started-175" style="margin:0;background-color:white;padding:10px"><div class="emd-yt" data-youtube-id="8MtOJaKQZKQ" data-ratio="16:9">loading...</div><div class="sec-desc"><p>Get started with YouTube Showcase. This video introduces YouTube Showcase based on the most common use cases. You will learn how to create and display your videos as well as the options available to have successful YouTube video site.</p></div></div><div style="margin-top:15px"><a href="#rtop" class="top">Go to top</a></div><hr style="margin-top:40px"><div id="gs-sec-5"></div><div style="color:white;background:#0000003b;padding:5px 10px;font-size: 1.4em;font-weight: 600;">How to find your YouTube Video ID</div><div class="changelog emd-section getting-started-5" style="margin:0;background-color:white;padding:10px"><div id="gallery"><div class="sec-img gallery-item"><a class="thickbox tooltip" rel="gallery-5" href="<?php echo YOUTUBE_SHOWCASE_PLUGIN_URL . "assets/img/video_id_large.png"; ?>"><img src="<?php echo YOUTUBE_SHOWCASE_PLUGIN_URL . "assets/img/video_id_540.png"; ?>"></a></div></div><div class="sec-desc"><p>It is very simple to find your YouTube video ID. First, go to the YouTube webpage. Look at the URL of that page, and at the end of it, you should see a combination of numbers and letters after an equal sign (=). This is the code you need to enter into the video key field.</p></div></div><div style="margin-top:15px"><a href="#rtop" class="top">Go to top</a></div><hr style="margin-top:40px"><div id="gs-sec-6"></div><div style="color:white;background:#0000003b;padding:5px 10px;font-size: 1.4em;font-weight: 600;">Using Setup assistant</div><div class="changelog emd-section getting-started-6" style="margin:0;background-color:white;padding:10px"><div id="gallery"><div class="sec-img gallery-item"><a class="thickbox tooltip" rel="gallery-6" href="<?php echo YOUTUBE_SHOWCASE_PLUGIN_URL . "assets/img/video_gallery_large.png"; ?>"><img src="<?php echo YOUTUBE_SHOWCASE_PLUGIN_URL . "assets/img/video_gallery_540.png"; ?>"></a></div></div><div class="sec-desc"><p>Setup assistant creates the gallery pages automatically.</p></div></div><div style="margin-top:15px"><a href="#rtop" class="top">Go to top</a></div><hr style="margin-top:40px"><div id="gs-sec-3"></div><div style="color:white;background:#0000003b;padding:5px 10px;font-size: 1.4em;font-weight: 600;">How to create your first video</div><div class="changelog emd-section getting-started-3" style="margin:0;background-color:white;padding:10px"><div id="gallery"><div class="sec-img gallery-item"><a class="thickbox tooltip" rel="gallery-3" href="<?php echo YOUTUBE_SHOWCASE_PLUGIN_URL . "assets/img/video_edit_large.png"; ?>"><img src="<?php echo YOUTUBE_SHOWCASE_PLUGIN_URL . "assets/img/video_edit_540.png"; ?>"></a></div></div><div class="sec-desc"><ol>
+ display: inline-block;" href="https://support.emdplugins.com/expert-service-pricing/?pk_campaign=youtube-showcase-gettingstarted&pk_kwd=youtube-showcase-livedemo">Purchase Work Order</a></p></div></div><div style="margin-top:15px"><a href="#rtop" class="top">Go to top</a></div><hr style="margin-top:40px"><div id="gs-sec-175"></div><div style="color:white;background:#0000003b;padding:5px 10px;font-size: 1.4em;font-weight: 600;">Introduction to YouTube Showcase</div><div class="changelog emd-section getting-started-175" style="margin:0;background-color:white;padding:10px"><div class="emd-yt" data-youtube-id="8MtOJaKQZKQ" data-ratio="16:9">loading...</div><div class="sec-desc"><p>Get started with YouTube Showcase. This video introduces YouTube Showcase based on the most common use cases. You will learn how to create and display your videos as well as the options available to have successful YouTube video site.</p></div></div><div style="margin-top:15px"><a href="#rtop" class="top">Go to top</a></div><hr style="margin-top:40px"><div id="gs-sec-5"></div><div style="color:white;background:#0000003b;padding:5px 10px;font-size: 1.4em;font-weight: 600;">How to find your YouTube Video ID</div><div class="changelog emd-section getting-started-5" style="margin:0;background-color:white;padding:10px"><div id="gallery"><div class="sec-img gallery-item"><a class="thickbox tooltip" rel="gallery-5" href="<?php echo YOUTUBE_SHOWCASE_PLUGIN_URL . "assets/img/video_id_large.png"; ?>"><img src="<?php echo YOUTUBE_SHOWCASE_PLUGIN_URL . "assets/img/video_id_540.png"; ?>"></a></div></div><div class="sec-desc"><p>It is very simple to find your YouTube video ID. First, go to the YouTube webpage. Look at the URL of that page, and at the end of it, you should see a combination of numbers and letters after an equal sign (=). This is the code you need to enter into the video key field.</p></div></div><div style="margin-top:15px"><a href="#rtop" class="top">Go to top</a></div><hr style="margin-top:40px"><div id="gs-sec-6"></div><div style="color:white;background:#0000003b;padding:5px 10px;font-size: 1.4em;font-weight: 600;">Using Setup assistant</div><div class="changelog emd-section getting-started-6" style="margin:0;background-color:white;padding:10px"><div id="gallery"><div class="sec-img gallery-item"><a class="thickbox tooltip" rel="gallery-6" href="<?php echo YOUTUBE_SHOWCASE_PLUGIN_URL . "assets/img/video_gallery_large.png"; ?>"><img src="<?php echo YOUTUBE_SHOWCASE_PLUGIN_URL . "assets/img/video_gallery_540.png"; ?>"></a></div></div><div class="sec-desc"><p>Setup assistant creates the gallery pages automatically.</p></div></div><div style="margin-top:15px"><a href="#rtop" class="top">Go to top</a></div><hr style="margin-top:40px"><div id="gs-sec-3"></div><div style="color:white;background:#0000003b;padding:5px 10px;font-size: 1.4em;font-weight: 600;">How to create your first video</div><div class="changelog emd-section getting-started-3" style="margin:0;background-color:white;padding:10px"><div id="gallery"><div class="sec-img gallery-item"><a class="thickbox tooltip" rel="gallery-3" href="<?php echo YOUTUBE_SHOWCASE_PLUGIN_URL . "assets/img/video_edit_large.png"; ?>"><img src="<?php echo YOUTUBE_SHOWCASE_PLUGIN_URL . "assets/img/video_edit_540.png"; ?>"></a></div></div><div class="sec-desc"><ol>
<li>Log in to your Administration Panel.</li>
<li>Click the 'Videos' tab.</li>
<li>Click the 'Add New' sub-tab or the “Add New” button in the video list page.</li>
@@ -307,16 +307,16 @@
<li>After the submission is completed, the video status changes to "Published"</li>
<li>Click on the permalink to see the video page</li>
</ol></div></div><div style="margin-top:15px"><a href="#rtop" class="top">Go to top</a></div><hr style="margin-top:40px"><div id="gs-sec-7"></div><div style="color:white;background:#0000003b;padding:5px 10px;font-size: 1.4em;font-weight: 600;">YouTube Showcase Pro WordPress plugin helps you keep more visitors on your site longer.</div><div class="changelog emd-section getting-started-7" style="margin:0;background-color:white;padding:10px"><div id="gallery"><div class="sec-img gallery-item"><a class="thickbox tooltip" rel="gallery-7" href="<?php echo YOUTUBE_SHOWCASE_PLUGIN_URL . "assets/img/GetYouTubePro.png"; ?>"><img src="<?php echo YOUTUBE_SHOWCASE_PLUGIN_URL . "assets/img/GetYouTubePro.png"; ?>"></a></div></div><div class="sec-desc"><p>The most powerful and easy to use YouTube Video plugin for WordPress with enterprise features.</p>
-<div style="margin:25px"><a href="https://emdplugins.com/plugins/youtube-showcase-wordpress-plugin/?pk_campaign=ytscpro-buybtn&pk_kwd=ytsc-resources"><img style="width: 154px;" src="<?php echo YOUTUBE_SHOWCASE_PLUGIN_URL . "assets/img/button_buy-now.png"; ?>"></a>
+<div style="margin:25px"><a href="https://emdplugins.com/youtube-showcase/?pk_campaign=ytscpro-buybtn&pk_kwd=ytsc-resources"><img style="width: 154px;" src="<?php echo YOUTUBE_SHOWCASE_PLUGIN_URL . "assets/img/button_buy-now.png"; ?>"></a>
</div></div></div><div style="margin-top:15px"><a href="#rtop" class="top">Go to top</a></div><hr style="margin-top:40px"><div id="gs-sec-8"></div><div style="color:white;background:#0000003b;padding:5px 10px;font-size: 1.4em;font-weight: 600;">EMD CSV Import Export Extension allows getting your videos in and out of WordPress quickly</div><div class="changelog emd-section getting-started-8" style="margin:0;background-color:white;padding:10px"><div id="gallery"><div class="sec-img gallery-item"><a class="thickbox tooltip" rel="gallery-8" href="<?php echo YOUTUBE_SHOWCASE_PLUGIN_URL . "assets/img/video_impexp.png"; ?>"><img src="<?php echo YOUTUBE_SHOWCASE_PLUGIN_URL . "assets/img/video_impexp.png"; ?>"></a></div></div><div class="sec-desc"><p>EMD CSV Import Export Extension helps bulk import, export, update video information from CSV files. You can also reset(delete) all data and start over again without modifying database.</p>
-<p><a href="https://emdplugins.com/plugin-features/youtube-showcase-importexport-addon/?pk_campaign=emdimpexp-buybtn&pk_kwd=ytsc-resources"><img style="width: 154px;" src="<?php echo YOUTUBE_SHOWCASE_PLUGIN_URL . "assets/img/button_buy-now.png"; ?>"></a></p></div></div><div style="margin-top:15px"><a href="#rtop" class="top">Go to top</a></div><hr style="margin-top:40px"><div id="gs-sec-142"></div><div style="color:white;background:#0000003b;padding:5px 10px;font-size: 1.4em;font-weight: 600;">EMD Advanced Filters and Columns Extension for finding what's important faster</div><div class="changelog emd-section getting-started-142" style="margin:0;background-color:white;padding:10px"><div id="gallery"><div class="sec-img gallery-item"><a class="thickbox tooltip" rel="gallery-142" href="<?php echo YOUTUBE_SHOWCASE_PLUGIN_URL . "assets/img/YouTubeShowCasePro_APM.png"; ?>"><img src="<?php echo YOUTUBE_SHOWCASE_PLUGIN_URL . "assets/img/YouTubeShowCasePro_APM.png"; ?>"></a></div></div><div class="sec-desc"><p>This extension is included in the pro edition.</p>
+<p><a href="https://emdplugins.com/youtube-showcase/addons/import-export/?pk_campaign=emdimpexp-buybtn&pk_kwd=ytsc-resources"><img style="width: 154px;" src="<?php echo YOUTUBE_SHOWCASE_PLUGIN_URL . "assets/img/button_buy-now.png"; ?>"></a></p></div></div><div style="margin-top:15px"><a href="#rtop" class="top">Go to top</a></div><hr style="margin-top:40px"><div id="gs-sec-142"></div><div style="color:white;background:#0000003b;padding:5px 10px;font-size: 1.4em;font-weight: 600;">EMD Advanced Filters and Columns Extension for finding what's important faster</div><div class="changelog emd-section getting-started-142" style="margin:0;background-color:white;padding:10px"><div id="gallery"><div class="sec-img gallery-item"><a class="thickbox tooltip" rel="gallery-142" href="<?php echo YOUTUBE_SHOWCASE_PLUGIN_URL . "assets/img/YouTubeShowCasePro_APM.png"; ?>"><img src="<?php echo YOUTUBE_SHOWCASE_PLUGIN_URL . "assets/img/YouTubeShowCasePro_APM.png"; ?>"></a></div></div><div class="sec-desc"><p>This extension is included in the pro edition.</p>
<p>EMD Advanced Filters and Columns Extension for YouTube Showcase Community edition helps you:</p>
<ul><li>Filter entries quickly to find what you're looking for</li>
<li>Save your frequently used filters so you do not need to create them again</li>
<li>Sort quote request columns to see what's important faster</li>
<li>Change the display order of columns </li>
<li>Enable or disable columns for better and cleaner look </li>
-<li>Export search results to PDF or CSV for custom reporting</li></ul><div style="margin:25px"><a href="https://emdplugins.com/plugin-features/youtube-showcase-smart-search-and-columns-addon/?pk_campaign=emd-afc-buybtn&pk_kwd=youtube-showcase-resources"><img style="width: 154px;" src="<?php echo YOUTUBE_SHOWCASE_PLUGIN_URL . "assets/img/button_buy-now.png"; ?>"></a></div></div></div><div style="margin-top:15px"><a href="#rtop" class="top">Go to top</a></div><hr style="margin-top:40px">
+<li>Export search results to PDF or CSV for custom reporting</li></ul><div style="margin:25px"><a href="https://emdplugins.com/youtube-showcase/addons/smart-search/?pk_campaign=emd-afc-buybtn&pk_kwd=youtube-showcase-resources"><img style="width: 154px;" src="<?php echo YOUTUBE_SHOWCASE_PLUGIN_URL . "assets/img/button_buy-now.png"; ?>"></a></div></div></div><div style="margin-top:15px"><a href="#rtop" class="top">Go to top</a></div><hr style="margin-top:40px">
<?php echo '</div>'; ?>
<?php echo '<div class="tab-content" id="tab-release-notes"';
@@ -327,6 +327,21 @@
?>
<p class="about-description">This page lists the release notes from every production version of YouTube Showcase Community.</p>
+<h3 style="font-size: 18px;font-weight:700;color: white;background: #708090;padding:5px 10px;width:155px;border: 2px solid #fff;border-radius:4px;text-align:center">4.0.5 changes</h3>
+<div class="wp-clearfix"><div class="changelog emd-section whats-new whats-new-1627" style="margin:0">
+<h3 style="font-size:18px;" class="fix"><div style="font-size:110%;color:#c71585"><span class="dashicons dashicons-admin-tools"></span> FIX</div>
+XSS vulnerability for emd_mb_meta function.</h3>
+<div ></a></div></div></div><hr style="margin:30px 0">
+<h3 style="font-size: 18px;font-weight:700;color: white;background: #708090;padding:5px 10px;width:155px;border: 2px solid #fff;border-radius:4px;text-align:center">4.0.4 changes</h3>
+<div class="wp-clearfix"><div class="changelog emd-section whats-new whats-new-1627" style="margin:0">
+<h3 style="font-size:18px;" class="fix"><div style="font-size:110%;color:#c71585"><span class="dashicons dashicons-admin-tools"></span> FIX</div>
+Function call vulnerability in the file deletion AJAX handler.</h3>
+<div ></a></div></div></div><hr style="margin:30px 0">
+<h3 style="font-size: 18px;font-weight:700;color: white;background: #708090;padding:5px 10px;width:155px;border: 2px solid #fff;border-radius:4px;text-align:center">4.0.3 changes</h3>
+<div class="wp-clearfix"><div class="changelog emd-section whats-new whats-new-1627" style="margin:0">
+<h3 style="font-size:18px;" class="fix"><div style="font-size:110%;color:#c71585"><span class="dashicons dashicons-admin-tools"></span> FIX</div>
+Patched an unrestricted file upload vulnerability.</h3>
+<div ></a></div></div></div><hr style="margin:30px 0">
<h3 style="font-size: 18px;font-weight:700;color: white;background: #708090;padding:5px 10px;width:155px;border: 2px solid #fff;border-radius:4px;text-align:center">4.0.2 changes</h3>
<div class="wp-clearfix"><div class="changelog emd-section whats-new whats-new-1627" style="margin:0">
<h3 style="font-size:18px;" class="fix"><div style="font-size:110%;color:#c71585"><span class="dashicons dashicons-admin-tools"></span> FIX</div>
@@ -662,7 +677,7 @@
<p>If none of the provided options works for you, you may still fix theme related conflicts following the steps in <a href="https://docs.emdplugins.com/docs/youtube-showcase-community-documentation">YouTube Showcase Community Documentation - Resolving theme related conflicts section.</a></p>
<div class="quote">
-<p>If you’re unfamiliar with code/templates and resolving potential conflicts, <a href="https://emdplugins.com/open-a-support-ticket/?pk_campaign=raq-hireme&ticket_topic=pre-sales-questions"> do yourself a favor and hire us</a>. Sometimes the cost of hiring someone else to fix things is far less than doing it yourself. We will get your site up and running in no time.</p>
+<p>If you’re unfamiliar with code/templates and resolving potential conflicts, <a href="https://support.emdplugins.com/open-a-support-ticket/?pk_campaign=raq-hireme&ticket_topic=pre-sales-questions"> do yourself a favor and hire us</a>. Sometimes the cost of hiring someone else to fix things is far less than doing it yourself. We will get your site up and running in no time.</p>
</div></div></div><div style="margin-top:15px"><a href="#ptop" class="top">Go to top</a></div><hr style="margin-top:40px">
<?php echo '</div>'; ?>
<?php echo '<div class="tab-content" id="tab-features"';
@@ -691,8 +706,8 @@
<tr><td><a href="https://emdplugins.com/youtube-showcase-custom-video-comments?pk_campaign=youtube-showcase-com&pk_kwd=getting-started"><img style="width:128px;height:auto" src="<?php echo YOUTUBE_SHOWCASE_PLUGIN_URL . "assets/img/comments.png"; ?>"></a></td><td><a href="https://emdplugins.com/youtube-showcase-custom-video-comments?pk_campaign=youtube-showcase-com&pk_kwd=getting-started">Foster a Community with Custom Video Comments</a></td><td> - Premium feature (included in Pro)</td></tr>
<tr><td><a href="https://emdplugins.com/youtube-showcase-create-custom-video-galleries?pk_campaign=youtube-showcase-com&pk_kwd=getting-started"><img style="width:128px;height:auto" src="<?php echo YOUTUBE_SHOWCASE_PLUGIN_URL . "assets/img/custom-video-pages.png"; ?>"></a></td><td><a href="https://emdplugins.com/youtube-showcase-create-custom-video-galleries?pk_campaign=youtube-showcase-com&pk_kwd=getting-started">Easily Build Engaging, custom Video Galleries</a></td><td> - Premium feature (included in Pro)</td></tr>
<tr><td><a href="https://emdplugins.com/youtube-showcase-tailor-video-layouts-to-match-your-vision?pk_campaign=youtube-showcase-com&pk_kwd=getting-started"><img style="width:128px;height:auto" src="<?php echo YOUTUBE_SHOWCASE_PLUGIN_URL . "assets/img/adv-video-gallery.png"; ?>"></a></td><td><a href="https://emdplugins.com/youtube-showcase-tailor-video-layouts-to-match-your-vision?pk_campaign=youtube-showcase-com&pk_kwd=getting-started">Choose from Multiple Views with YouTube Showcase.</a></td><td> - Premium feature (included in Pro)</td></tr>
-<tr><td><a href="https://emdplugins.com/youtube-showcase-smart-search-and-columns-addon?pk_campaign=youtube-showcase-com&pk_kwd=getting-started"><img style="width:128px;height:auto" src="<?php echo YOUTUBE_SHOWCASE_PLUGIN_URL . "assets/img/zoomin.png"; ?>"></a></td><td><a href="https://emdplugins.com/youtube-showcase-smart-search-and-columns-addon?pk_campaign=youtube-showcase-com&pk_kwd=getting-started">Effortlessly find specific videos</a></td><td> - Add-on (included in Pro)</td></tr>
-<tr><td><a href="https://emdplugins.com/youtube-showcase-import-export-addon?pk_campaign=youtube-showcase-com&pk_kwd=getting-started"><img style="width:128px;height:auto" src="<?php echo YOUTUBE_SHOWCASE_PLUGIN_URL . "assets/img/csv-impexp.png"; ?>"></a></td><td><a href="https://emdplugins.com/youtube-showcase-import-export-addon?pk_campaign=youtube-showcase-com&pk_kwd=getting-started">Optimize Video Management: YouTube Showcase Import/Export Addon</a></td><td> - Add-on (included in Pro)</td></tr>
+<tr><td><a href="https://emdplugins.com/youtube-showcase/addons/smart-search?pk_campaign=youtube-showcase-com&pk_kwd=getting-started"><img style="width:128px;height:auto" src="<?php echo YOUTUBE_SHOWCASE_PLUGIN_URL . "assets/img/zoomin.png"; ?>"></a></td><td><a href="https://emdplugins.com/youtube-showcase/addons/smart-search?pk_campaign=youtube-showcase-com&pk_kwd=getting-started">Effortlessly find specific videos</a></td><td> - Add-on (included in Pro)</td></tr>
+<tr><td><a href="https://emdplugins.com/youtube-showcase/addons/import-export?pk_campaign=youtube-showcase-com&pk_kwd=getting-started"><img style="width:128px;height:auto" src="<?php echo YOUTUBE_SHOWCASE_PLUGIN_URL . "assets/img/csv-impexp.png"; ?>"></a></td><td><a href="https://emdplugins.com/youtube-showcase/addons/import-export?pk_campaign=youtube-showcase-com&pk_kwd=getting-started">Optimize Video Management: YouTube Showcase Import/Export Addon</a></td><td> - Add-on (included in Pro)</td></tr>
</table>
<?php echo '</div>'; ?>
<?php echo '</div>';
--- a/youtube-showcase/includes/common-functions.php
+++ b/youtube-showcase/includes/common-functions.php
@@ -1044,8 +1044,8 @@
if ( in_array( $ext, $master_allowed, true ) ) {
$final_extensions[] = $ext;
}
- }
- }
+ }
+ }
if ( empty( $final_extensions ) ) {
$final_extensions = $master_allowed;
--- a/youtube-showcase/youtube-showcase.php
+++ b/youtube-showcase/youtube-showcase.php
@@ -2,8 +2,8 @@
/**
* Plugin Name: Video Gallery – YouTube Gallery, Playlist & Video Grid
* Plugin URI: https://emarketdesign.com
- * Description: Create a YouTube video gallery or playlist visually in the block editor. No shortcodes, no coding — just beautiful responsive video grids.
- * Version: 4.0.4
+ * Description: Display YouTube videos in a gallery, playlist, or grid using the block editor or shortcodes.
+ * Version: 4.0.5
* Author: eMarket Design
* Author URI: https://emdplugins.com?pk_campaign=youtube-showcase-com&pk_kwd=readme-by
* Text Domain: youtube-showcase
@@ -89,7 +89,7 @@
* @return void
*/
private function define_constants() {
- define('YOUTUBE_SHOWCASE_VERSION', '4.0.4');
+ define('YOUTUBE_SHOWCASE_VERSION', '4.0.5');
define('YOUTUBE_SHOWCASE_AUTHOR', 'eMarket Design');
define('YOUTUBE_SHOWCASE_NAME', 'Youtube Showcase');
define('YOUTUBE_SHOWCASE_PLUGIN_FILE', __FILE__);