--- a/s2member/s2member.php
+++ b/s2member/s2member.php
@@ -20,8 +20,8 @@
*/
/* -- This section for WordPress parsing. ------------------------------------------------------------------------------
-Version: 251005
-Stable tag: 251005
+Version: 260101
+Stable tag: 260101
SSL Compatible: yes
bbPress Compatible: yes
@@ -36,7 +36,7 @@
Authorize.Net Compatible: yes w/s2Member Pro
ClickBank Compatible: yes w/s2Member Pro
-Tested up to: 6.9-alpha-60900
+Tested up to: 7.0-alpha-61413
Requires at least: 4.2
Requires PHP: 5.6.2
@@ -77,7 +77,7 @@
*
* @var string
*/
-${__FILE__}['tmp'] = '251005'; //version//
+${__FILE__}['tmp'] = '260101'; //version//
if(!defined('WS_PLUGIN__S2MEMBER_VERSION'))
define('WS_PLUGIN__S2MEMBER_VERSION', ${__FILE__}['tmp']);
/**
--- a/s2member/src/includes/classes/email-configs.inc.php
+++ b/s2member/src/includes/classes/email-configs.inc.php
@@ -288,11 +288,19 @@
$user_full_name = trim ($user->first_name . ' ' . $user->last_name);
$user_ip = c_ws_plugin__s2member_utils_ip::current();
- $do_eval = (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ());
- $def_vars = get_defined_vars();
+ //251228 Sanitize values before replacements.
+ foreach (array('user_ip', 'user_pass', 'wp_set_pass_url', 'fields', 'custom', 'user_full_name', 'ccaps') as $_var) {
+ if (isset($$_var)) {
+ $$_var = c_ws_plugin__s2member_utils_strings::strip_php_tags_deep($$_var);
+ }
+ }
+ foreach (array('first_name','last_name','user_email','user_login') as $_var) {
+ if (isset($user->$_var)) {
+ $user->$_var = c_ws_plugin__s2member_utils_strings::strip_php_tags_deep($user->$_var);
+ }
+ }
if (($sbj = $GLOBALS['WS_PLUGIN__']['s2member']['o']['new_user_email_subject']))
- if (($sbj = $do_eval ? c_ws_plugin__s2member_utilities::evl($sbj, $def_vars) : $sbj))
if (($sbj = c_ws_plugin__s2member_utils_strings::fill_cvs($sbj, $custom)))
if (($sbj = preg_replace ('/%%wp_set_pass_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs ($wp_set_pass_url), $sbj)))
if (($sbj = preg_replace ('/%%wp_login_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs (wp_login_url ()), $sbj)))
@@ -315,7 +323,6 @@
break; // Empty; we can stop here.
if (($msg = $GLOBALS['WS_PLUGIN__']['s2member']['o']['new_user_email_message']))
- if (($msg = $do_eval ? c_ws_plugin__s2member_utilities::evl($msg, $def_vars) : $msg))
if (($msg = c_ws_plugin__s2member_utils_strings::fill_cvs($msg, $custom)))
if (($msg = preg_replace ('/%%wp_set_pass_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs ($wp_set_pass_url), $msg)))
if (($msg = preg_replace ('/%%wp_login_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs (wp_login_url ()), $msg)))
@@ -339,6 +346,11 @@
if (($sbj = trim (preg_replace ('/%%(.+?)%%/i', '', $sbj))) && ($msg = trim (preg_replace ('/%%(.+?)%%/i', '', $msg))))
{
+ if (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ())
+ {
+ $sbj = c_ws_plugin__s2member_utilities::evl($sbj, get_defined_vars());
+ $msg = c_ws_plugin__s2member_utilities::evl($msg, get_defined_vars());
+ }
//250617 HTML email support.
if (empty($GLOBALS['WS_PLUGIN__']['s2member']['o']['html_emails_enabled'])) {
c_ws_plugin__s2member_email_configs::email_config () . wp_mail ($user->user_email, apply_filters('ws_plugin__s2member_welcome_email_sbj', $sbj, get_defined_vars()), apply_filters('ws_plugin__s2member_welcome_email_msg', $msg, get_defined_vars()), 'From: "' . preg_replace ('/"/', "'", $GLOBALS['WS_PLUGIN__']['s2member']['o']['reg_email_from_name']) . '" <' . $GLOBALS['WS_PLUGIN__']['s2member']['o']['reg_email_from_email'] . '>'."rn".'Content-Type: text/plain; charset=UTF-8') . c_ws_plugin__s2member_email_configs::email_config_release ();;
@@ -363,11 +375,19 @@
$user_full_name = trim ($user->first_name . ' ' . $user->last_name);
$user_ip = c_ws_plugin__s2member_utils_ip::current();
- $do_eval = (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ());
- $def_vars = get_defined_vars();
+ //251228 Sanitize values before replacements.
+ foreach (array('user_ip', 'user_pass', 'wp_set_pass_url', 'fields', 'custom', 'user_full_name', 'ccaps') as $_var) {
+ if (isset($$_var)) {
+ $$_var = c_ws_plugin__s2member_utils_strings::strip_php_tags_deep($$_var);
+ }
+ }
+ foreach (array('first_name','last_name','user_email','user_login') as $_var) {
+ if (isset($user->$_var)) {
+ $user->$_var = c_ws_plugin__s2member_utils_strings::strip_php_tags_deep($user->$_var);
+ }
+ }
if (($rec = $GLOBALS['WS_PLUGIN__']['s2member']['o']['new_user_admin_email_recipients']))
- if (($rec = $do_eval ? c_ws_plugin__s2member_utilities::evl($rec, $def_vars) : $rec))
if (($rec = c_ws_plugin__s2member_utils_strings::fill_cvs($rec, $custom)))
if (($rec = preg_replace ('/%%wp_login_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs (wp_login_url ()), $rec)))
if (($rec = preg_replace ('/%%role%%/i', c_ws_plugin__s2member_utils_strings::esc_refs ($role), $rec)))
@@ -389,7 +409,6 @@
break; // Empty; we can stop here.
if (($sbj = $GLOBALS['WS_PLUGIN__']['s2member']['o']['new_user_admin_email_subject']))
- if (($sbj = $do_eval ? c_ws_plugin__s2member_utilities::evl($sbj, $def_vars) : $sbj))
if (($sbj = c_ws_plugin__s2member_utils_strings::fill_cvs($sbj, $custom)))
if (($sbj = preg_replace ('/%%wp_login_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs (wp_login_url ()), $sbj)))
if (($sbj = preg_replace ('/%%role%%/i', c_ws_plugin__s2member_utils_strings::esc_refs ($role), $sbj)))
@@ -411,7 +430,6 @@
break; // Empty; we can stop here.
if (($msg = $GLOBALS['WS_PLUGIN__']['s2member']['o']['new_user_admin_email_message']))
- if (($msg = $do_eval ? c_ws_plugin__s2member_utilities::evl($msg, $def_vars) : $msg))
if (($msg = c_ws_plugin__s2member_utils_strings::fill_cvs($msg, $custom)))
if (($msg = preg_replace ('/%%wp_login_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs (wp_login_url ()), $msg)))
if (($msg = preg_replace ('/%%role%%/i', c_ws_plugin__s2member_utils_strings::esc_refs ($role), $msg)))
@@ -434,6 +452,12 @@
if (($rec = trim (preg_replace ('/%%(.+?)%%/i', '', $rec))) && ($sbj = trim (preg_replace ('/%%(.+?)%%/i', '', $sbj))) && ($msg = trim (preg_replace ('/%%(.+?)%%/i', '', $msg))))
{
+ if (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ())
+ {
+ $rec = c_ws_plugin__s2member_utilities::evl($rec, get_defined_vars());
+ $sbj = c_ws_plugin__s2member_utilities::evl($sbj, get_defined_vars());
+ $msg = c_ws_plugin__s2member_utilities::evl($msg, get_defined_vars());
+ }
foreach (c_ws_plugin__s2member_utils_strings::parse_emails ($rec) as $recipient) // A list of receipients.
{
//250617 HTML email support.
--- a/s2member/src/includes/classes/paypal-notify-in-subscr-modify-w-level.inc.php
+++ b/s2member/src/includes/classes/paypal-notify-in-subscr-modify-w-level.inc.php
@@ -141,6 +141,7 @@
$msg = $GLOBALS['WS_PLUGIN__']['s2member']['o']['modification_email_message']; // The same for standard and w/ Pro-Forms.
$rec = $GLOBALS['WS_PLUGIN__']['s2member']['o']['modification_email_recipients']; // The same for standard and w/ Pro-Forms.
+ $paypal = c_ws_plugin__s2member_utils_strings::strip_php_tags_deep($paypal); //251226
if(($rec = c_ws_plugin__s2member_utils_strings::fill_cvs($rec, $paypal['custom'])) && ($rec = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $rec)))
if(($rec = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $rec)) && ($rec = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $rec)))
if(($rec = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $rec)) && ($rec = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $rec)))
--- a/s2member/src/includes/classes/paypal-notify-in-subscr-or-wa-w-level.inc.php
+++ b/s2member/src/includes/classes/paypal-notify-in-subscr-or-wa-w-level.inc.php
@@ -198,6 +198,7 @@
$msg = $GLOBALS['WS_PLUGIN__']['s2member']['o']['modification_email_message']; // The same for standard and w/ Pro-Forms.
$rec = $GLOBALS['WS_PLUGIN__']['s2member']['o']['modification_email_recipients']; // The same for standard and w/ Pro-Forms.
+ $paypal = c_ws_plugin__s2member_utils_strings::strip_php_tags_deep($paypal); //251226
if(($rec = c_ws_plugin__s2member_utils_strings::fill_cvs($rec, $paypal['custom'])) && ($rec = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $rec)))
if(($rec = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $rec)) && ($rec = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $rec)))
if(($rec = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $rec)) && ($rec = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $rec)))
@@ -464,6 +465,7 @@
$msg = preg_replace('/%%registration_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($registration_url), $GLOBALS['WS_PLUGIN__']['s2member']['o'][(($_REQUEST['s2member_paypal_proxy'] && preg_match('/pro-emails/', $_REQUEST['s2member_paypal_proxy_use'])) ? 'pro_' : '').'signup_email_message']);
$rec = preg_replace('/%%registration_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($registration_url), $GLOBALS['WS_PLUGIN__']['s2member']['o'][(($_REQUEST['s2member_paypal_proxy'] && preg_match('/pro-emails/', $_REQUEST['s2member_paypal_proxy_use'])) ? 'pro_' : '').'signup_email_recipients']);
+ $paypal = c_ws_plugin__s2member_utils_strings::strip_php_tags_deep($paypal); //251226
if(($rec = c_ws_plugin__s2member_utils_strings::fill_cvs($rec, $paypal['custom'])) && ($rec = preg_replace('/%%subscr_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_id']), $rec)))
if(($rec = preg_replace('/%%subscr_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_baid']), $rec)) && ($rec = preg_replace('/%%subscr_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['subscr_cid']), $rec)))
if(($rec = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $rec)) && ($rec = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $rec)))
--- a/s2member/src/includes/classes/paypal-notify-in-wa-ccaps-wo-level.inc.php
+++ b/s2member/src/includes/classes/paypal-notify-in-wa-ccaps-wo-level.inc.php
@@ -116,6 +116,7 @@
$msg = $GLOBALS['WS_PLUGIN__']['s2member']['o']['ccap_email_message']; // The same for standard and w/ Pro-Forms.
$rec = $GLOBALS['WS_PLUGIN__']['s2member']['o']['ccap_email_recipients']; // The same for standard and w/ Pro-Forms.
+ $paypal = c_ws_plugin__s2member_utils_strings::strip_php_tags_deep($paypal); //251226
if(($rec = c_ws_plugin__s2member_utils_strings::fill_cvs($rec, $paypal['custom'])) && ($rec = preg_replace('/%%(?:subscr|txn)_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $rec)))
if(($rec = preg_replace('/%%(?:subscr|txn)_baid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_baid']), $rec)) && ($rec = preg_replace('/%%(?:subscr|txn)_cid%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_cid']), $rec)))
if(($rec = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $rec)) && ($rec = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $rec)))
--- a/s2member/src/includes/classes/paypal-notify-in-web-accept-sp.inc.php
+++ b/s2member/src/includes/classes/paypal-notify-in-web-accept-sp.inc.php
@@ -98,6 +98,7 @@
$rec = preg_replace('/%%sp_access_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($sp_access_url), $GLOBALS['WS_PLUGIN__']['s2member']['o'][(($_REQUEST['s2member_paypal_proxy'] && preg_match('/pro-emails/', $_REQUEST['s2member_paypal_proxy_use'])) ? 'pro_' : '').'sp_email_recipients']);
$rec = preg_replace('/%%sp_access_exp%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(c_ws_plugin__s2member_utils_time::approx_time_difference(time(), strtotime('+'.$paypal['hours'].' hours'))), $rec);
+ $paypal = c_ws_plugin__s2member_utils_strings::strip_php_tags_deep($paypal); //251226
if(($rec = c_ws_plugin__s2member_utils_strings::fill_cvs($rec, $paypal['custom'])) && ($rec = preg_replace('/%%txn_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['txn_id']), $rec)))
if(($rec = preg_replace('/%%amount%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['mc_gross']), $rec))) // Full amount of the payment, before fee is subtracted.
if(($rec = preg_replace('/%%currency%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency']), $rec)) && ($rec = preg_replace('/%%currency_symbol%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($paypal['currency_symbol']), $rec)))
--- a/s2member/src/includes/classes/sc-eots-in.inc.php
+++ b/s2member/src/includes/classes/sc-eots-in.inc.php
@@ -84,6 +84,17 @@
do_action('ws_plugin__s2member_before_sc_eot_details_after_shortcode_atts', get_defined_vars());
unset($__refs, $__v); // Allow variables to be modified by reference.
+ //251223 Sanitize shortcode attributes
+ foreach ($attr as $key => $value) {
+ if (in_array($key, array('user_id', 'offset'), true)) {
+ $attr[$key] = (int) $value;
+ } elseif (in_array($key, array('debug', 'date_format', 'round_to', 'timezone'), true)) {
+ $attr[$key] = sanitize_text_field($value);
+ } elseif (in_array($key, array('future_format', 'past_format', 'next_format', 'empty_format'), true)) {
+ $attr[$key] = wp_kses_post($value);
+ }
+ }
+
// Collect and cache the EOT for this user.
$prefix = 's2m_eot_'; // Transient prefix for this shortcode.
--- a/s2member/src/includes/classes/sc-files-in.inc.php
+++ b/s2member/src/includes/classes/sc-files-in.inc.php
@@ -109,6 +109,33 @@
do_action('ws_plugin__s2member_before_sc_get_stream', get_defined_vars());
unset($__refs, $__v); // Housekeeping.
+ //251225 Validate s2Stream player-related shortcode attributes.
+ $attr = (array) $attr;
+ if (isset($attr['player_primary'])) {
+ $attr['player_primary'] = strtolower(trim($attr['player_primary']));
+ if (!in_array($attr['player_primary'], array('html5', 'flash'), true)) {
+ unset($attr['player_primary']); // fallback to default
+ }
+ }
+ if (isset($attr['player_stretching'])) {
+ $attr['player_stretching'] = strtolower(trim($attr['player_stretching']));
+ if (!in_array($attr['player_stretching'], array('uniform', 'exactfit', 'fill', 'none'), true)) {
+ unset($attr['player_stretching']);
+ }
+ }
+ if (isset($attr['player_startparam'])) {
+ $attr['player_startparam'] = (int) $attr['player_startparam'];
+ }
+ if (isset($attr['player_option_blocks'])) {
+ $value = (string) $attr['player_option_blocks'];
+ if (preg_match('/[<>]/', $value)) {
+ unset($attr['player_option_blocks']);
+ } else {
+ $value = preg_replace('/b(onw+|eval|Function|alert|prompt|confirm)b/i', '', $value);
+ $attr['player_option_blocks'] = trim($value);
+ }
+ }
+
$attr = c_ws_plugin__s2member_utils_strings::trim_qts_deep((array)$attr);
$attr = shortcode_atts(array('download' => '', 'file_download' => '', 'download_key' => '',
--- a/s2member/src/includes/classes/sc-s-badge-in.inc.php
+++ b/s2member/src/includes/classes/sc-s-badge-in.inc.php
@@ -49,6 +49,13 @@
unset($__refs, $__v);
$attr = c_ws_plugin__s2member_utils_strings::trim_qts_deep((array)$attr);
+
+ //251225 Validate attr value.
+ $attr['v'] = (string)(int)$attr['v'];
+ if (!in_array($attr['v'], array('1','2','3'), true)) {
+ $attr['v'] = '1';
+ }
+
$attr = shortcode_atts(array('v' => '1'), $attr); // One attribute.
$code = c_ws_plugin__s2member_utilities::s_badge_gen($attr['v'], FALSE, FALSE);
--- a/s2member/src/vendor/autoload.php
+++ b/s2member/src/vendor/autoload.php
@@ -4,4 +4,4 @@
require_once __DIR__ . '/composer/autoload_real.php';
-return ComposerAutoloaderInitaab217d409fd27724079ade0d0a9733d::getLoader();
+return ComposerAutoloaderInit3025847020b9532a76adee887db24a76::getLoader();
--- a/s2member/src/vendor/composer/autoload_real.php
+++ b/s2member/src/vendor/composer/autoload_real.php
@@ -2,7 +2,7 @@
// autoload_real.php @generated by Composer
-class ComposerAutoloaderInitaab217d409fd27724079ade0d0a9733d
+class ComposerAutoloaderInit3025847020b9532a76adee887db24a76
{
private static $loader;
@@ -22,15 +22,15 @@
return self::$loader;
}
- spl_autoload_register(array('ComposerAutoloaderInitaab217d409fd27724079ade0d0a9733d', 'loadClassLoader'), true, true);
+ spl_autoload_register(array('ComposerAutoloaderInit3025847020b9532a76adee887db24a76', 'loadClassLoader'), true, true);
self::$loader = $loader = new ComposerAutoloadClassLoader();
- spl_autoload_unregister(array('ComposerAutoloaderInitaab217d409fd27724079ade0d0a9733d', 'loadClassLoader'));
+ spl_autoload_unregister(array('ComposerAutoloaderInit3025847020b9532a76adee887db24a76', 'loadClassLoader'));
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
if ($useStaticLoader) {
require_once __DIR__ . '/autoload_static.php';
- call_user_func(ComposerAutoloadComposerStaticInitaab217d409fd27724079ade0d0a9733d::getInitializer($loader));
+ call_user_func(ComposerAutoloadComposerStaticInit3025847020b9532a76adee887db24a76::getInitializer($loader));
} else {
$map = require __DIR__ . '/autoload_namespaces.php';
foreach ($map as $namespace => $path) {
@@ -51,19 +51,19 @@
$loader->register(true);
if ($useStaticLoader) {
- $includeFiles = ComposerAutoloadComposerStaticInitaab217d409fd27724079ade0d0a9733d::$files;
+ $includeFiles = ComposerAutoloadComposerStaticInit3025847020b9532a76adee887db24a76::$files;
} else {
$includeFiles = require __DIR__ . '/autoload_files.php';
}
foreach ($includeFiles as $fileIdentifier => $file) {
- composerRequireaab217d409fd27724079ade0d0a9733d($fileIdentifier, $file);
+ composerRequire3025847020b9532a76adee887db24a76($fileIdentifier, $file);
}
return $loader;
}
}
-function composerRequireaab217d409fd27724079ade0d0a9733d($fileIdentifier, $file)
+function composerRequire3025847020b9532a76adee887db24a76($fileIdentifier, $file)
{
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
require $file;
--- a/s2member/src/vendor/composer/autoload_static.php
+++ b/s2member/src/vendor/composer/autoload_static.php
@@ -4,7 +4,7 @@
namespace ComposerAutoload;
-class ComposerStaticInitaab217d409fd27724079ade0d0a9733d
+class ComposerStaticInit3025847020b9532a76adee887db24a76
{
public static $files = array (
'5255c38a0faeba867671b61dfda6d864' => __DIR__ . '/..' . '/paragonie/random_compat/lib/random.php',
@@ -30,7 +30,7 @@
public static function getInitializer(ClassLoader $loader)
{
return Closure::bind(function () use ($loader) {
- $loader->classMap = ComposerStaticInitaab217d409fd27724079ade0d0a9733d::$classMap;
+ $loader->classMap = ComposerStaticInit3025847020b9532a76adee887db24a76::$classMap;
}, null, ClassLoader::class);
}