diff --git a/CHANGES b/CHANGES
index c0390345b..74189b35c 100644
--- a/CHANGES
+++ b/CHANGES
@@ -11,6 +11,9 @@
          *) applies to 0.9.6a (/0.9.6b) and 0.9.7
          +) applies to 0.9.7 only
 
+  *) Handle special case when X509_NAME is empty in X509 printing routines.
+     [Steve Henson]
+
   *) In dsa_do_verify (crypto/dsa/dsa_ossl.c), verify that r and s are
      positive and less than q.
      [Bodo Moeller]
diff --git a/crypto/asn1/t_x509.c b/crypto/asn1/t_x509.c
index 0bba0861d..ff4a991b6 100644
--- a/crypto/asn1/t_x509.c
+++ b/crypto/asn1/t_x509.c
@@ -176,7 +176,7 @@ int X509_print_ex(BIO *bp, X509 *x, unsigned long nmflags, unsigned long cflag)
 	if(!(cflag & X509_FLAG_NO_ISSUER))
 		{
 		if (BIO_printf(bp,"        Issuer:%c",mlch) <= 0) goto err;
-		if (!X509_NAME_print_ex(bp,X509_get_issuer_name(x),nmindent, nmflags)) goto err;
+		if (X509_NAME_print_ex(bp,X509_get_issuer_name(x),nmindent, nmflags) < 0) goto err;
 		if (BIO_write(bp,"\n",1) <= 0) goto err;
 		}
 	if(!(cflag & X509_FLAG_NO_VALIDITY))
@@ -191,7 +191,7 @@ int X509_print_ex(BIO *bp, X509 *x, unsigned long nmflags, unsigned long cflag)
 	if(!(cflag & X509_FLAG_NO_SUBJECT))
 		{
 		if (BIO_printf(bp,"        Subject:%c",mlch) <= 0) goto err;
-		if (!X509_NAME_print_ex(bp,X509_get_subject_name(x),nmindent, nmflags)) goto err;
+		if (X509_NAME_print_ex(bp,X509_get_subject_name(x),nmindent, nmflags) < 0) goto err;
 		if (BIO_write(bp,"\n",1) <= 0) goto err;
 		}
 	if(!(cflag & X509_FLAG_NO_PUBKEY))
diff --git a/crypto/x509/x509_obj.c b/crypto/x509/x509_obj.c
index 6a3ba8eb1..f0271fdfa 100644
--- a/crypto/x509/x509_obj.c
+++ b/crypto/x509/x509_obj.c
@@ -214,6 +214,8 @@ int i;
 		}
 	else
 		p=buf;
+	if (i == 0)
+		*p = '\0';
 	return(p);
 err:
 	X509err(X509_F_X509_NAME_ONELINE,ERR_R_MALLOC_FAILURE);