Merge "bootstat: Fix a potential unhandled exception for malformed input."
This commit is contained in:
commit
eafeb75c49
2 changed files with 17 additions and 5 deletions
|
|
@ -25,6 +25,7 @@
|
||||||
#include <utility>
|
#include <utility>
|
||||||
#include <android-base/file.h>
|
#include <android-base/file.h>
|
||||||
#include <android-base/logging.h>
|
#include <android-base/logging.h>
|
||||||
|
#include <android-base/parseint.h>
|
||||||
#include "histogram_logger.h"
|
#include "histogram_logger.h"
|
||||||
#include "uptime_parser.h"
|
#include "uptime_parser.h"
|
||||||
|
|
||||||
|
|
@ -57,8 +58,10 @@ bool ParseRecordEventTime(const std::string& path, int32_t* uptime) {
|
||||||
|
|
||||||
// Ignore existing bootstat records (which do not contain file content).
|
// Ignore existing bootstat records (which do not contain file content).
|
||||||
if (!content.empty()) {
|
if (!content.empty()) {
|
||||||
int32_t value = std::stoi(content);
|
int32_t value;
|
||||||
bootstat::LogHistogram("bootstat_mtime_matches_content", value == *uptime);
|
if (android::base::ParseInt(content.c_str(), &value)) {
|
||||||
|
bootstat::LogHistogram("bootstat_mtime_matches_content", value == *uptime);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <android-base/logging.h>
|
#include <android-base/logging.h>
|
||||||
|
#include <android-base/parseint.h>
|
||||||
#include <cutils/properties.h>
|
#include <cutils/properties.h>
|
||||||
#include <log/log.h>
|
#include <log/log.h>
|
||||||
#include "boot_event_record_store.h"
|
#include "boot_event_record_store.h"
|
||||||
|
|
@ -56,8 +57,9 @@ void RecordBootEventFromCommandLine(
|
||||||
BootEventRecordStore boot_event_store;
|
BootEventRecordStore boot_event_store;
|
||||||
if (!value_str.empty()) {
|
if (!value_str.empty()) {
|
||||||
int32_t value = 0;
|
int32_t value = 0;
|
||||||
value = std::stoi(value_str);
|
if (android::base::ParseInt(value_str.c_str(), &value)) {
|
||||||
boot_event_store.AddBootEventWithValue(event, value);
|
boot_event_store.AddBootEventWithValue(event, value);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
boot_event_store.AddBootEvent(event);
|
boot_event_store.AddBootEvent(event);
|
||||||
}
|
}
|
||||||
|
|
@ -187,7 +189,10 @@ std::string CalculateBootCompletePrefix() {
|
||||||
std::string boot_complete_prefix = "boot_complete";
|
std::string boot_complete_prefix = "boot_complete";
|
||||||
|
|
||||||
std::string build_date_str = GetProperty("ro.build.date.utc");
|
std::string build_date_str = GetProperty("ro.build.date.utc");
|
||||||
int32_t build_date = std::stoi(build_date_str);
|
int32_t build_date;
|
||||||
|
if (!android::base::ParseInt(build_date_str.c_str(), &build_date)) {
|
||||||
|
return std::string();
|
||||||
|
}
|
||||||
|
|
||||||
BootEventRecordStore boot_event_store;
|
BootEventRecordStore boot_event_store;
|
||||||
BootEventRecordStore::BootEventRecord record;
|
BootEventRecordStore::BootEventRecord record;
|
||||||
|
|
@ -223,6 +228,10 @@ void RecordBootComplete() {
|
||||||
// ota_boot_complete. The latter signifies that the device is booting after
|
// ota_boot_complete. The latter signifies that the device is booting after
|
||||||
// a system update.
|
// a system update.
|
||||||
std::string boot_complete_prefix = CalculateBootCompletePrefix();
|
std::string boot_complete_prefix = CalculateBootCompletePrefix();
|
||||||
|
if (boot_complete_prefix.empty()) {
|
||||||
|
// The system is hosed because the build date property could not be read.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// post_decrypt_time_elapsed is only logged on encrypted devices.
|
// post_decrypt_time_elapsed is only logged on encrypted devices.
|
||||||
if (boot_event_store.GetBootEvent("post_decrypt_time_elapsed", &record)) {
|
if (boot_event_store.GetBootEvent("post_decrypt_time_elapsed", &record)) {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue