Skip to content

Commit 0e21ef3

Browse files
author
Anu Aliyas
committed
Avoid crashes related to accessing a null WebRtcLogUploader
WebRtcLogUploader could be null. Added nullptr check to avoid crash. Change-Id: I40918777fd3d293a7c4ee566cdbd342c20dd05d3 Reviewed-on: https://codereview.qt-project.org/c/qt/qtwebengine-chromium/+/585288 Reviewed-by: Allan Sandfeld Jensen <[email protected]>
1 parent 4820cc8 commit 0e21ef3

File tree

2 files changed

+80
-52
lines changed

2 files changed

+80
-52
lines changed

chromium/chrome/browser/media/webrtc/webrtc_logging_controller.cc

Lines changed: 79 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -122,10 +122,12 @@ void WebRtcLoggingController::UploadLog(UploadDoneCallback callback) {
122122
base::UmaHistogramSparse("WebRtcTextLogging.UploadStarted", web_app_id_);
123123

124124
WebRtcLogUploader* log_uploader = WebRtcLogUploader::GetInstance();
125-
log_uploader->background_task_runner()->PostTaskAndReplyWithResult(
126-
FROM_HERE, base::BindOnce(log_directory_getter_),
127-
base::BindOnce(&WebRtcLoggingController::TriggerUpload, this,
128-
std::move(callback)));
125+
if (log_uploader) {
126+
log_uploader->background_task_runner()->PostTaskAndReplyWithResult(
127+
FROM_HERE, base::BindOnce(log_directory_getter_),
128+
base::BindOnce(&WebRtcLoggingController::TriggerUpload, this,
129+
std::move(callback)));
130+
}
129131
}
130132

131133
void WebRtcLoggingController::UploadStoredLog(const std::string& log_id,
@@ -144,6 +146,10 @@ void WebRtcLoggingController::UploadStoredLog(const std::string& log_id,
144146
upload_data.web_app_id = web_app_id_;
145147

146148
WebRtcLogUploader* log_uploader = WebRtcLogUploader::GetInstance();
149+
if (!log_uploader) {
150+
return;
151+
}
152+
147153
if (!IsWebRtcTextLogAllowed(GetBrowserContext())) {
148154
log_uploader->NotifyUploadDisabled(std::move(upload_data));
149155
return;
@@ -157,7 +163,9 @@ void WebRtcLoggingController::UploadStoredLog(const std::string& log_id,
157163
upload_data.paths.directory = log_directory_getter.Run();
158164
WebRtcLogUploader* uploader =
159165
WebRtcLogUploader::GetInstance();
160-
uploader->UploadStoredLog(std::move(upload_data));
166+
if (uploader) {
167+
uploader->UploadStoredLog(std::move(upload_data));
168+
}
161169
},
162170
std::move(upload_data), log_directory_getter_));
163171
}
@@ -171,7 +179,9 @@ void WebRtcLoggingController::DiscardLog(GenericDoneCallback callback) {
171179
return;
172180
}
173181
WebRtcLogUploader* log_uploader = WebRtcLogUploader::GetInstance();
174-
log_uploader->LoggingStoppedDontUpload();
182+
if (log_uploader) {
183+
log_uploader->LoggingStoppedDontUpload();
184+
}
175185
text_log_handler_->DiscardLog();
176186
rtp_dump_handler_.reset();
177187
stop_rtp_dump_callback_.Reset();
@@ -215,10 +225,12 @@ void WebRtcLoggingController::StoreLogContinue(const std::string& log_id,
215225
ReleaseRtpDumps(log_paths.get());
216226

217227
WebRtcLogUploader* log_uploader = WebRtcLogUploader::GetInstance();
218-
log_uploader->background_task_runner()->PostTaskAndReplyWithResult(
219-
FROM_HERE, base::BindOnce(log_directory_getter_),
220-
base::BindOnce(&WebRtcLoggingController::StoreLogInDirectory, this,
221-
log_id, std::move(log_paths), std::move(callback)));
228+
if (log_uploader) {
229+
log_uploader->background_task_runner()->PostTaskAndReplyWithResult(
230+
FROM_HERE, base::BindOnce(log_directory_getter_),
231+
base::BindOnce(&WebRtcLoggingController::StoreLogInDirectory, this,
232+
log_id, std::move(log_paths), std::move(callback)));
233+
}
222234
}
223235

224236
void WebRtcLoggingController::StartRtpDump(RtpDumpType type,
@@ -243,10 +255,12 @@ void WebRtcLoggingController::StartRtpDump(RtpDumpType type,
243255

244256
if (!rtp_dump_handler_) {
245257
WebRtcLogUploader* log_uploader = WebRtcLogUploader::GetInstance();
246-
log_uploader->background_task_runner()->PostTaskAndReplyWithResult(
247-
FROM_HERE, base::BindOnce(log_directory_getter_),
248-
base::BindOnce(&WebRtcLoggingController::CreateRtpDumpHandlerAndStart,
249-
this, type, std::move(callback)));
258+
if (log_uploader) {
259+
log_uploader->background_task_runner()->PostTaskAndReplyWithResult(
260+
FROM_HERE, base::BindOnce(log_directory_getter_),
261+
base::BindOnce(&WebRtcLoggingController::CreateRtpDumpHandlerAndStart,
262+
this, type, std::move(callback)));
263+
}
250264
return;
251265
}
252266

@@ -296,10 +310,12 @@ void WebRtcLoggingController::GetLogsDirectory(
296310
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
297311
DCHECK(!callback.is_null());
298312
WebRtcLogUploader* log_uploader = WebRtcLogUploader::GetInstance();
299-
log_uploader->background_task_runner()->PostTaskAndReplyWithResult(
300-
FROM_HERE, base::BindOnce(log_directory_getter_),
301-
base::BindOnce(&WebRtcLoggingController::GrantLogsDirectoryAccess, this,
302-
std::move(callback), std::move(error_callback)));
313+
if (log_uploader) {
314+
log_uploader->background_task_runner()->PostTaskAndReplyWithResult(
315+
FROM_HERE, base::BindOnce(log_directory_getter_),
316+
base::BindOnce(&WebRtcLoggingController::GrantLogsDirectoryAccess, this,
317+
std::move(callback), std::move(error_callback)));
318+
}
303319
}
304320

305321
void WebRtcLoggingController::GrantLogsDirectoryAccess(
@@ -409,12 +425,16 @@ void WebRtcLoggingController::OnAgentDisconnected() {
409425
case WebRtcTextLogHandler::STOPPED:
410426
text_log_handler_->ChannelClosing();
411427
if (upload_log_on_render_close_) {
412-
log_uploader->background_task_runner()->PostTaskAndReplyWithResult(
413-
FROM_HERE, base::BindOnce(log_directory_getter_),
414-
base::BindOnce(&WebRtcLoggingController::TriggerUpload, this,
415-
UploadDoneCallback()));
428+
if (log_uploader) {
429+
log_uploader->background_task_runner()->PostTaskAndReplyWithResult(
430+
FROM_HERE, base::BindOnce(log_directory_getter_),
431+
base::BindOnce(&WebRtcLoggingController::TriggerUpload, this,
432+
UploadDoneCallback()));
433+
}
416434
} else {
417-
log_uploader->LoggingStoppedDontUpload();
435+
if (log_uploader) {
436+
log_uploader->LoggingStoppedDontUpload();
437+
}
418438
text_log_handler_->DiscardLog();
419439
}
420440
break;
@@ -477,20 +497,24 @@ void WebRtcLoggingController::StoreLogInDirectory(
477497
<< ", uorc=" << upload_log_on_render_close_;
478498

479499
WebRtcLogUploader* log_uploader = WebRtcLogUploader::GetInstance();
480-
log_uploader->background_task_runner()->PostTask(
481-
FROM_HERE, base::BindOnce(
482-
[](WebRtcLogPaths paths, const std::string& log_id,
483-
std::unique_ptr<WebRtcLogBuffer> log_buffer,
484-
std::unique_ptr<WebRtcLogMetaDataMap> meta_data,
485-
GenericDoneCallback done_callback) {
486-
WebRtcLogUploader* uploader =
487-
WebRtcLogUploader::GetInstance();
488-
uploader->LoggingStoppedDoStore(
489-
paths, log_id, std::move(log_buffer),
490-
std::move(meta_data), std::move(done_callback));
491-
},
492-
*log_paths, log_id, std::move(log_buffer),
493-
std::move(meta_data), std::move(done_callback)));
500+
if (log_uploader) {
501+
log_uploader->background_task_runner()->PostTask(
502+
FROM_HERE, base::BindOnce(
503+
[](WebRtcLogPaths paths, const std::string& log_id,
504+
std::unique_ptr<WebRtcLogBuffer> log_buffer,
505+
std::unique_ptr<WebRtcLogMetaDataMap> meta_data,
506+
GenericDoneCallback done_callback) {
507+
WebRtcLogUploader* uploader =
508+
WebRtcLogUploader::GetInstance();
509+
if (uploader) {
510+
uploader->LoggingStoppedDoStore(
511+
paths, log_id, std::move(log_buffer),
512+
std::move(meta_data), std::move(done_callback));
513+
}
514+
},
515+
*log_paths, log_id, std::move(log_buffer),
516+
std::move(meta_data), std::move(done_callback)));
517+
}
494518
}
495519

496520
void WebRtcLoggingController::DoUploadLogAndRtpDumps(
@@ -544,20 +568,24 @@ void WebRtcLoggingController::DoUploadLogAndRtpDumps(
544568
bool is_text_log_upload_allowed = IsWebRtcTextLogAllowed(browser_context);
545569

546570
WebRtcLogUploader* log_uploader = WebRtcLogUploader::GetInstance();
547-
log_uploader->background_task_runner()->PostTask(
548-
FROM_HERE,
549-
base::BindOnce(
550-
[](std::unique_ptr<WebRtcLogBuffer> log_buffer,
551-
std::unique_ptr<WebRtcLogMetaDataMap> meta_data,
552-
WebRtcLogUploader::UploadDoneData upload_done_data,
553-
bool is_text_log_upload_allowed) {
554-
WebRtcLogUploader* uploader = WebRtcLogUploader::GetInstance();
555-
uploader->OnLoggingStopped(
556-
std::move(log_buffer), std::move(meta_data),
557-
std::move(upload_done_data), is_text_log_upload_allowed);
558-
},
559-
std::move(log_buffer), std::move(meta_data),
560-
std::move(upload_done_data), is_text_log_upload_allowed));
571+
if (log_uploader) {
572+
log_uploader->background_task_runner()->PostTask(
573+
FROM_HERE,
574+
base::BindOnce(
575+
[](std::unique_ptr<WebRtcLogBuffer> log_buffer,
576+
std::unique_ptr<WebRtcLogMetaDataMap> meta_data,
577+
WebRtcLogUploader::UploadDoneData upload_done_data,
578+
bool is_text_log_upload_allowed) {
579+
WebRtcLogUploader* uploader = WebRtcLogUploader::GetInstance();
580+
if (uploader) {
581+
uploader->OnLoggingStopped(
582+
std::move(log_buffer), std::move(meta_data),
583+
std::move(upload_done_data), is_text_log_upload_allowed);
584+
}
585+
},
586+
std::move(log_buffer), std::move(meta_data),
587+
std::move(upload_done_data), is_text_log_upload_allowed));
588+
}
561589
}
562590

563591
void WebRtcLoggingController::CreateRtpDumpHandlerAndStart(

chromium/chrome/browser/media/webrtc/webrtc_text_log_handler.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ bool WebRtcTextLogHandler::StartLogging(GenericDoneCallback callback) {
210210
}
211211

212212
WebRtcLogUploader* log_uploader = WebRtcLogUploader::GetInstance();
213-
if (!log_uploader->ApplyForStartLogging()) {
213+
if (log_uploader && !log_uploader->ApplyForStartLogging()) {
214214
FireGenericDoneCallback(std::move(callback), false,
215215
"Cannot start, maybe the maximum number of "
216216
"simultaneuos logs has been reached.");

0 commit comments

Comments
 (0)