Skip to content
This repository was archived by the owner on Jul 9, 2025. It is now read-only.

Commit e738c76

Browse files
committed
Bug 1578398 - Check 'CanSend()' when calling Send__delete__(), r=mccr8
Differential Revision: https://phabricator.services.mozilla.com/D44856 --HG-- extra : moz-landing-system : lando
1 parent 9517432 commit e738c76

1 file changed

Lines changed: 10 additions & 10 deletions

File tree

ipc/ipdl/ipdl/lower.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4146,7 +4146,7 @@ def genAsyncDtor(self, md):
41464146
actorvar = actor.var()
41474147
method = MethodDefn(self.makeDtorMethodDecl(md))
41484148

4149-
method.addstmts(self.dtorPrologue(actorvar))
4149+
method.addstmt(self.dtorPrologue(actorvar))
41504150

41514151
msgvar, stmts = self.makeMessage(md, errfnSendDtor, actorvar)
41524152
sendok, sendstmts = self.sendAsync(md, msgvar, actorvar)
@@ -4172,7 +4172,7 @@ def genBlockingDtorMethod(self, md):
41724172
actorvar = actor.var()
41734173
method = MethodDefn(self.makeDtorMethodDecl(md))
41744174

4175-
method.addstmts(self.dtorPrologue(actorvar))
4175+
method.addstmt(self.dtorPrologue(actorvar))
41764176

41774177
msgvar, stmts = self.makeMessage(md, errfnSendDtor, actorvar)
41784178

@@ -4220,7 +4220,14 @@ def destroyActor(self, md, actorexpr, why=_DestroyReason.Deletion):
42204220
protoId=_protocolId(destroyedType))]
42214221

42224222
def dtorPrologue(self, actorexpr):
4223-
return [self.failIfNullActor(actorexpr), Whitespace.NL]
4223+
return StmtCode(
4224+
'''
4225+
if (!${actor} || !${actor}->CanSend()) {
4226+
NS_WARNING("Attempt to __delete__ missing or closed actor");
4227+
return false;
4228+
}
4229+
''',
4230+
actor=actorexpr)
42244231

42254232
def dtorEpilogue(self, md, actorexpr):
42264233
return self.destroyActor(md, actorexpr)
@@ -4408,13 +4415,6 @@ def genRecvCase(self, md):
44084415

44094416
# helper methods
44104417

4411-
def failIfNullActor(self, actorExpr, retOnNull=ExprLiteral.FALSE, msg=None):
4412-
failif = StmtIf(ExprNot(actorExpr))
4413-
if msg:
4414-
failif.addifstmt(_printWarningMessage(msg))
4415-
failif.addifstmt(StmtReturn(retOnNull))
4416-
return failif
4417-
44184418
def makeMessage(self, md, errfn, fromActor=None):
44194419
msgvar = self.msgvar
44204420
routingId = self.protocol.routingId(fromActor)

0 commit comments

Comments
 (0)