mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 00:39:49 +00:00
[vm/vmservice] Validate getIsolate response before attempting to retrieve pauseEvent from it.
Bug: b/150193047 Change-Id: I6e8f8e27ef2a9894138b1d877597ad3a5f3f9e61 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137281 Reviewed-by: Ben Konyi <bkonyi@google.com> Commit-Queue: Alexander Aprelev <aam@google.com>
This commit is contained in:
parent
3bd8e36bea
commit
305399c15c
|
@ -34,7 +34,13 @@ class RunningIsolate implements MessageRouter {
|
|||
|
||||
// If we've received approval to resume from all clients who care, clear
|
||||
// approval state and resume.
|
||||
final pauseType = await _isolatePauseType(service, portId.toString());
|
||||
var pauseType;
|
||||
try {
|
||||
pauseType = await _isolatePauseType(service, portId.toString());
|
||||
} catch (_errorResponse) {
|
||||
// ignore errors when attempting to retrieve isolate pause type
|
||||
return;
|
||||
}
|
||||
if (pauseType != kInvalidPauseEvent &&
|
||||
_shouldResume(service, null, pauseType)) {
|
||||
_resumeApprovalsByName.clear();
|
||||
|
@ -76,9 +82,15 @@ class RunningIsolate implements MessageRouter {
|
|||
..params.addAll({
|
||||
'isolateId': isolateId,
|
||||
});
|
||||
final result =
|
||||
(await routeRequest(service, getIsolateMessage)).decodeJson();
|
||||
final pauseEvent = result['result']['pauseEvent'];
|
||||
final Response result = await routeRequest(service, getIsolateMessage);
|
||||
final resultJson = result.decodeJson();
|
||||
if (resultJson['result'] == null ||
|
||||
resultJson['result']['pauseEvent'] == null) {
|
||||
// Failed to send getIsolate message(due to isolate being de-registered
|
||||
// for example).
|
||||
throw result;
|
||||
}
|
||||
final pauseEvent = resultJson['result']['pauseEvent'];
|
||||
const pauseEvents = <String, int>{
|
||||
'PauseStart': kPauseOnStartMask,
|
||||
'PausePostRequest': kPauseOnReloadMask,
|
||||
|
@ -92,8 +104,12 @@ class RunningIsolate implements MessageRouter {
|
|||
VMService service, Message message) async {
|
||||
// If we've received approval to resume from all clients who care, clear
|
||||
// approval state and resume.
|
||||
final pauseType =
|
||||
await _isolatePauseType(service, message.params['isolateId']);
|
||||
var pauseType;
|
||||
try {
|
||||
pauseType = await _isolatePauseType(service, message.params['isolateId']);
|
||||
} catch (errorResponse) {
|
||||
return errorResponse;
|
||||
}
|
||||
if (pauseType == kInvalidPauseEvent ||
|
||||
_shouldResume(service, message.client, pauseType)) {
|
||||
_resumeApprovalsByName.clear();
|
||||
|
|
|
@ -32,7 +32,13 @@ class RunningIsolate implements MessageRouter {
|
|||
|
||||
// If we've received approval to resume from all clients who care, clear
|
||||
// approval state and resume.
|
||||
final pauseType = await _isolatePauseType(service, portId.toString());
|
||||
var pauseType;
|
||||
try {
|
||||
pauseType = await _isolatePauseType(service, portId.toString());
|
||||
} catch (_errorResponse) {
|
||||
// ignore errors when attempting to retrieve isolate pause type
|
||||
return;
|
||||
}
|
||||
if (pauseType != kInvalidPauseEvent &&
|
||||
_shouldResume(service, null, pauseType)) {
|
||||
_resumeApprovalsByName.clear();
|
||||
|
@ -74,9 +80,15 @@ class RunningIsolate implements MessageRouter {
|
|||
..params.addAll({
|
||||
'isolateId': isolateId,
|
||||
});
|
||||
final result =
|
||||
(await routeRequest(service, getIsolateMessage)).decodeJson();
|
||||
final pauseEvent = result['result']['pauseEvent'];
|
||||
final Response result = await routeRequest(service, getIsolateMessage);
|
||||
final resultJson = result.decodeJson();
|
||||
if (resultJson['result'] == null ||
|
||||
resultJson['result']['pauseEvent'] == null) {
|
||||
// Failed to send getIsolate message(due to isolate being de-registered
|
||||
// for example).
|
||||
throw result;
|
||||
}
|
||||
final pauseEvent = resultJson['result']['pauseEvent'];
|
||||
const pauseEvents = <String, int>{
|
||||
'PauseStart': kPauseOnStartMask,
|
||||
'PausePostRequest': kPauseOnReloadMask,
|
||||
|
@ -90,8 +102,12 @@ class RunningIsolate implements MessageRouter {
|
|||
VMService service, Message message) async {
|
||||
// If we've received approval to resume from all clients who care, clear
|
||||
// approval state and resume.
|
||||
final pauseType =
|
||||
await _isolatePauseType(service, message.params['isolateId']);
|
||||
var pauseType;
|
||||
try {
|
||||
pauseType = await _isolatePauseType(service, message.params['isolateId']);
|
||||
} catch (errorResponse) {
|
||||
return errorResponse;
|
||||
}
|
||||
if (pauseType == kInvalidPauseEvent ||
|
||||
_shouldResume(service, message.client, pauseType)) {
|
||||
_resumeApprovalsByName.clear();
|
||||
|
|
Loading…
Reference in a new issue