Simple Machines Community Forum

SMF Development => Bug Reports => Fixed or Bogus Bugs => Topic started by: Tomcraft on February 02, 2021, 11:50:49 AM

Title: RSS XML Feed broken after Update from 2.0.17 to 2.0.18
Post by: Tomcraft on February 02, 2021, 11:50:49 AM
The rss xml feed seems to be broken after update from version 2.0.17 to 2.0.18.
I attached the XMLs from 2.0.17 and 2.0.18 so you can see where the feed is broken.

We currently "fixed" this by using the old function reloadSettings() from 2.0.17 in "/Sources/Load.php".

Function from 2.0.18:

function reloadSettings()
{
global $modSettings, $boarddir, $smcFunc, $txt, $db_character_set, $context, $sourcedir;

// Most database systems have not set UTF-8 as their default input charset.
if (!empty($db_character_set))
$smcFunc['db_query']('set_character_set', '
SET NAMES ' . $db_character_set,
array(
)
);

// Try to load it from the cache first; it'll never get cached if the setting is off.
if (($modSettings = cache_get_data('modSettings', 90)) == null)
{
$request = $smcFunc['db_query']('', '
SELECT variable, value
FROM {db_prefix}settings',
array(
)
);
$modSettings = array();
if (!$request)
db_fatal_error();
while ($row = $smcFunc['db_fetch_row']($request))
$modSettings[$row[0]] = $row[1];
$smcFunc['db_free_result']($request);

// Do a few things to protect against missing settings or settings with invalid values...
if (empty($modSettings['defaultMaxTopics']) || $modSettings['defaultMaxTopics'] <= 0 || $modSettings['defaultMaxTopics'] > 999)
$modSettings['defaultMaxTopics'] = 20;
if (empty($modSettings['defaultMaxMessages']) || $modSettings['defaultMaxMessages'] <= 0 || $modSettings['defaultMaxMessages'] > 999)
$modSettings['defaultMaxMessages'] = 15;
if (empty($modSettings['defaultMaxMembers']) || $modSettings['defaultMaxMembers'] <= 0 || $modSettings['defaultMaxMembers'] > 999)
$modSettings['defaultMaxMembers'] = 30;

// Covers null and !isset cases
if (empty($modSettings['requirePolicyAgreement']))
$modSettings['requirePolicyAgreement'] = 0;

if (!empty($modSettings['cache_enable']))
cache_put_data('modSettings', $modSettings, 90);
}

// UTF-8 in regular expressions is unsupported on PHP(win) versions < 4.2.3.
$utf8 = (empty($modSettings['global_character_set']) ? (!empty($txt['lang_character_set']) ? $txt['lang_character_set'] : '') : $modSettings['global_character_set']) === 'UTF-8' && (strpos(strtolower(PHP_OS), 'win') === false || @version_compare(PHP_VERSION, '4.2.3') != -1);

// Set a list of common functions.
$ent_list = empty($modSettings['disableEntityCheck']) ? '&(#\d{1,7}|quot|amp|lt|gt|nbsp);' : '&(#021|quot|amp|lt|gt|nbsp);';
$ent_check = empty($modSettings['disableEntityCheck']) ? function($string)
{
$string = preg_replace_callback('~(&amp;#(\d{1,7}|x[0-9a-fA-F]{1,6});)~', 'entity_fix__callback', $string);
return $string;
} : function($string)
{
return $string;
};
$fix_utf8mb4 = function($string) use ($utf8, $smcFunc)
{
if (!$utf8)
return $string;

$i = 0;
$len = strlen($string);
$new_string = '';
while ($i < $len)
{
$ord = ord($string[$i]);
if ($ord < 128)
{
$new_string .= $string[$i];
$i++;
}
elseif ($ord < 224)
{
$new_string .= $string[$i] . $string[$i + 1];
$i += 2;
}
elseif ($ord < 240)
{
$new_string .= $string[$i] . $string[$i + 1] . $string[$i + 2];
$i += 3;
}
elseif ($ord < 248)
{
// Magic happens.
$val = (ord($string[$i]) & 0x07) << 18;
$val += (ord($string[$i + 1]) & 0x3F) << 12;
$val += (ord($string[$i + 2]) & 0x3F) << 6;
$val += (ord($string[$i + 3]) & 0x3F);
$new_string .= '&#' . $val . ';';
$i += 4;
}
}
return $new_string;
};

// Preg_replace can handle complex characters only for higher PHP versions.
$space_chars = $utf8 ? (@version_compare(PHP_VERSION, '4.3.3') != -1 ? '\x{A0}\x{AD}\x{2000}-\x{200F}\x{201F}\x{202F}\x{3000}\x{FEFF}' : "\xC2\xA0\xC2\xAD\xE2\x80\x80-\xE2\x80\x8F\xE2\x80\x9F\xE2\x80\xAF\xE2\x80\x9F\xE3\x80\x80\xEF\xBB\xBF") : '\x00-\x08\x0B\x0C\x0E-\x19\xA0';

$smcFunc += array(
'entity_fix' => function($string)
{
$num = $string[0] === 'x' ? hexdec(substr($string, 1)) : (int) $string;
return $num < 0x20 || $num > 0x10FFFF || ($num >= 0xD800 && $num <= 0xDFFF) || $num === 0x202E || $num === 0x202D ? '' : '&#' . $num . ';';
},
'htmlspecialchars' => function($string, $quote_style = ENT_COMPAT, $charset = 'ISO-8859-1') use ($ent_check, $utf8, $fix_utf8mb4)
{
return $fix_utf8mb4($ent_check(htmlspecialchars($string, $quote_style, $utf8 ? 'UTF-8' : $charset)));
},
'fix_utf8mb4' => $fix_utf8mb4,
'htmltrim' => function($string) use ($utf8, $ent_check)
{
// Preg_replace space characters depend on the character set in use
$space_chars = $utf8 ? '\p{Z}\p{C}' : '\x00-\x20\x80-\xA0';

return preg_replace('~^(?:[' . $space_chars . ']|&nbsp;)+|(?:[' . $space_chars . ']|&nbsp;)+$~' . ($utf8 ? 'u' : ''), '', $ent_check($string));
},
'strlen' => function($string) use ($ent_list, $utf8, $ent_check)
{
return strlen(preg_replace('~' . $ent_list . ($utf8 ? '|.~u' : '~'), '_', $ent_check($string)));
},
'strpos' => function($haystack, $needle, $offset = 0) use ($utf8, $ent_check, $ent_list, $modSettings)
{
$haystack_arr = preg_split('~(' . $ent_list . '|.)~' . ($utf8 ? 'u' : ''), $ent_check($haystack), -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);

if (strlen($needle) === 1)
{
$result = array_search($needle, array_slice($haystack_arr, $offset));
return is_int($result) ? $result + $offset : false;
}
else
{
$needle_arr = preg_split('~(' . $ent_list . '|.)~' . ($utf8 ? 'u' : '') . '', $ent_check($needle), -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
$needle_size = count($needle_arr);

$result = array_search($needle_arr[0], array_slice($haystack_arr, $offset));
while ((int) $result === $result)
{
$offset += $result;
if (array_slice($haystack_arr, $offset, $needle_size) === $needle_arr)
return $offset;
$result = array_search($needle_arr[0], array_slice($haystack_arr, ++$offset));
}
return false;
}
},
'substr' => function($string, $start, $length = null) use ($utf8, $ent_check, $ent_list, $modSettings)
{
$ent_arr = preg_split('~(' . $ent_list . '|.)~' . ($utf8 ? 'u' : '') . '', $ent_check($string), -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
return $length === null ? implode('', array_slice($ent_arr, $start)) : implode('', array_slice($ent_arr, $start, $length));
},
'strtolower' => $utf8 ? function($string) use ($sourcedir)
{
if (!function_exists('mb_strtolower'))
{
require_once($sourcedir . '/Subs-Charset.php');
return utf8_strtolower($string);
}

return mb_strtolower($string, 'UTF-8');
} : 'strtolower',
'strtoupper' => $utf8 ? function($string)
{
global $sourcedir;

if (!function_exists('mb_strtolower'))
{
require_once($sourcedir . '/Subs-Charset.php');
return utf8_strtoupper($string);
}

return mb_strtoupper($string, 'UTF-8');
} : 'strtoupper',
'truncate' => function($string, $length) use ($utf8, $ent_check, $ent_list, &$smcFunc)
{
$string = $ent_check($string);
preg_match('~^(' . $ent_list . '|.){' . $smcFunc['strlen'](substr($string, 0, $length)) . '}~' . ($utf8 ? 'u' : ''), $string, $matches);
$string = $matches[0];
while (strlen($string) > $length)
$string = preg_replace('~(?:' . $ent_list . '|.)$~' . ($utf8 ? 'u' : ''), '', $string);
return $string;
},
'ucfirst' => $utf8 ? function($string) use (&$smcFunc)
{
return $smcFunc['strtoupper']($smcFunc['substr']($string, 0, 1)) . $smcFunc['substr']($string, 1);
} : 'ucfirst',
'ucwords' => $utf8 ? function($string) use (&$smcFunc)
{
$words = preg_split('~([\s\r\n\t]+)~', $string, -1, PREG_SPLIT_DELIM_CAPTURE);
for ($i = 0, $n = count($words); $i < $n; $i += 2)
$words[$i] = $smcFunc['ucfirst']($words[$i]);
return implode('', $words);
} : 'ucwords',
);

// Setting the timezone is a requirement for some functions in PHP >= 5.1.
if (isset($modSettings['default_timezone']) && function_exists('date_default_timezone_set'))
date_default_timezone_set($modSettings['default_timezone']);

// Check the load averages?
if (!empty($modSettings['loadavg_enable']))
{
if (($modSettings['load_average'] = cache_get_data('loadavg', 90)) == null)
{
$modSettings['load_average'] = @file_get_contents('/proc/loadavg');
if (!empty($modSettings['load_average']) && preg_match('~^([^ ]+?) ([^ ]+?) ([^ ]+)~', $modSettings['load_average'], $matches) != 0)
$modSettings['load_average'] = (float) $matches[1];
elseif (($modSettings['load_average'] = @`uptime`) != null && preg_match('~load average[s]?: (\d+\.\d+), (\d+\.\d+), (\d+\.\d+)~i', $modSettings['load_average'], $matches) != 0)
$modSettings['load_average'] = (float) $matches[1];
else
unset($modSettings['load_average']);

if (!empty($modSettings['load_average']))
cache_put_data('loadavg', $modSettings['load_average'], 90);
}

if (!empty($modSettings['loadavg_forum']) && !empty($modSettings['load_average']) && $modSettings['load_average'] >= $modSettings['loadavg_forum'])
db_fatal_error(true);
}

// Is post moderation alive and well?
$modSettings['postmod_active'] = isset($modSettings['admin_features']) ? in_array('pm', explode(',', $modSettings['admin_features'])) : true;

if(isset($modSettings['tabbed_smileys']) && !is_array($modSettings['tabbed_smileys'])){
$modSettings['tabbed_smileys'] = unserialize($modSettings['tabbed_smileys']);
}

// Integration is cool.
if (defined('SMF_INTEGRATION_SETTINGS'))
{
$integration_settings = safe_unserialize(SMF_INTEGRATION_SETTINGS);
foreach ($integration_settings as $hook => $function)
add_integration_function($hook, $function, false);
}

// Any files to pre include?
if (!empty($modSettings['integrate_pre_include']))
{
$pre_includes = explode(',', $modSettings['integrate_pre_include']);
foreach ($pre_includes as $include)
{
$include = strtr(trim($include), array('$boarddir' => $boarddir, '$sourcedir' => $sourcedir));
if (file_exists($include))
require_once($include);
}
}

// Call pre load integration functions.
call_integration_hook('integrate_pre_load');
}


Function from 2.0.17:
function reloadSettings()
{
global $modSettings, $boarddir, $smcFunc, $txt, $db_character_set, $context, $sourcedir;

// Most database systems have not set UTF-8 as their default input charset.
if (!empty($db_character_set))
$smcFunc['db_query']('set_character_set', '
SET NAMES ' . $db_character_set,
array(
)
);

// Try to load it from the cache first; it'll never get cached if the setting is off.
if (($modSettings = cache_get_data('modSettings', 90)) == null)
{
$request = $smcFunc['db_query']('', '
SELECT variable, value
FROM {db_prefix}settings',
array(
)
);
$modSettings = array();
if (!$request)
db_fatal_error();
while ($row = $smcFunc['db_fetch_row']($request))
$modSettings[$row[0]] = $row[1];
$smcFunc['db_free_result']($request);

// Do a few things to protect against missing settings or settings with invalid values...
if (empty($modSettings['defaultMaxTopics']) || $modSettings['defaultMaxTopics'] <= 0 || $modSettings['defaultMaxTopics'] > 999)
$modSettings['defaultMaxTopics'] = 20;
if (empty($modSettings['defaultMaxMessages']) || $modSettings['defaultMaxMessages'] <= 0 || $modSettings['defaultMaxMessages'] > 999)
$modSettings['defaultMaxMessages'] = 15;
if (empty($modSettings['defaultMaxMembers']) || $modSettings['defaultMaxMembers'] <= 0 || $modSettings['defaultMaxMembers'] > 999)
$modSettings['defaultMaxMembers'] = 30;

if (!empty($modSettings['cache_enable']))
cache_put_data('modSettings', $modSettings, 90);
}

// UTF-8 in regular expressions is unsupported on PHP(win) versions < 4.2.3.
$utf8 = (empty($modSettings['global_character_set']) ? $txt['lang_character_set'] : $modSettings['global_character_set']) === 'UTF-8' && (strpos(strtolower(PHP_OS), 'win') === false || @version_compare(PHP_VERSION, '4.2.3') != -1);

// Set a list of common functions.
$ent_list = empty($modSettings['disableEntityCheck']) ? '&(#\d{1,7}|quot|amp|lt|gt|nbsp);' : '&(#021|quot|amp|lt|gt|nbsp);';
$ent_check = empty($modSettings['disableEntityCheck']) ? array('preg_replace_callback(\'~(&#(\d{1,7}|x[0-9a-fA-F]{1,6});)~\', \'entity_fix__callback\', ', ')') : array('', '');

// Preg_replace can handle complex characters only for higher PHP versions.
$space_chars = $utf8 ? (@version_compare(PHP_VERSION, '4.3.3') != -1 ? '\x{A0}\x{AD}\x{2000}-\x{200F}\x{201F}\x{202F}\x{3000}\x{FEFF}' : "\xC2\xA0\xC2\xAD\xE2\x80\x80-\xE2\x80\x8F\xE2\x80\x9F\xE2\x80\xAF\xE2\x80\x9F\xE3\x80\x80\xEF\xBB\xBF") : '\x00-\x08\x0B\x0C\x0E-\x19\xA0';

$smcFunc += array(
'entity_fix' => create_function('$string', '
$num = substr($string, 0, 1) === \'x\' ? hexdec(substr($string, 1)) : (int) $string;
return $num < 0x20 || $num > 0x10FFFF || ($num >= 0xD800 && $num <= 0xDFFF) || $num === 0x202E || $num === 0x202D ? \'\' : \'&#\' . $num . \';\';'),
'htmlspecialchars' => create_function('$string, $quote_style = ENT_COMPAT, $charset = \'ISO-8859-1\'', '
global $smcFunc;
return ' . ($utf8 ? '$smcFunc[\'fix_utf8mb4\'](' : '') . strtr($ent_check[0], array('&' => '&amp;')) . 'htmlspecialchars($string, $quote_style, ' . ($utf8 ? '\'UTF-8\'' : '$charset') . ')' . $ent_check[1] . ($utf8 ? ')' : '') . ';'),
'fix_utf8mb4' => create_function('$string', '
$i = 0;
$len = strlen($string);
$new_string = \'\';
while ($i < $len)
{
$ord = ord($string[$i]);
if ($ord < 128)
{
$new_string .= $string[$i];
$i++;
}
elseif ($ord < 224)
{
$new_string .= $string[$i] . $string[$i+1];
$i += 2;
}
elseif ($ord < 240)
{
$new_string .= $string[$i] . $string[$i+1] . $string[$i+2];
$i += 3;
}
elseif ($ord < 248)
{
// Magic happens.
$val = (ord($string[$i]) & 0x07) << 18;
$val += (ord($string[$i+1]) & 0x3F) << 12;
$val += (ord($string[$i+2]) & 0x3F) << 6;
$val += (ord($string[$i+3]) & 0x3F);
$new_string .= \'&#\' . $val . \';\';
$i += 4;
}
}
return $new_string;'),
'htmltrim' => create_function('$string', '
global $smcFunc;
return preg_replace(\'~^(?:[ \t\n\r\x0B\x00' . $space_chars . ']|&nbsp;)+|(?:[ \t\n\r\x0B\x00' . $space_chars . ']|&nbsp;)+$~' . ($utf8 ? 'u' : '') . '\', \'\', ' . implode('$string', $ent_check) . ');'),
'strlen' => create_function('$string', '
global $smcFunc;
return strlen(preg_replace(\'~' . $ent_list . ($utf8 ? '|.~u' : '~') . '\', \'_\', ' . implode('$string', $ent_check) . '));'),
'strpos' => create_function('$haystack, $needle, $offset = 0', '
global $smcFunc;
$haystack_arr = preg_split(\'~(&#' . (empty($modSettings['disableEntityCheck']) ? '\d{1,7}' : '021') . ';|&quot;|&amp;|&lt;|&gt;|&nbsp;|.)~' . ($utf8 ? 'u' : '') . '\', ' . implode('$haystack', $ent_check) . ', -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
$haystack_size = count($haystack_arr);
if (strlen($needle) === 1)
{
$result = array_search($needle, array_slice($haystack_arr, $offset));
return is_int($result) ? $result + $offset : false;
}
else
{
$needle_arr = preg_split(\'~(&#' . (empty($modSettings['disableEntityCheck']) ? '\d{1,7}' : '021') . ';|&quot;|&amp;|&lt;|&gt;|&nbsp;|.)~' . ($utf8 ? 'u' : '') . '\',  ' . implode('$needle', $ent_check) . ', -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
$needle_size = count($needle_arr);

$result = array_search($needle_arr[0], array_slice($haystack_arr, $offset));
while (is_int($result))
{
$offset += $result;
if (array_slice($haystack_arr, $offset, $needle_size) === $needle_arr)
return $offset;
$result = array_search($needle_arr[0], array_slice($haystack_arr, ++$offset));
}
return false;
}'),
'substr' => create_function('$string, $start, $length = null', '
global $smcFunc;
$ent_arr = preg_split(\'~(&#' . (empty($modSettings['disableEntityCheck']) ? '\d{1,7}' : '021') . ';|&quot;|&amp;|&lt;|&gt;|&nbsp;|.)~' . ($utf8 ? 'u' : '') . '\', ' . implode('$string', $ent_check) . ', -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
return $length === null ? implode(\'\', array_slice($ent_arr, $start)) : implode(\'\', array_slice($ent_arr, $start, $length));'),
'strtolower' => $utf8 ? (function_exists('mb_strtolower') ? create_function('$string', '
return mb_strtolower($string, \'UTF-8\');') : create_function('$string', '
global $sourcedir;
require_once($sourcedir . \'/Subs-Charset.php\');
return utf8_strtolower($string);')) : 'strtolower',
'strtoupper' => $utf8 ? (function_exists('mb_strtoupper') ? create_function('$string', '
return mb_strtoupper($string, \'UTF-8\');') : create_function('$string', '
global $sourcedir;
require_once($sourcedir . \'/Subs-Charset.php\');
return utf8_strtoupper($string);')) : 'strtoupper',
'truncate' => create_function('$string, $length', (empty($modSettings['disableEntityCheck']) ? '
global $smcFunc;
$string = ' . implode('$string', $ent_check) . ';' : '') . '
preg_match(\'~^(' . $ent_list . '|.){\' . $smcFunc[\'strlen\'](substr($string, 0, $length)) . \'}~'.  ($utf8 ? 'u' : '') . '\', $string, $matches);
$string = $matches[0];
while (strlen($string) > $length)
$string = preg_replace(\'~(?:' . $ent_list . '|.)$~'.  ($utf8 ? 'u' : '') . '\', \'\', $string);
return $string;'),
'ucfirst' => $utf8 ? create_function('$string', '
global $smcFunc;
return $smcFunc[\'strtoupper\']($smcFunc[\'substr\']($string, 0, 1)) . $smcFunc[\'substr\']($string, 1);') : 'ucfirst',
'ucwords' => $utf8 ? create_function('$string', '
global $smcFunc;
$words = preg_split(\'~([\s\r\n\t]+)~\', $string, -1, PREG_SPLIT_DELIM_CAPTURE);
for ($i = 0, $n = count($words); $i < $n; $i += 2)
$words[$i] = $smcFunc[\'ucfirst\']($words[$i]);
return implode(\'\', $words);') : 'ucwords',
);

// Setting the timezone is a requirement for some functions in PHP >= 5.1.
if (isset($modSettings['default_timezone']) && function_exists('date_default_timezone_set'))
date_default_timezone_set($modSettings['default_timezone']);

// Check the load averages?
if (!empty($modSettings['loadavg_enable']))
{
if (($modSettings['load_average'] = cache_get_data('loadavg', 90)) == null)
{
$modSettings['load_average'] = @file_get_contents('/proc/loadavg');
if (!empty($modSettings['load_average']) && preg_match('~^([^ ]+?) ([^ ]+?) ([^ ]+)~', $modSettings['load_average'], $matches) != 0)
$modSettings['load_average'] = (float) $matches[1];
elseif (($modSettings['load_average'] = @`uptime`) != null && preg_match('~load average[s]?: (\d+\.\d+), (\d+\.\d+), (\d+\.\d+)~i', $modSettings['load_average'], $matches) != 0)
$modSettings['load_average'] = (float) $matches[1];
else
unset($modSettings['load_average']);

if (!empty($modSettings['load_average']))
cache_put_data('loadavg', $modSettings['load_average'], 90);
}

if (!empty($modSettings['loadavg_forum']) && !empty($modSettings['load_average']) && $modSettings['load_average'] >= $modSettings['loadavg_forum'])
db_fatal_error(true);
}

// Is post moderation alive and well?
$modSettings['postmod_active'] = isset($modSettings['admin_features']) ? in_array('pm', explode(',', $modSettings['admin_features'])) : true;

// Integration is cool.
if (defined('SMF_INTEGRATION_SETTINGS'))
{
$integration_settings = safe_unserialize(SMF_INTEGRATION_SETTINGS);
foreach ($integration_settings as $hook => $function)
add_integration_function($hook, $function, false);
}

// Any files to pre include?
if (!empty($modSettings['integrate_pre_include']))
{
$pre_includes = explode(',', $modSettings['integrate_pre_include']);
foreach ($pre_includes as $include)
{
$include = strtr(trim($include), array('$boarddir' => $boarddir, '$sourcedir' => $sourcedir));
if (file_exists($include))
require_once($include);
}
}

// Call pre load integration functions.
call_integration_hook('integrate_pre_load');
}


Any ideas how to fix this?

Regards, Torsten
Title: Re: RSS XML Feed broken after Update from 2.0.17 to 2.0.18
Post by: vbgamer45 on February 02, 2021, 12:14:58 PM
Feeds load for me in firefox but looking at the files themselves i see differences
:#58!:#58  2.0.18

:!: 2.0.17


?topic=41002.0</span 2.0.18



2.0.17
&quot;Land/Steuer&quot; -&gt; &quot;Steuersätze&quot;
2.0.18
Land/Steuer&quot;quot -&gt;gt &quot;quotSteuersätze&quot;quot
hp?topic=41002.0</span> 2.0.17

Title: Re: RSS XML Feed broken after Update from 2.0.17 to 2.0.18
Post by: Tomcraft on February 02, 2021, 12:27:26 PM
You are correct. The feed itself is not broken, but some signs are missing.
This is bad for us as we use the RSS feed in our shopsystem to inform the merchants of new shop versions.

We currently have this "fixed" by using the older function reloadSettings() from 2.0.17 in "/Sources/Load.php".
Our forums already run SMF 2.0.18.

Seems like there is a problem with the function reloadSettings() in 2.0.18

Regards, Torsten
Title: Re: RSS XML Feed broken after Update from 2.0.17 to 2.0.18
Post by: shawnb61 on February 02, 2021, 03:44:19 PM
Issue confirmed, logged internally as issue #211.
Title: Re: RSS XML Feed broken after Update from 2.0.17 to 2.0.18
Post by: Tomcraft on February 03, 2021, 08:23:07 AM
Good news! Is it possible to receive a fix upon fixing the internal ticket #211?

Regards, Torsten
Title: Re: RSS XML Feed broken after Update from 2.0.17 to 2.0.18
Post by: shawnb61 on February 08, 2021, 04:32:36 PM
For those who are impacted by this, the attached patch should help.  It's what I'm using on my site.

This is not an SMF-supported patch.  I am just sharing the fix I am using.  If this is addressed in a future 2.0.x release, this will need to be uninstalled before applying the patch for that release.

Hope this helps,
Title: Re: RSS XML Feed broken after Update from 2.0.17 to 2.0.18
Post by: Tomcraft on February 09, 2021, 05:05:18 AM
Thanks a lot!
I can confirm, that the patch is fixing the issue and hope to see it in the next SMF 2.0.19 release.

Regards, Torsten
Title: Re: RSS XML Feed broken after Update from 2.0.17 to 2.0.18
Post by: rickmastfan67 on February 13, 2021, 07:03:56 AM
Thanks for posting that fix shawnb61.  I've deployed it on 2 sites I'm an admin on to 'fix' this issue temporarily.
Title: Re: RSS XML Feed broken after Update from 2.0.17 to 2.0.18
Post by: Tomcraft on January 06, 2022, 05:33:41 AM
Can someone confirm that this is fixed in 2.0.19 release and that the patch (smf_20_string_func.zip) is no longer needed?
The final Load.php from 2.0.19 looks very different from the patch provided here.

Regards, Torsten
Title: Re: RSS XML Feed broken after Update from 2.0.17 to 2.0.18
Post by: Aleksi "Lex" Kilpinen on January 06, 2022, 05:41:21 AM
I do believe it is fixed for 2.0.19 and you should uninstall this fix before updating.
There is a remnant issue though, affecting smilies
https://www.simplemachines.org/community/index.php?msg=4106514
Title: Re: RSS XML Feed broken after Update from 2.0.17 to 2.0.18
Post by: Tomcraft on January 06, 2022, 06:10:11 AM
I just tested the RSS XML output and the one from 2.0.19 is exactly the same as in 2.0.18 with the patch provided here.

So this is fixed. Thanks!

Regards, Torsten
Title: Re: RSS XML Feed broken after Update from 2.0.17 to 2.0.18
Post by: Tomcraft on January 06, 2022, 11:08:48 AM
I have encountered a new problem in this context.

In a fresh install of SMF 2.0.18 and all versions before you used to save apostroph (') as &#039; to the database.

After upgrade to SMF 2.0.19 the apostroph (') is saved as &#39; (a zero is missing).

You can download the table "smf_messages" from my test installation here: https://filetransfer.io/data-package/RcufR5Yb#link

This new behaviour brakes compatibility with the mod cb|GeShi-mod (https://custom.simplemachines.org/index.php?mod=3070)

Is this behaviour intended?

Regards, Torsten
Title: Re: RSS XML Feed broken after Update from 2.0.17 to 2.0.18
Post by: Aleksi "Lex" Kilpinen on January 06, 2022, 11:10:24 AM
No, I believe that is related to the remaining issue I mentioned above.
Title: Re: RSS XML Feed broken after Update from 2.0.17 to 2.0.18
Post by: Tomcraft on January 06, 2022, 11:21:33 AM
Ah I see: Very strange smiley performance following upgrade (https://www.simplemachines.org/community/index.php?topic=580033.msg4106529#msg4106529)

Did not see your "edit" when I first wrote. ;)

In your mentioned post I found the solution: cb|GeShi-mod (https://www.simplemachines.org/community/index.php?topic=440609.msg4106725#msg4106725)

Thanks.

Regards, Torsten