From bcedd95a62db541847f666dcd8a753dbc50c0c75 Mon Sep 17 00:00:00 2001 From: "nelsonb%netscape.com" Date: Sat, 11 Oct 2003 01:49:24 +0000 Subject: [PATCH] Correctly handle a NULL moduleSpecList. Bug 220217. git-svn-id: svn://10.0.0.236/trunk@147867 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/security/nss/lib/pk11wrap/pk11pars.c | 33 +++++++++++++------- mozilla/security/nss/lib/softoken/pk11db.c | 16 +++++++--- 2 files changed, 33 insertions(+), 16 deletions(-) diff --git a/mozilla/security/nss/lib/pk11wrap/pk11pars.c b/mozilla/security/nss/lib/pk11wrap/pk11pars.c index 2ec1d457344..bdbe87f3359 100644 --- a/mozilla/security/nss/lib/pk11wrap/pk11pars.c +++ b/mozilla/security/nss/lib/pk11wrap/pk11pars.c @@ -41,6 +41,7 @@ #include "secmod.h" #include "secmodi.h" #include "pki3hack.h" +#include "secerr.h" #include "pk11pars.h" @@ -319,23 +320,33 @@ SECMOD_LoadModule(char *modulespec,SECMODModule *parent, PRBool recurse) if (recurse && module->isModuleDB) { char ** moduleSpecList; - char **index; + PORT_SetError(0); moduleSpecList = SECMOD_GetModuleSpecList(module); + if (moduleSpecList) { + char **index; - for (index = moduleSpecList; index && *index; index++) { - SECMODModule *child; - child = SECMOD_LoadModule(*index,module,PR_TRUE); - if (!child) break; - if (child->isCritical && !child->loaded) { - rv = SECFailure; + for (index = moduleSpecList; *index; index++) { + SECMODModule *child; + child = SECMOD_LoadModule(*index,module,PR_TRUE); + if (!child) break; + if (child->isCritical && !child->loaded) { + int err = PORT_GetError(); + if (!err) + err = SEC_ERROR_NO_MODULE; + SECMOD_DestroyModule(child); + PORT_SetError(err); + rv = SECFailure; + break; + } SECMOD_DestroyModule(child); - break; } - SECMOD_DestroyModule(child); + SECMOD_FreeModuleSpecList(module,moduleSpecList); + } else { + if (!PORT_GetError()) + PORT_SetError(SEC_ERROR_NO_MODULE); + rv = SECFailure; } - - SECMOD_FreeModuleSpecList(module,moduleSpecList); } if (rv != SECSuccess) { diff --git a/mozilla/security/nss/lib/softoken/pk11db.c b/mozilla/security/nss/lib/softoken/pk11db.c index 5a490698435..220e897ba46 100644 --- a/mozilla/security/nss/lib/softoken/pk11db.c +++ b/mozilla/security/nss/lib/softoken/pk11db.c @@ -796,9 +796,13 @@ done: if (pkcs11db) { secmod_CloseDB(pkcs11db); - } else { + } else if (moduleList[0] && rw) { secmod_AddPermDB(appName,filename,dbname,moduleList[0], rw) ; } + if (!moduleList[0]) { + PORT_Free(moduleList); + moduleList = NULL; + } return moduleList; } @@ -806,11 +810,13 @@ SECStatus secmod_ReleasePermDBData(const char *appName, const char *filename, const char *dbname, char **moduleSpecList, PRBool rw) { - char **index; - for(index = moduleSpecList; *index; index++) { - PR_smprintf_free(*index); + if (moduleSpecList) { + char **index; + for(index = moduleSpecList; *index; index++) { + PR_smprintf_free(*index); + } + PORT_Free(moduleSpecList); } - PORT_Free(moduleSpecList); return SECSuccess; }