Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
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)