File CVE-2012-1663.patch of Package gnutls.openSUSE_12.1_Update

Index: gnutls-3.0.3/lib/auth/cert.c
===================================================================
--- gnutls-3.0.3.orig/lib/auth/cert.c
+++ gnutls-3.0.3/lib/auth/cert.c
@@ -1157,6 +1157,7 @@ _gnutls_proc_x509_server_certificate (gn
       if (ret < 0)
         {
           gnutls_assert ();
+	  peer_certificate_list_size = j;
           goto cleanup;
         }
 
Index: gnutls-3.0.3/lib/gnutls_pcert.c
===================================================================
--- gnutls-3.0.3.orig/lib/gnutls_pcert.c
+++ gnutls-3.0.3/lib/gnutls_pcert.c
@@ -89,6 +89,7 @@ size_t sz;
   if (ret < 0)
     {
       gnutls_pubkey_deinit(pcert->pubkey);
+      pcert->pubkey = NULL;
       ret = gnutls_assert_val(ret);
       goto cleanup;
     }
@@ -96,7 +97,7 @@ size_t sz;
   return 0;
 
 cleanup:
-  gnutls_free(pcert->cert.data);
+  _gnutls_free_datum(&pcert->cert);
 
   return ret;
 }
@@ -278,6 +279,7 @@ size_t sz;
   if (ret < 0)
     {
       gnutls_pubkey_deinit(pcert->pubkey);
+      pcert->pubkey = NULL;
       ret = gnutls_assert_val(ret);
       goto cleanup;
     }
@@ -285,7 +287,7 @@ size_t sz;
   return 0;
 
 cleanup:
-  gnutls_free(pcert->cert.data);
+  _gnutls_free_datum(&pcert->cert);
 
   return ret;
 }
@@ -368,8 +370,7 @@ gnutls_pcert_deinit (gnutls_pcert_st *pc
 {
   gnutls_pubkey_deinit(pcert->pubkey);
   pcert->pubkey = NULL;
-  gnutls_free(pcert->cert.data);
-  pcert->cert.data = NULL;
+  _gnutls_free_datum(&pcert->cert);
 }
 
 /* Converts the first certificate for the cert_auth_info structure
openSUSE Build Service is sponsored by