mirror of
https://github.com/postgres/postgres.git
synced 2025-07-31 22:04:40 +03:00
Fix combo_decrypt() to throw an error for zero-length input when using a
padded encryption scheme. Formerly it would try to access res[(unsigned) -1], which resulted in core dumps on 64-bit machines, and was certainly trouble waiting to happen on 32-bit machines (though in at least the known case it was harmless because that byte would be overwritten after return). Per report from Ken Colson; fix by Marko Kreen.
This commit is contained in:
@ -26,7 +26,7 @@
|
|||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* $Id: px.c,v 1.7 2002/03/06 06:09:10 momjian Exp $
|
* $Id: px.c,v 1.7.6.1 2007/08/23 16:16:20 tgl Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <postgres.h>
|
#include <postgres.h>
|
||||||
@ -185,6 +185,18 @@ combo_decrypt(PX_Combo * cx, const uint8 *data, unsigned dlen,
|
|||||||
|
|
||||||
PX_Cipher *c = cx->cipher;
|
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 -1;
|
||||||
|
|
||||||
|
/* without padding, report empty result */
|
||||||
|
*rlen = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
bs = px_cipher_block_size(c);
|
bs = px_cipher_block_size(c);
|
||||||
if (bs > 1 && (dlen % bs) != 0)
|
if (bs > 1 && (dlen % bs) != 0)
|
||||||
goto block_error;
|
goto block_error;
|
||||||
|
Reference in New Issue
Block a user