| @@ -184,9 +184,10 @@ | ||
| 184 | 184 | |
| 185 | 185 | for ($i = 1, $e = ''; $i <= strlen($string); ++$i) { |
| 186 | 186 | $char = substr($string, $i - 1, 1); |
| 187 | 187 | $keychar = substr($key, ($i % strlen($key)) - 1, 1); |
| 188 | - $e .= chr(ord($char) + ord($keychar)); | |
| 188 | + //260830.2134 PHP 8.5 deprecates chr() values outside 0..255; mask explicitly to preserve chr()'s historical byte-wrap behavior. | |
| 189 | + $e .= chr((ord($char) + ord($keychar)) & 0xFF); | |
| 189 | 190 | } |
| 190 | 191 | $e = isset($e[0]) ? '~xe'.($w_md5_cs ? ':'.md5($e) : '').'|'.$e : ''; |
| 191 | 192 | return $base64 = isset($e[0]) ? ($base64 = c_ws_plugin__s2member_utils_strings::base64_url_safe_encode($e)) : ''; |
| 192 | 193 | } |
| @@ -215,9 +216,10 @@ | ||
| 215 | 216 | if (isset($md5_e[2][0]) && (empty($md5_e[1]) || $md5_e[1] === md5($md5_e[2]))) { |
| 216 | 217 | for ($i = 1, $d = ''; $i <= strlen($md5_e[2]); ++$i) { |
| 217 | 218 | $char = substr($md5_e[2], $i - 1, 1); |
| 218 | 219 | $keychar = substr($key, ($i % strlen($key)) - 1, 1); |
| 219 | - $d .= chr(ord($char) - ord($keychar)); | |
| 220 | + //260830.2134 PHP 8.5 deprecates chr() values outside 0..255; mask explicitly to preserve chr()'s historical byte-wrap behavior. | |
| 221 | + $d .= chr((ord($char) - ord($keychar)) & 0xFF); | |
| 220 | 222 | } // Reverse XOR encryption. |
| 221 | 223 | } // Else the checksum was not a match. |
| 222 | 224 | |
| 223 | 225 | if (!isset($d)) { // Failed above? |