Correct parsing checks in `pk_parse_key`

Two code-paths in `pk_parse_key` returned success on a failure in `pk_setup`.
diff --git a/library/pkparse.c b/library/pkparse.c
index 63c5199..6fb0dd5 100644
--- a/library/pkparse.c
+++ b/library/pkparse.c
@@ -1195,29 +1195,29 @@
     pk_free( pk );
 
 #if defined(POLARSSL_RSA_C)
-    if( ( pk_info = pk_info_from_type( POLARSSL_PK_RSA ) ) == NULL )
-        return( POLARSSL_ERR_PK_UNKNOWN_PK_ALG );
-
+    pk_info = pk_info_from_type( POLARSSL_PK_RSA );
     if( ( ret = pk_init_ctx( pk, pk_info ) ) != 0 ||
-        ( ret = pk_parse_key_pkcs1_der( pk_rsa( *pk ), key, keylen ) ) == 0 )
+        ( ret = pk_parse_key_pkcs1_der( pk_rsa( *pk ), key, keylen ) ) != 0 )
+    {
+        pk_free( pk );
+    }
+    else
     {
         return( 0 );
     }
-
-    pk_free( pk );
 #endif /* POLARSSL_RSA_C */
 
 #if defined(POLARSSL_ECP_C)
-    if( ( pk_info = pk_info_from_type( POLARSSL_PK_ECKEY ) ) == NULL )
-        return( POLARSSL_ERR_PK_UNKNOWN_PK_ALG );
-
+    pk_info = pk_info_from_type( POLARSSL_PK_ECKEY );
     if( ( ret = pk_init_ctx( pk, pk_info ) ) != 0 ||
-        ( ret = pk_parse_key_sec1_der( pk_ec( *pk ), key, keylen ) ) == 0 )
+        ( ret = pk_parse_key_sec1_der( pk_ec( *pk ), key, keylen ) ) != 0 )
+    {
+        pk_free( pk );
+    }
+    else
     {
         return( 0 );
     }
-
-    pk_free( pk );
 #endif /* POLARSSL_ECP_C */
 
     return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT );