--- tetex-bin-2.0.2-CVS/libs/xpdf/xpdf/Decrypt.cc.orig Tue Jan 18 19:26:21 2005 +++ tetex-bin-2.0.2-CVS/libs/xpdf/xpdf/Decrypt.cc Tue Jan 18 19:30:30 2005 @@ -69,11 +69,17 @@ Guchar test[32], test2[32]; GString *userPassword2; Guchar fState[256]; - Guchar tmpKey[16]; + Guchar *tmpKey; Guchar fx, fy; int len, i, j; + // check whether we have non-zero keyLength + if ( !keyLength ) { + return gFalse; + } + // try using the supplied owner password to generate the user password + tmpKey = (Guchar *)gmalloc(keyLength * sizeof(Guchar)); if (ownerPassword) { len = ownerPassword->getLength(); if (len < 32) { @@ -120,6 +126,8 @@ *ownerPasswordOk = gFalse; delete userPassword2; + gfree(tmpKey); + // try using the supplied user password return makeFileKey2(encVersion, encRevision, keyLength, ownerKey, userKey, permissions, fileID, userPassword, fileKey); @@ -132,13 +140,19 @@ Guchar *buf; Guchar test[32]; Guchar fState[256]; - Guchar tmpKey[16]; + Guchar *tmpKey; Guchar fx, fy; int len, i, j; GBool ok; + // check whether we have non-zero keyLength + if ( !keyLength ) { + return gFalse; + } + // generate file key buf = (Guchar *)gmalloc(68 + fileID->getLength()); + tmpKey = (Guchar *)gmalloc(keyLength * sizeof(Guchar)); if (userPassword) { len = userPassword->getLength(); if (len < 32) { @@ -191,6 +205,7 @@ ok = gFalse; } + gfree(tmpKey); gfree(buf); return ok; }