Index: wp-includes/canonical.php
===================================================================
--- wp-includes/canonical.php	(revision 8667)
+++ wp-includes/canonical.php	(working copy)
@@ -157,7 +157,7 @@
 	$redirect['path'] = preg_replace( '#(%20| )+$#', '', $redirect['path'] );
 
 	// Remove trailing slashes from certain terminating query string args
-	$redirect['query'] = preg_replace( '#((p|page_id|cat|tag)=[^&]*?)(%20| )+$#', '$1', $redirect['query'] );
+	$redirect['query'] = isset($redirect['query']) ? preg_replace( '#((p|page_id|cat|tag)=[^&]*?)(%20| )+$#', '$1', $redirect['query'] ) : '';
 
 	// Clean up empty query strings
 	$redirect['query'] = preg_replace( '#&?(p|page_id|cat|tag)=?$#', '', $redirect['query'] );
@@ -206,7 +206,7 @@
 	if ( isset( $redirect['port'] ) )
 		$compare_redirect[] = $redirect['port'];
 
-	if ( isset( $redirect['query'] ) )
+	if ( ! empty( $redirect['query'] ) )
 		$compare_redirect[] = $redirect['query'];
 
 	if ( $compare_original !== $compare_redirect ) {
@@ -214,7 +214,7 @@
 		if ( isset($redirect['port']) )
 		 	$redirect_url .= ':' . $redirect['port'];
 		$redirect_url .= $redirect['path'];
-		if ( $redirect['query'] )
+		if ( ! empty($redirect['query']) )
 			$redirect_url .= '?' . $redirect['query'];
 	}
 