Skip to content

Commit

Permalink
fix: Fixes incorrect order of array_replace_recursive arguments & oth…
Browse files Browse the repository at this point in the history
…er issues

* Fixes #433
* Fixes #432
* Fixes #431
* Further clean-up & standardization between object-cache.php & wp-redis.php.
* Fixes incorrect order of array_replace_recursive arguments.
* Addresses issue with port still not being null for socket connections due to defaults array_repalce_recursive use.
  • Loading branch information
timnolte committed Jun 21, 2023
1 parent bf8e124 commit 26e9d03
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 12 deletions.
12 changes: 7 additions & 5 deletions object-cache.php
Original file line number Diff line number Diff line change
Expand Up @@ -1247,10 +1247,11 @@ public function build_client_parameters( $redis_server ) {
// Attempt to automatically load Pantheon's Redis config from the env.
if ( isset( $_SERVER['CACHE_HOST'] ) ) {
$redis_server = [
'host' => wp_strip_all_tags( $_SERVER['CACHE_HOST'] ),
'port' => isset( $_SERVER['CACHE_PORT'] ) ? wp_strip_all_tags( $_SERVER['CACHE_PORT'] ) : $port,
'auth' => isset( $_SERVER['CACHE_PASSWORD'] ) ? wp_strip_all_tags( $_SERVER['CACHE_PASSWORD'] ) : null,
'database' => isset( $_SERVER['CACHE_DB'] ) ? wp_strip_all_tags( $_SERVER['CACHE_DB'] ) : $database,
'host' => strip_tags( $_SERVER['CACHE_HOST'] ),
'port' => ! empty( $_SERVER['CACHE_PORT'] ) ? strip_tags( $_SERVER['CACHE_PORT'] ) : $port,
// Don't attempt to sanitize passwords as this can break authentication.
'auth' => ! empty( $_SERVER['CACHE_PASSWORD'] ) ? $_SERVER['CACHE_PASSWORD'] : null,
'database' => ! empty( $_SERVER['CACHE_DB'] ) ? strip_tags( $_SERVER['CACHE_DB'] ) : $database,
];
} else {
$redis_server = [
Expand All @@ -1263,6 +1264,7 @@ public function build_client_parameters( $redis_server ) {

if ( file_exists( $redis_server['host'] ) && 'socket' === filetype( $redis_server['host'] ) ) { // unix socket connection.
// port must be null or socket won't connect.
unset( $redis_server['port'] );
$port = null;
}

Expand All @@ -1275,7 +1277,7 @@ public function build_client_parameters( $redis_server ) {
// 1s timeout, 100ms delay between reconnections.

// merging the defaults with the original $redis_server enables any custom parameters to get sent downstream to the redis client.
return array_replace_recursive( $redis_server, $defaults );
return array_replace_recursive( $defaults, $redis_server );
}

/**
Expand Down
19 changes: 12 additions & 7 deletions wp-redis.php
Original file line number Diff line number Diff line change
Expand Up @@ -35,21 +35,26 @@
*/
function wp_redis_get_info() {
global $wp_object_cache, $redis_server;
// Default Redis port.
$port = 6379;
// Default Redis database number.
$database = 0;

if ( empty( $redis_server ) ) {
// Attempt to automatically load Pantheon's Redis config from the env.
if ( isset( $_SERVER['CACHE_HOST'] ) ) {
$redis_server = [
'host' => sanitize_text_field( $_SERVER['CACHE_HOST'] ),
'port' => isset( $_SERVER['CACHE_PORT'] ) ? sanitize_text_field( $_SERVER['CACHE_PORT'] ) : 6379,
'auth' => isset( $_SERVER['CACHE_PASSWORD'] ) ? sanitize_text_field( $_SERVER['CACHE_PASSWORD'] ) : null,
'database' => isset( $_SERVER['CACHE_DB'] ) ? sanitize_text_field( $_SERVER['CACHE_DB'] ) : 0,
'host' => strip_tags( $_SERVER['CACHE_HOST'] ),
'port' => ! empty( $_SERVER['CACHE_PORT'] ) ? strip_tags( $_SERVER['CACHE_PORT'] ) : $port,
// Don't attempt to sanitize passwords as this can break authentication.
'auth' => ! empty( $_SERVER['CACHE_PASSWORD'] ) ? $_SERVER['CACHE_PASSWORD'] : null,
'database' => ! empty( $_SERVER['CACHE_DB'] ) ? strip_tags( $_SERVER['CACHE_DB'] ) : $database,
];
} else {
$redis_server = [
'host' => '127.0.0.1',
'port' => 6379,
'database' => 0,
'port' => $port,
'database' => $database,
];
}
}
Expand All @@ -73,7 +78,7 @@ function wp_redis_get_info() {
} else {
$uptime_in_days .= ' days';
}
$database = ! empty( $redis_server['database'] ) ? $redis_server['database'] : 0;
$database = ! empty( $redis_server['database'] ) ? $redis_server['database'] : $database;
$key_count = 0;
if ( isset( $info[ 'db' . $database ] ) && preg_match( '#keys=([\d]+)#', $info[ 'db' . $database ], $matches ) ) {
$key_count = $matches[1];
Expand Down

0 comments on commit 26e9d03

Please sign in to comment.