aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--contrib/pgcrypto/px.c15
-rw-r--r--contrib/pgcrypto/px.h3
2 files changed, 16 insertions, 2 deletions
diff --git a/contrib/pgcrypto/px.c b/contrib/pgcrypto/px.c
index 0374b1c0276..49ebfb8770e 100644
--- a/contrib/pgcrypto/px.c
+++ b/contrib/pgcrypto/px.c
@@ -26,7 +26,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $PostgreSQL: pgsql/contrib/pgcrypto/px.c,v 1.15 2005/10/15 02:49:06 momjian Exp $
+ * $PostgreSQL: pgsql/contrib/pgcrypto/px.c,v 1.15.4.1 2007/08/23 16:15:57 tgl Exp $
*/
#include "postgres.h"
@@ -58,6 +58,7 @@ static const struct error_desc px_err_list[] = {
{PXE_BAD_SALT_ROUNDS, "Incorrect number of rounds"},
{PXE_MCRYPT_INTERNAL, "mcrypt internal error"},
{PXE_NO_RANDOM, "No strong random source"},
+ {PXE_DECRYPT_FAILED, "Decryption failed"},
{PXE_PGP_CORRUPT_DATA, "Wrong key or corrupt data"},
{PXE_PGP_CORRUPT_ARMOR, "Corrupt ascii-armor"},
{PXE_PGP_UNSUPPORTED_COMPR, "Unsupported compression algorithm"},
@@ -279,6 +280,18 @@ combo_decrypt(PX_Combo * cx, const uint8 *data, unsigned dlen,
PX_Cipher *c = cx->cipher;
+ /* decide whether zero-length input is allowed */
+ if (dlen == 0)
+ {
+ /* with padding, empty ciphertext is not allowed */
+ if (cx->padding)
+ return PXE_DECRYPT_FAILED;
+
+ /* without padding, report empty result */
+ *rlen = 0;
+ return 0;
+ }
+
bs = px_cipher_block_size(c);
if (bs > 1 && (dlen % bs) != 0)
goto block_error;
diff --git a/contrib/pgcrypto/px.h b/contrib/pgcrypto/px.h
index bf53ec0e654..ba7d7c12606 100644
--- a/contrib/pgcrypto/px.h
+++ b/contrib/pgcrypto/px.h
@@ -26,7 +26,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $PostgreSQL: pgsql/contrib/pgcrypto/px.h,v 1.16 2005/10/15 02:49:06 momjian Exp $
+ * $PostgreSQL: pgsql/contrib/pgcrypto/px.h,v 1.16.4.1 2007/08/23 16:15:57 tgl Exp $
*/
#ifndef __PX_H
@@ -85,6 +85,7 @@ void px_free(void *p);
#define PXE_BAD_SALT_ROUNDS -15
#define PXE_MCRYPT_INTERNAL -16
#define PXE_NO_RANDOM -17
+#define PXE_DECRYPT_FAILED -18
#define PXE_MBUF_SHORT_READ -50