Index: wp-includes/taxonomy.php
===================================================================
--- wp-includes/taxonomy.php	(revision 17440)
+++ wp-includes/taxonomy.php	(working copy)
@@ -2815,7 +2815,7 @@
  *
  * @param object|int|string $term
  * @param string $taxonomy (optional if $term is object)
- * @return string HTML link to taxonomy term archive on success, empty string if term does not exist.
+ * @return string|WP_Error HTML link to taxonomy term archive on success, WP_Error if term does not exist.
  */
 function get_term_link( $term, $taxonomy = '') {
 	global $wp_rewrite;
@@ -2832,7 +2832,7 @@
 		$term = new WP_Error('invalid_term', __('Empty Term'));
 
 	if ( is_wp_error( $term ) )
-		return '';
+		return $term;
 
 	$taxonomy = $term->taxonomy;
 
Index: wp-includes/category-template.php
===================================================================
--- wp-includes/category-template.php	(revision 17440)
+++ wp-includes/category-template.php	(working copy)
@@ -12,11 +12,19 @@
  * @since 1.0.0
  * @see get_term_link()
  *
- * @param int $category Category ID, object, or slug.
+ * @param int|object $category Category ID or object.
  * @return string Link on success, empty string if category does not exist.
  */
 function get_category_link( $category ) {
-	return get_term_link( $category, 'category' );
+	if ( ! is_object( $category ) )
+		$category = (int) $category;
+
+	$category = get_term_link( $category, 'category' );
+
+	if ( is_wp_error( $category ) )
+		return '';
+
+	return $category;
 }
 
 /**
@@ -964,11 +972,19 @@
  * @since 2.3.0
  * @see get_term_link()
  *
- * @param object|string|int $tag Tag ID, object, or slug.
+ * @param int|object $tag Tag ID or object.
  * @return string Link on success, empty string if tag does not exist.
  */
 function get_tag_link( $tag ) {
-	return get_term_link( $tag, 'post_tag' );
+	if ( ! is_object( $tag ) )
+		$tag = (int) $tag;
+
+	$tag = get_term_link( $tag, 'post_tag' );
+
+	if ( is_wp_error( $tag ) )
+		return '';
+
+	return $tag;
 }
 
 /**
