Skip to content

Commit d0071f9

Browse files
committed
pgcrypto: Fix incorrect argument vs PG_GETARG*() mappings
The following functions use a mix of bytea and text arguments, but their C internals always used PG_GETARG_BYTEA_PP(), creating an incorrect mix with the argument types expected by encrypt_internal(): - pgp_sym_encrypt_bytea(bytea,text[,text]) - pgp_sym_encrypt(text,text[,text]) - pgp_sym_decrypt_bytea(bytea,text[,text]) - pgp_sym_decrypt(bytea,text[,text]) - pgp_pub_encrypt_bytea(bytea,bytea[,text]) - pgp_pub_encrypt(text,bytea[,text]) - pgp_pub_decrypt_bytea(bytea, bytea[,text[,text]]) - pgp_pub_decrypt(bytea,bytea[,text[,text]]) This commit fixes the inconsistencies between the PG_GETARG*() macros and the argument types of each function. Both BYTEA_PP() and TEXT_PP() rely on PG_DETOAST_DATUM_PACKED(), that returns an unaligned pointer, so this was not leading to an actual problem as far as I know, but let's be consistent. Author: Shihao Zhong Discussion: https://postgr.es/m/CAGRkXqRfiWT--DzVPx_UGpNHTt0YT5Jo8eV2CtT56jNP=QpXSQ@mail.gmail.com
1 parent f854dae commit d0071f9

File tree

1 file changed

+29
-29
lines changed

1 file changed

+29
-29
lines changed

contrib/pgcrypto/pgp-pgsql.c

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -553,15 +553,15 @@ decrypt_internal(int is_pubenc, int need_text, text *data,
553553
Datum
554554
pgp_sym_encrypt_bytea(PG_FUNCTION_ARGS)
555555
{
556-
bytea *data,
557-
*key;
556+
bytea *data;
558557
text *arg = NULL;
559-
text *res;
558+
text *res,
559+
*key;
560560

561561
data = PG_GETARG_BYTEA_PP(0);
562-
key = PG_GETARG_BYTEA_PP(1);
562+
key = PG_GETARG_TEXT_PP(1);
563563
if (PG_NARGS() > 2)
564-
arg = PG_GETARG_BYTEA_PP(2);
564+
arg = PG_GETARG_TEXT_PP(2);
565565

566566
res = encrypt_internal(0, 0, data, key, arg);
567567

@@ -575,15 +575,15 @@ pgp_sym_encrypt_bytea(PG_FUNCTION_ARGS)
575575
Datum
576576
pgp_sym_encrypt_text(PG_FUNCTION_ARGS)
577577
{
578-
bytea *data,
578+
text *data,
579579
*key;
580580
text *arg = NULL;
581581
text *res;
582582

583-
data = PG_GETARG_BYTEA_PP(0);
584-
key = PG_GETARG_BYTEA_PP(1);
583+
data = PG_GETARG_TEXT_PP(0);
584+
key = PG_GETARG_TEXT_PP(1);
585585
if (PG_NARGS() > 2)
586-
arg = PG_GETARG_BYTEA_PP(2);
586+
arg = PG_GETARG_TEXT_PP(2);
587587

588588
res = encrypt_internal(0, 1, data, key, arg);
589589

@@ -598,15 +598,15 @@ pgp_sym_encrypt_text(PG_FUNCTION_ARGS)
598598
Datum
599599
pgp_sym_decrypt_bytea(PG_FUNCTION_ARGS)
600600
{
601-
bytea *data,
602-
*key;
601+
bytea *data;
603602
text *arg = NULL;
604-
text *res;
603+
text *res,
604+
*key;
605605

606606
data = PG_GETARG_BYTEA_PP(0);
607-
key = PG_GETARG_BYTEA_PP(1);
607+
key = PG_GETARG_TEXT_PP(1);
608608
if (PG_NARGS() > 2)
609-
arg = PG_GETARG_BYTEA_PP(2);
609+
arg = PG_GETARG_TEXT_PP(2);
610610

611611
res = decrypt_internal(0, 0, data, key, NULL, arg);
612612

@@ -620,15 +620,15 @@ pgp_sym_decrypt_bytea(PG_FUNCTION_ARGS)
620620
Datum
621621
pgp_sym_decrypt_text(PG_FUNCTION_ARGS)
622622
{
623-
bytea *data,
624-
*key;
623+
bytea *data;
625624
text *arg = NULL;
626-
text *res;
625+
text *res,
626+
*key;
627627

628628
data = PG_GETARG_BYTEA_PP(0);
629-
key = PG_GETARG_BYTEA_PP(1);
629+
key = PG_GETARG_TEXT_PP(1);
630630
if (PG_NARGS() > 2)
631-
arg = PG_GETARG_BYTEA_PP(2);
631+
arg = PG_GETARG_TEXT_PP(2);
632632

633633
res = decrypt_internal(0, 1, data, key, NULL, arg);
634634

@@ -654,7 +654,7 @@ pgp_pub_encrypt_bytea(PG_FUNCTION_ARGS)
654654
data = PG_GETARG_BYTEA_PP(0);
655655
key = PG_GETARG_BYTEA_PP(1);
656656
if (PG_NARGS() > 2)
657-
arg = PG_GETARG_BYTEA_PP(2);
657+
arg = PG_GETARG_TEXT_PP(2);
658658

659659
res = encrypt_internal(1, 0, data, key, arg);
660660

@@ -668,15 +668,15 @@ pgp_pub_encrypt_bytea(PG_FUNCTION_ARGS)
668668
Datum
669669
pgp_pub_encrypt_text(PG_FUNCTION_ARGS)
670670
{
671-
bytea *data,
672-
*key;
671+
bytea *key;
673672
text *arg = NULL;
674-
text *res;
673+
text *res,
674+
*data;
675675

676-
data = PG_GETARG_BYTEA_PP(0);
676+
data = PG_GETARG_TEXT_PP(0);
677677
key = PG_GETARG_BYTEA_PP(1);
678678
if (PG_NARGS() > 2)
679-
arg = PG_GETARG_BYTEA_PP(2);
679+
arg = PG_GETARG_TEXT_PP(2);
680680

681681
res = encrypt_internal(1, 1, data, key, arg);
682682

@@ -700,9 +700,9 @@ pgp_pub_decrypt_bytea(PG_FUNCTION_ARGS)
700700
data = PG_GETARG_BYTEA_PP(0);
701701
key = PG_GETARG_BYTEA_PP(1);
702702
if (PG_NARGS() > 2)
703-
psw = PG_GETARG_BYTEA_PP(2);
703+
psw = PG_GETARG_TEXT_PP(2);
704704
if (PG_NARGS() > 3)
705-
arg = PG_GETARG_BYTEA_PP(3);
705+
arg = PG_GETARG_TEXT_PP(3);
706706

707707
res = decrypt_internal(1, 0, data, key, psw, arg);
708708

@@ -727,9 +727,9 @@ pgp_pub_decrypt_text(PG_FUNCTION_ARGS)
727727
data = PG_GETARG_BYTEA_PP(0);
728728
key = PG_GETARG_BYTEA_PP(1);
729729
if (PG_NARGS() > 2)
730-
psw = PG_GETARG_BYTEA_PP(2);
730+
psw = PG_GETARG_TEXT_PP(2);
731731
if (PG_NARGS() > 3)
732-
arg = PG_GETARG_BYTEA_PP(3);
732+
arg = PG_GETARG_TEXT_PP(3);
733733

734734
res = decrypt_internal(1, 1, data, key, psw, arg);
735735

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy