diff --git a/contrib/pgcrypto/pgp-pgsql.c b/contrib/pgcrypto/pgp-pgsql.c
index 1a0e710301c010db647c69b4c08757b6d5f35785..d0da05cd13a24f380d9183c41d4edd28575070bc 100644
--- a/contrib/pgcrypto/pgp-pgsql.c
+++ b/contrib/pgcrypto/pgp-pgsql.c
@@ -575,35 +575,25 @@ decrypt_internal(int is_pubenc, int need_text, text *data,
 		err = pgp_set_symkey(ctx, (uint8 *) VARDATA(key),
 							 VARSIZE(key) - VARHDRSZ);
 
-	/*
-	 * decrypt
-	 */
+	/* decrypt */
 	if (err >= 0)
+	{
 		err = pgp_decrypt(ctx, src, dst);
 
-	/*
-	 * failed?
-	 */
-	if (err < 0)
-		goto out;
-
-	if (ex.expect)
-		check_expect(ctx, &ex);
+		if (ex.expect)
+			check_expect(ctx, &ex);
 
-	/* remember the setting */
-	got_unicode = pgp_get_unicode_mode(ctx);
+		/* remember the setting */
+		got_unicode = pgp_get_unicode_mode(ctx);
+	}
 
-out:
-	if (src)
-		mbuf_free(src);
-	if (ctx)
-		pgp_free(ctx);
+	mbuf_free(src);
+	pgp_free(ctx);
 
 	if (err)
 	{
 		px_set_debug_handler(NULL);
-		if (dst)
-			mbuf_free(dst);
+		mbuf_free(dst);
 		ereport(ERROR,
 				(errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
 				 errmsg("%s", px_strerror(err))));