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