Index: wp-includes/canonical.php
===================================================================
--- wp-includes/canonical.php	(revision 24174)
+++ wp-includes/canonical.php	(working copy)
@@ -101,6 +101,15 @@
 			}
 		}
 
+		if ( get_query_var( 'day' ) && get_query_var( 'monthnum' ) && get_query_var( 'year' ) 
+			&& ! checkdate( get_query_var( 'monthnum' ), get_query_var( 'day' ), get_query_var( 'year' ) ) ) {
+			$redirect_url = get_month_link( get_query_var( 'year' ), get_query_var( 'monthnum' ) );
+			$redirect['query'] = _remove_qs_args_if_not_in_url( $redirect['query'], array( 'year', 'monthnum', 'day' ), $redirect_url );
+		} elseif ( get_query_var( 'monthnum' ) && get_query_var( 'year' ) && 12 < get_query_var( 'monthnum' ) ) {
+			$redirect_url = get_year_link( get_query_var( 'year' ) );
+			$redirect['query'] = _remove_qs_args_if_not_in_url( $redirect['query'], array( 'year', 'monthnum' ), $redirect_url );
+		}
+
 		if ( ! $redirect_url ) {
 			if ( $redirect_url = redirect_guess_404_permalink() ) {
 				$redirect['query'] = _remove_qs_args_if_not_in_url( $redirect['query'], array( 'page', 'feed', 'p', 'page_id', 'attachment_id', 'pagename', 'name', 'post_type' ), $redirect_url );
Index: wp-includes/query.php
===================================================================
--- wp-includes/query.php	(revision 24174)
+++ wp-includes/query.php	(working copy)
@@ -1501,15 +1501,23 @@
 
 			if ( $qv['day'] ) {
 				if ( ! $this->is_date ) {
-					$this->is_day = true;
-					$this->is_date = true;
+					if ( $qv['monthnum'] && $qv['year'] && ! checkdate( $qv['monthnum'], $qv['day'], $qv['year'] ) ) {
+						$qv['error'] = '404';
+					} else {
+						$this->is_day = true;
+						$this->is_date = true;
+					}
 				}
 			}
 
 			if ( $qv['monthnum'] ) {
 				if ( ! $this->is_date ) {
-					$this->is_month = true;
-					$this->is_date = true;
+					if ( 12 < $qv['monthnum'] ) {
+						$qv['error'] = '404';
+					} else {
+						$this->is_month = true;
+						$this->is_date = true;
+					}
 				}
 			}
 
