ported from UXP: Issue #2858 - Hack around the circular calls to nsPrincipal::Write() (99c31714)

This commit is contained in:
2026-01-08 00:13:35 +08:00
parent ab8f025bc1
commit 2373e190d3
+10 -5
View File
@@ -471,11 +471,16 @@ nsPrincipal::Write(nsIObjectOutputStream* aStream)
rv = aStream->WriteStringZ(suffix.get());
NS_ENSURE_SUCCESS(rv, rv);
nsCSPContext* testcsp = static_cast<nsCSPContext*>(mCSP.get());
if(testcsp) {
int csprefcnt = testcsp->AddRef();
testcsp->Release();
if(csprefcnt > 10) return NS_OK;
// This is an ugly hack to prevent re-entrancy calls into nsPrincipal::Write()
// because of repeat CSP processing.
// We refcount the context and if found 10+ refcounts on the same, skip writing
// the mCSP compound object.
// TODO: figure out exactly why this happens and fix the root cause.
nsCSPContext* CSPContext = static_cast<nsCSPContext*>(mCSP.get());
if(CSPContext) {
int8_t CSPDepth = CSPContext->AddRef();
CSPContext->Release();
if(CSPDepth > 10) return NS_OK;
}
rv = NS_WriteOptionalCompoundObject(aStream, mCSP,