diff --git a/mozilla/extensions/cookie/nsPermissionManager.cpp b/mozilla/extensions/cookie/nsPermissionManager.cpp index 10f161292ed..d80786577ff 100644 --- a/mozilla/extensions/cookie/nsPermissionManager.cpp +++ b/mozilla/extensions/cookie/nsPermissionManager.cpp @@ -56,17 +56,21 @@ class nsPermissionEnumerator : public nsISimpleEnumerator char *host; PRBool capability; PRInt32 type; - (void) PERMISSION_Enumerate + nsresult rv = PERMISSION_Enumerate (mHostCount, mTypeCount++, &host, &type, &capability); - if (mTypeCount == PERMISSION_TypeCount(mHostCount)) { - mTypeCount = 0; - mHostCount++; + if (NS_SUCCEEDED(rv)) { + if (mTypeCount == PERMISSION_TypeCount(mHostCount)) { + mTypeCount = 0; + mHostCount++; + } + nsIPermission *permission = + new nsPermission(host, type, capability); + *result = permission; + NS_ADDREF(*result); + } else { + *result = nsnull; } - nsIPermission *permission = - new nsPermission(host, type, capability); - *result = permission; - NS_ADDREF(*result); - return NS_OK; + return rv; } virtual ~nsPermissionEnumerator() diff --git a/mozilla/extensions/cookie/nsPermissions.cpp b/mozilla/extensions/cookie/nsPermissions.cpp index 20b6ef2fdb1..33cf30128a6 100644 --- a/mozilla/extensions/cookie/nsPermissions.cpp +++ b/mozilla/extensions/cookie/nsPermissions.cpp @@ -555,9 +555,12 @@ PERMISSION_TypeCount(PRInt32 host) { return hostStruct->permissionList->Count(); } -PUBLIC void +PUBLIC nsresult PERMISSION_Enumerate (PRInt32 hostNumber, PRInt32 typeNumber, char **host, PRInt32 *type, PRBool *capability) { + if (hostNumber > PERMISSION_HostCount() || typeNumber > PERMISSION_TypeCount(hostNumber)) { + return NS_ERROR_FAILURE; + } permission_HostStruct *hostStruct; permission_TypeStruct * typeStruct; @@ -571,6 +574,7 @@ PERMISSION_Enumerate (permission_TypeStruct*, hostStruct->permissionList->ElementAt(typeNumber)); *capability = typeStruct->permission; *type = typeStruct->type; + return NS_OK; } PRIVATE void diff --git a/mozilla/extensions/cookie/nsPermissions.h b/mozilla/extensions/cookie/nsPermissions.h index d041e7313d2..8ceb0cd276a 100644 --- a/mozilla/extensions/cookie/nsPermissions.h +++ b/mozilla/extensions/cookie/nsPermissions.h @@ -44,7 +44,7 @@ extern void PERMISSION_DeletePersistentUserData(void); extern PRInt32 PERMISSION_HostCount(); extern PRInt32 PERMISSION_TypeCount(PRInt32 host); -extern void PERMISSION_Enumerate +extern nsresult PERMISSION_Enumerate (PRInt32 hostNumber, PRInt32 typeNumber, char **host, PRInt32 *type, PRBool *capability); extern void PERMISSION_Remove(const char* host, PRInt32 type);