summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Android.bp1
-rw-r--r--Android.mk2
-rw-r--r--applypatch/imgdiff.cpp19
-rw-r--r--applypatch/include/applypatch/imgdiff_image.h4
-rw-r--r--edify/include/edify/expr.h2
-rw-r--r--install/install.cpp26
-rw-r--r--minadbd/Android.bp1
-rw-r--r--minadbd/AndroidTest.xml3
-rw-r--r--otautil/include/otautil/error_code.h2
-rw-r--r--recovery.cpp20
-rw-r--r--recovery_ui/include/recovery_ui/ui.h4
-rw-r--r--recovery_ui/screen_ui.cpp25
-rw-r--r--recovery_utils/roots.cpp6
-rw-r--r--tests/Android.bp19
-rw-r--r--tests/testdata/recovery.imgbin529707 -> 0 bytes
-rw-r--r--tests/testdata/recovery_bodybin0 -> 1293568 bytes
-rw-r--r--tests/testdata/recovery_headbin0 -> 45056 bytes
-rw-r--r--tests/testdata/recovery_tailbin0 -> 5191 bytes
-rw-r--r--tests/testdata/ziptest_fake-update.zip (renamed from tests/testdata/ziptest_dummy-update.zip)bin1090065 -> 1090065 bytes
-rw-r--r--tests/unit/host/imgdiff_test.cpp1
-rw-r--r--tests/unit/install_test.cpp42
-rw-r--r--tests/unit/zip_test.cpp2
-rw-r--r--tools/recovery_l10n/res/values-ur/strings.xml4
-rw-r--r--uncrypt/uncrypt.cpp6
-rw-r--r--updater/commands.cpp3
-rw-r--r--updater/include/private/commands.h2
26 files changed, 144 insertions, 50 deletions
diff --git a/Android.bp b/Android.bp
index 8e29dc8fd..bd2d0b0b2 100644
--- a/Android.bp
+++ b/Android.bp
@@ -79,6 +79,7 @@ cc_defaults {
"librecovery_utils",
"libotautil",
"libsnapshot_nobinder",
+ "update_metadata-protos",
],
}
diff --git a/Android.mk b/Android.mk
index 9f691531c..58167491a 100644
--- a/Android.mk
+++ b/Android.mk
@@ -56,12 +56,10 @@ include $(CLEAR_VARS)
LOCAL_MODULE := recovery_deps
ifeq ($(TARGET_USERIMAGES_USE_F2FS),true)
-ifeq ($(HOST_OS),linux)
LOCAL_REQUIRED_MODULES += \
make_f2fs.recovery \
sload_f2fs.recovery
endif
-endif
# On A/B devices recovery-persist reads the recovery related file from the persist storage and
# copies them into /data/misc/recovery. Then, for both A/B and non-A/B devices, recovery-persist
diff --git a/applypatch/imgdiff.cpp b/applypatch/imgdiff.cpp
index 6ad4a6105..85860281a 100644
--- a/applypatch/imgdiff.cpp
+++ b/applypatch/imgdiff.cpp
@@ -965,7 +965,7 @@ bool ZipModeImage::SplitZipModeImageWithLimit(const ZipModeImage& tgt_image,
used_src_ranges.Insert(src_ranges);
split_src_ranges->push_back(std::move(src_ranges));
}
- src_ranges.Clear();
+ src_ranges = {};
// We don't have enough space for the current chunk; start a new split image and handle
// this chunk there.
@@ -1035,23 +1035,24 @@ bool ZipModeImage::AddSplitImageFromChunkList(const ZipModeImage& tgt_image,
}
ZipModeImage split_tgt_image(false);
- split_tgt_image.Initialize(std::move(aligned_tgt_chunks), {});
+ split_tgt_image.Initialize(aligned_tgt_chunks, {});
split_tgt_image.MergeAdjacentNormalChunks();
- // Construct the dummy source file based on the src_ranges.
- std::vector<uint8_t> src_content;
+ // Construct the split source file based on the split src ranges.
+ std::vector<uint8_t> split_src_content;
for (const auto& r : split_src_ranges) {
size_t end = std::min(src_image.file_content_.size(), r.second * BLOCK_SIZE);
- src_content.insert(src_content.end(), src_image.file_content_.begin() + r.first * BLOCK_SIZE,
- src_image.file_content_.begin() + end);
+ split_src_content.insert(split_src_content.end(),
+ src_image.file_content_.begin() + r.first * BLOCK_SIZE,
+ src_image.file_content_.begin() + end);
}
// We should not have an empty src in our design; otherwise we will encounter an error in
- // bsdiff since src_content.data() == nullptr.
- CHECK(!src_content.empty());
+ // bsdiff since split_src_content.data() == nullptr.
+ CHECK(!split_src_content.empty());
ZipModeImage split_src_image(true);
- split_src_image.Initialize(split_src_chunks, std::move(src_content));
+ split_src_image.Initialize(split_src_chunks, split_src_content);
split_tgt_images->push_back(std::move(split_tgt_image));
split_src_images->push_back(std::move(split_src_image));
diff --git a/applypatch/include/applypatch/imgdiff_image.h b/applypatch/include/applypatch/imgdiff_image.h
index 671605160..aa8d129c3 100644
--- a/applypatch/include/applypatch/imgdiff_image.h
+++ b/applypatch/include/applypatch/imgdiff_image.h
@@ -211,7 +211,7 @@ class ZipModeImage : public Image {
bool Initialize(const std::string& filename) override;
- // Initialize a dummy ZipModeImage from an existing ImageChunk vector. For src img pieces, we
+ // Initialize a fake ZipModeImage from an existing ImageChunk vector. For src img pieces, we
// reconstruct a new file_content based on the source ranges; but it's not needed for the tgt img
// pieces; because for each chunk both the data and their offset within the file are unchanged.
void Initialize(const std::vector<ImageChunk>& chunks, const std::vector<uint8_t>& file_content) {
@@ -265,7 +265,7 @@ class ZipModeImage : public Image {
const std::vector<ZipModeImage>& split_src_images,
std::vector<SortedRangeSet>& split_src_ranges,
size_t total_tgt_size);
- // Construct the dummy split images based on the chunks info and source ranges; and move them into
+ // Construct the fake split images based on the chunks info and source ranges; and move them into
// the given vectors. Return true if we add a new split image into |split_tgt_images|, and
// false otherwise.
static bool AddSplitImageFromChunkList(const ZipModeImage& tgt_image,
diff --git a/edify/include/edify/expr.h b/edify/include/edify/expr.h
index cd9c70120..3ddf7f5fe 100644
--- a/edify/include/edify/expr.h
+++ b/edify/include/edify/expr.h
@@ -60,7 +60,7 @@ struct Value {
BLOB = 2,
};
- Value(Type type, const std::string& str) : type(type), data(str) {}
+ Value(Type type, std::string str) : type(type), data(std::move(str)) {}
Type type;
std::string data;
diff --git a/install/install.cpp b/install/install.cpp
index d404997dc..1c711f6b3 100644
--- a/install/install.cpp
+++ b/install/install.cpp
@@ -67,8 +67,11 @@ static_assert(kRecoveryApiVersion == RECOVERY_API_VERSION, "Mismatching recovery
// Default allocation of progress bar segments to operations
static constexpr int VERIFICATION_PROGRESS_TIME = 60;
static constexpr float VERIFICATION_PROGRESS_FRACTION = 0.25;
-
+// The charater used to separate dynamic fingerprints. e.x. sargo|aosp-sargo
+static const char* FINGERPRING_SEPARATOR = "|";
static std::condition_variable finish_log_temperature;
+static bool isInStringList(const std::string& target_token, const std::string& str_list,
+ const std::string& deliminator);
bool ReadMetadataFromPackage(ZipArchiveHandle zip, std::map<std::string, std::string>* metadata) {
CHECK(metadata != nullptr);
@@ -151,7 +154,8 @@ static bool CheckAbSpecificMetadata(const std::map<std::string, std::string>& me
auto device_fingerprint = android::base::GetProperty("ro.build.fingerprint", "");
auto pkg_pre_build_fingerprint = get_value(metadata, "pre-build");
- if (!pkg_pre_build_fingerprint.empty() && pkg_pre_build_fingerprint != device_fingerprint) {
+ if (!pkg_pre_build_fingerprint.empty() &&
+ !isInStringList(device_fingerprint, pkg_pre_build_fingerprint, FINGERPRING_SEPARATOR)) {
LOG(ERROR) << "Package is for source build " << pkg_pre_build_fingerprint << " but expected "
<< device_fingerprint;
return false;
@@ -199,7 +203,8 @@ bool CheckPackageMetadata(const std::map<std::string, std::string>& metadata, Ot
auto device = android::base::GetProperty("ro.product.device", "");
auto pkg_device = get_value(metadata, "pre-device");
- if (pkg_device != device || pkg_device.empty()) {
+ // device name can be a | separated list, so need to check
+ if (pkg_device.empty() || !isInStringList(device, pkg_device, FINGERPRING_SEPARATOR)) {
LOG(ERROR) << "Package is for product " << pkg_device << " but expected " << device;
return false;
}
@@ -699,3 +704,18 @@ bool SetupPackageMount(const std::string& package_path, bool* should_use_fuse) {
}
return true;
}
+
+// Check if `target_token` is in string `str_list`, where `str_list` is expected to be a
+// list delimited by `deliminator`
+// E.X. isInStringList("a", "a|b|c|d", "|") => true
+// E.X. isInStringList("abc", "abc", "|") => true
+static bool isInStringList(const std::string& target_token, const std::string& str_list,
+ const std::string& deliminator) {
+ if (target_token.length() > str_list.length()) {
+ return false;
+ } else if (target_token.length() == str_list.length() || deliminator.length() == 0) {
+ return target_token == str_list;
+ }
+ auto&& list = android::base::Split(str_list, deliminator);
+ return std::find(list.begin(), list.end(), target_token) != list.end();
+}
diff --git a/minadbd/Android.bp b/minadbd/Android.bp
index 4cdcac6d9..b6ca59efa 100644
--- a/minadbd/Android.bp
+++ b/minadbd/Android.bp
@@ -135,4 +135,5 @@ cc_test {
test_suites: [
"device-tests",
],
+ require_root: true,
}
diff --git a/minadbd/AndroidTest.xml b/minadbd/AndroidTest.xml
index 7ea235b7c..dbcbac250 100644
--- a/minadbd/AndroidTest.xml
+++ b/minadbd/AndroidTest.xml
@@ -18,9 +18,10 @@
<option name="cleanup" value="true" />
<option name="push" value="minadbd_test->/data/local/tmp/minadbd_test" />
</target_preparer>
+ <target_preparer class="com.android.tradefed.targetprep.RootTargetPreparer"/>
<option name="test-suite-tag" value="apct" />
<test class="com.android.tradefed.testtype.GTest" >
<option name="native-test-device-path" value="/data/local/tmp" />
<option name="module-name" value="minadbd_test" />
</test>
-</configuration> \ No newline at end of file
+</configuration>
diff --git a/otautil/include/otautil/error_code.h b/otautil/include/otautil/error_code.h
index 2b73c1353..7b52ce599 100644
--- a/otautil/include/otautil/error_code.h
+++ b/otautil/include/otautil/error_code.h
@@ -22,7 +22,7 @@ enum ErrorCode : int {
kLowBattery = 20,
kZipVerificationFailure,
kZipOpenFailure,
- kBootreasonInBlacklist,
+ kBootreasonInBlocklist,
kPackageCompatibilityFailure,
kScriptExecutionFailure,
kMapFileFailure,
diff --git a/recovery.cpp b/recovery.cpp
index 7675121d4..36924fbdf 100644
--- a/recovery.cpp
+++ b/recovery.cpp
@@ -421,15 +421,15 @@ static Device::BuiltinAction PromptAndWait(Device* device, InstallResult status)
case Device::REBOOT:
case Device::SHUTDOWN:
if (!ui->IsTextVisible()) {
- return Device::REBOOT;
+ return chosen_action;
}
// okay to reboot; no need to ask.
if (!update_in_progress) {
- return Device::REBOOT;
+ return chosen_action;
}
// An update might have been failed. Ask if user really wants to reboot.
if (AskToReboot(device, chosen_action)) {
- return Device::REBOOT;
+ return chosen_action;
}
break;
@@ -559,15 +559,15 @@ static void set_retry_bootloader_message(int retry_count, const std::vector<std:
}
}
-static bool bootreason_in_blacklist() {
+static bool bootreason_in_blocklist() {
std::string bootreason = android::base::GetProperty("ro.boot.bootreason", "");
if (!bootreason.empty()) {
// More bootreasons can be found in "system/core/bootstat/bootstat.cpp".
- static const std::vector<std::string> kBootreasonBlacklist{
+ static const std::vector<std::string> kBootreasonBlocklist{
"kernel_panic",
"Panic",
};
- for (const auto& str : kBootreasonBlacklist) {
+ for (const auto& str : kBootreasonBlocklist) {
if (android::base::EqualsIgnoreCase(str, bootreason)) return true;
}
}
@@ -702,7 +702,7 @@ Device::BuiltinAction start_recovery(Device* device, const std::vector<std::stri
}
std::vector<std::string> title_lines =
- android::base::Split(android::base::GetProperty("ro.bootimage.build.fingerprint", ""), ":");
+ android::base::Split(android::base::GetProperty("ro.build.fingerprint", ""), ":");
title_lines.insert(std::begin(title_lines), "Android Recovery");
ui->SetTitle(title_lines);
@@ -734,10 +734,10 @@ Device::BuiltinAction start_recovery(Device* device, const std::vector<std::stri
// Log the error code to last_install when installation skips due to low battery.
log_failure_code(kLowBattery, update_package);
status = INSTALL_SKIPPED;
- } else if (retry_count == 0 && bootreason_in_blacklist()) {
+ } else if (retry_count == 0 && bootreason_in_blocklist()) {
// Skip update-on-reboot when bootreason is kernel_panic or similar
- ui->Print("bootreason is in the blacklist; skip OTA installation\n");
- log_failure_code(kBootreasonInBlacklist, update_package);
+ ui->Print("bootreason is in the blocklist; skip OTA installation\n");
+ log_failure_code(kBootreasonInBlocklist, update_package);
status = INSTALL_SKIPPED;
} else {
// It's a fresh update. Initialize the retry_count in the BCB to 1; therefore we can later
diff --git a/recovery_ui/include/recovery_ui/ui.h b/recovery_ui/include/recovery_ui/ui.h
index 08ec1d76a..512732f90 100644
--- a/recovery_ui/include/recovery_ui/ui.h
+++ b/recovery_ui/include/recovery_ui/ui.h
@@ -192,6 +192,8 @@ class RecoveryUI {
return key_interrupted_;
}
+ virtual bool IsUsbConnected();
+
protected:
void EnqueueKey(int key_code);
@@ -226,8 +228,6 @@ class RecoveryUI {
void ProcessKey(int key_code, int updown);
void TimeKey(int key_code, int count);
- bool IsUsbConnected();
-
bool InitScreensaver();
void SetScreensaverState(ScreensaverState state);
diff --git a/recovery_ui/screen_ui.cpp b/recovery_ui/screen_ui.cpp
index 087fc0e84..b2c828f34 100644
--- a/recovery_ui/screen_ui.cpp
+++ b/recovery_ui/screen_ui.cpp
@@ -37,6 +37,7 @@
#include <unordered_map>
#include <vector>
+#include <android-base/chrono_utils.h>
#include <android-base/logging.h>
#include <android-base/properties.h>
#include <android-base/stringprintf.h>
@@ -448,7 +449,9 @@ void ScreenRecoveryUI::draw_foreground_locked() {
int frame_height = gr_get_height(frame);
int frame_x = (ScreenWidth() - frame_width) / 2;
int frame_y = GetAnimationBaseline();
- DrawSurface(frame, 0, 0, frame_width, frame_height, frame_x, frame_y);
+ if (frame_x >= 0 && frame_y >= 0 && (frame_x + frame_width) < ScreenWidth() &&
+ (frame_y + frame_height) < ScreenHeight())
+ DrawSurface(frame, 0, 0, frame_width, frame_height, frame_x, frame_y);
}
if (progressBarType != EMPTY) {
@@ -879,10 +882,28 @@ bool ScreenRecoveryUI::LoadWipeDataMenuText() {
return true;
}
+static bool InitGraphics() {
+ // Timeout is same as init wait for file default of 5 seconds and is arbitrary
+ const unsigned timeout = 500; // 10ms increments
+ for (auto retry = timeout; retry > 0; --retry) {
+ if (gr_init() == 0) {
+ if (retry < timeout) {
+ // Log message like init wait for file completion log for consistency.
+ LOG(WARNING) << "wait for 'graphics' took " << ((timeout - retry) * 10) << "ms";
+ }
+ return true;
+ }
+ std::this_thread::sleep_for(10ms);
+ }
+ // Log message like init wait for file timeout log for consistency.
+ LOG(ERROR) << "timeout wait for 'graphics' took " << (timeout * 10) << "ms";
+ return false;
+}
+
bool ScreenRecoveryUI::Init(const std::string& locale) {
RecoveryUI::Init(locale);
- if (gr_init() == -1) {
+ if (!InitGraphics()) {
return false;
}
diff --git a/recovery_utils/roots.cpp b/recovery_utils/roots.cpp
index 99f3c5dc9..19484478c 100644
--- a/recovery_utils/roots.cpp
+++ b/recovery_utils/roots.cpp
@@ -259,6 +259,12 @@ int format_volume(const std::string& volume, const std::string& directory) {
make_f2fs_cmd.push_back("-C");
make_f2fs_cmd.push_back("utf8");
}
+ if (v->fs_mgr_flags.fs_compress) {
+ make_f2fs_cmd.push_back("-O");
+ make_f2fs_cmd.push_back("compression");
+ make_f2fs_cmd.push_back("-O");
+ make_f2fs_cmd.push_back("extra_attr");
+ }
make_f2fs_cmd.push_back(v->blk_device);
if (length >= kSectorSize) {
make_f2fs_cmd.push_back(std::to_string(length / kSectorSize));
diff --git a/tests/Android.bp b/tests/Android.bp
index 4c23255ad..a9a088a32 100644
--- a/tests/Android.bp
+++ b/tests/Android.bp
@@ -95,6 +95,24 @@ librecovery_static_libs = [
"libc++fs",
]
+// recovery image for unittests.
+// ========================================================
+genrule {
+ name: "recovery_image",
+ cmd: "cat $(location testdata/recovery_head) <(cat $(location testdata/recovery_body) | $(location minigzip)) $(location testdata/recovery_tail) > $(out)",
+ srcs: [
+ "testdata/recovery_head",
+ "testdata/recovery_body",
+ "testdata/recovery_tail",
+ ],
+ tools: [
+ "minigzip",
+ ],
+ out: [
+ "testdata/recovery.img",
+ ],
+}
+
cc_test {
name: "recovery_unit_test",
isolated: true,
@@ -128,6 +146,7 @@ cc_test {
data: [
"testdata/*",
+ ":recovery_image",
":res-testdata",
],
}
diff --git a/tests/testdata/recovery.img b/tests/testdata/recovery.img
deleted file mode 100644
index b862e6f0c..000000000
--- a/tests/testdata/recovery.img
+++ /dev/null
Binary files differ
diff --git a/tests/testdata/recovery_body b/tests/testdata/recovery_body
new file mode 100644
index 000000000..48d7c10a5
--- /dev/null
+++ b/tests/testdata/recovery_body
Binary files differ
diff --git a/tests/testdata/recovery_head b/tests/testdata/recovery_head
new file mode 100644
index 000000000..7f494d098
--- /dev/null
+++ b/tests/testdata/recovery_head
Binary files differ
diff --git a/tests/testdata/recovery_tail b/tests/testdata/recovery_tail
new file mode 100644
index 000000000..7fe2c6ce8
--- /dev/null
+++ b/tests/testdata/recovery_tail
Binary files differ
diff --git a/tests/testdata/ziptest_dummy-update.zip b/tests/testdata/ziptest_fake-update.zip
index 6976bf155..6976bf155 100644
--- a/tests/testdata/ziptest_dummy-update.zip
+++ b/tests/testdata/ziptest_fake-update.zip
Binary files differ
diff --git a/tests/unit/host/imgdiff_test.cpp b/tests/unit/host/imgdiff_test.cpp
index e76ccbdfb..978ac7c2b 100644
--- a/tests/unit/host/imgdiff_test.cpp
+++ b/tests/unit/host/imgdiff_test.cpp
@@ -35,7 +35,6 @@
using android::base::get_unaligned;
-// Sanity check for the given imgdiff patch header.
static void verify_patch_header(const std::string& patch, size_t* num_normal, size_t* num_raw,
size_t* num_deflate) {
const size_t size = patch.size();
diff --git a/tests/unit/install_test.cpp b/tests/unit/install_test.cpp
index ee753494c..fc7c2bf2f 100644
--- a/tests/unit/install_test.cpp
+++ b/tests/unit/install_test.cpp
@@ -76,7 +76,7 @@ TEST(InstallTest, read_metadata_from_package_smoke) {
TEST(InstallTest, read_metadata_from_package_no_entry) {
TemporaryFile temp_file;
- BuildZipArchive({ { "dummy_entry", "" } }, temp_file.release(), kCompressStored);
+ BuildZipArchive({ { "fake_entry", "" } }, temp_file.release(), kCompressStored);
ZipArchiveHandle zip;
ASSERT_EQ(0, OpenArchive(temp_file.path, &zip));
@@ -153,7 +153,7 @@ TEST(InstallTest, SetUpNonAbUpdateCommands) {
TEST(InstallTest, SetUpNonAbUpdateCommands_MissingUpdateBinary) {
TemporaryFile temp_file;
// The archive must have something to be opened correctly.
- BuildZipArchive({ { "dummy_entry", "" } }, temp_file.release(), kCompressStored);
+ BuildZipArchive({ { "fake_entry", "" } }, temp_file.release(), kCompressStored);
// Missing update binary.
ZipArchiveHandle zip;
@@ -334,7 +334,7 @@ TEST(InstallTest, CheckPackageMetadata_device_type) {
metadata = android::base::Join(
std::vector<std::string>{
"ota-type=BRICK",
- "pre-device=dummy_device_type",
+ "pre-device=fake_device_type",
},
"\n");
TestCheckPackageMetadata(metadata, OtaType::BRICK, false);
@@ -358,7 +358,7 @@ TEST(InstallTest, CheckPackageMetadata_serial_number_smoke) {
std::vector<std::string>{
"ota-type=BRICK",
"pre-device=" + device,
- "serialno=dummy_serial",
+ "serialno=fake_serial",
},
"\n");
TestCheckPackageMetadata(metadata, OtaType::BRICK, false);
@@ -383,7 +383,7 @@ TEST(InstallTest, CheckPackageMetadata_multiple_serial_number) {
ASSERT_NE("", serialno);
std::vector<std::string> serial_numbers;
- // Creates a dummy serial number string.
+ // Creates a fake serial number string.
for (char c = 'a'; c <= 'z'; c++) {
serial_numbers.emplace_back(serialno.size(), c);
}
@@ -431,7 +431,7 @@ TEST(InstallTest, CheckPackageMetadata_ab_build_version) {
std::vector<std::string>{
"ota-type=AB",
"pre-device=" + device,
- "pre-build-incremental=dummy_build",
+ "pre-build-incremental=fake_build",
"post-timestamp=" + std::to_string(std::numeric_limits<int64_t>::max()),
},
"\n");
@@ -459,7 +459,35 @@ TEST(InstallTest, CheckPackageMetadata_ab_fingerprint) {
std::vector<std::string>{
"ota-type=AB",
"pre-device=" + device,
- "pre-build=dummy_build_fingerprint",
+ "pre-build=fake_build_fingerprint",
+ "post-timestamp=" + std::to_string(std::numeric_limits<int64_t>::max()),
+ },
+ "\n");
+ TestCheckPackageMetadata(metadata, OtaType::AB, false);
+}
+
+TEST(InstallTest, CheckPackageMetadata_dynamic_fingerprint) {
+ std::string device = android::base::GetProperty("ro.product.device", "");
+ ASSERT_FALSE(device.empty());
+
+ std::string finger_print = android::base::GetProperty("ro.build.fingerprint", "");
+ ASSERT_FALSE(finger_print.empty());
+
+ std::string metadata = android::base::Join(
+ std::vector<std::string>{
+ "ota-type=AB",
+ "pre-device=please|work|" + device + "|please|work",
+ "pre-build=" + finger_print = "pass|this|test",
+ "post-timestamp=" + std::to_string(std::numeric_limits<int64_t>::max()),
+ },
+ "\n");
+ TestCheckPackageMetadata(metadata, OtaType::AB, true);
+
+ metadata = android::base::Join(
+ std::vector<std::string>{
+ "ota-type=AB",
+ "pre-device=" + device,
+ "pre-build=fake_build_fingerprint",
"post-timestamp=" + std::to_string(std::numeric_limits<int64_t>::max()),
},
"\n");
diff --git a/tests/unit/zip_test.cpp b/tests/unit/zip_test.cpp
index 0753d64e1..ec9585c79 100644
--- a/tests/unit/zip_test.cpp
+++ b/tests/unit/zip_test.cpp
@@ -28,7 +28,7 @@
#include "otautil/sysutil.h"
TEST(ZipTest, OpenFromMemory) {
- std::string zip_path = from_testdata_base("ziptest_dummy-update.zip");
+ std::string zip_path = from_testdata_base("ziptest_fake-update.zip");
MemMapping map;
ASSERT_TRUE(map.MapFile(zip_path));
diff --git a/tools/recovery_l10n/res/values-ur/strings.xml b/tools/recovery_l10n/res/values-ur/strings.xml
index da03f1972..13dc6b37d 100644
--- a/tools/recovery_l10n/res/values-ur/strings.xml
+++ b/tools/recovery_l10n/res/values-ur/strings.xml
@@ -6,9 +6,9 @@
<string name="recovery_no_command" msgid="4465476568623024327">"کوئی کمانڈ نہیں ہے"</string>
<string name="recovery_error" msgid="5748178989622716736">"خرابی!"</string>
<string name="recovery_installing_security" msgid="9184031299717114342">"سیکیورٹی اپ ڈیٹ انسٹال ہو رہی ہے"</string>
- <string name="recovery_wipe_data_menu_header" msgid="550255032058254478">"‏Android سسٹم لوڈ نہیں کیا جا سکتا۔ آپ کا ڈیٹا خراب ہو سکتا ہے۔ اگر آپ کو مستقل یہ پیغام موصول ہوتا ہے تو آپ کو فیکٹری ڈیٹا کی دوبارہ ترتیب انجام دینے اور اس آلہ پر اسٹور کردہ سبھی صارف ڈیٹا کو مٹانے کی ضرورت پڑ سکتی ہے۔"</string>
+ <string name="recovery_wipe_data_menu_header" msgid="550255032058254478">"‏Android سسٹم لوڈ نہیں کیا جا سکتا۔ آپ کا ڈیٹا خراب ہو سکتا ہے۔ اگر آپ کو مستقل یہ پیغام موصول ہوتا ہے تو آپ کو فیکٹری ڈیٹا ری سیٹ انجام دینے اور اس آلہ پر اسٹور کردہ سبھی صارف ڈیٹا کو مٹانے کی ضرورت پڑ سکتی ہے۔"</string>
<string name="recovery_try_again" msgid="7168248750158873496">"دوبارہ کوشش کریں"</string>
- <string name="recovery_factory_data_reset" msgid="7321351565602894783">"فیکٹری ڈیٹا کی دوبارہ ترتیب"</string>
+ <string name="recovery_factory_data_reset" msgid="7321351565602894783">"فیکٹری ڈیٹا ری سیٹ"</string>
<string name="recovery_wipe_data_confirmation" msgid="5439823343348043954">"سبھی صارف ڈیٹا صاف کریں؟\n\n اسے کالعدم نہیں کیا جا سکتا!"</string>
<string name="recovery_cancel_wipe_data" msgid="66987687653647384">"منسوخ کریں"</string>
</resources>
diff --git a/uncrypt/uncrypt.cpp b/uncrypt/uncrypt.cpp
index f1f4f69f0..c798e31d6 100644
--- a/uncrypt/uncrypt.cpp
+++ b/uncrypt/uncrypt.cpp
@@ -477,9 +477,9 @@ static int Uncrypt(const std::string& input_path, const std::string& map_file, i
return kUncryptRealpathFindError;
}
- bool encryptable;
- bool encrypted;
- bool f2fs_fs;
+ bool encryptable = false;
+ bool encrypted = false;
+ bool f2fs_fs = false;
const std::string blk_dev = FindBlockDevice(path, &encryptable, &encrypted, &f2fs_fs);
if (blk_dev.empty()) {
LOG(ERROR) << "Failed to find block device for " << path;
diff --git a/updater/commands.cpp b/updater/commands.cpp
index aed63369c..1a7c272b5 100644
--- a/updater/commands.cpp
+++ b/updater/commands.cpp
@@ -128,7 +128,6 @@ bool Command::ParseTargetInfoAndSourceInfo(const std::vector<std::string>& token
// No stashes, only source ranges.
SourceInfo result(src_hash, src_ranges, {}, {});
- // Sanity check the block count.
if (result.blocks() != src_blocks) {
*err =
android::base::StringPrintf("mismatching block count: %zu (%s) vs %zu", result.blocks(),
@@ -262,7 +261,7 @@ Command Command::Parse(const std::string& line, size_t index, std::string* err)
return {};
}
} else if (op == Type::ABORT) {
- // No-op, other than sanity checking the input args.
+ // Abort takes no arguments, so there's nothing else to check.
if (pos != tokens.size()) {
*err = android::base::StringPrintf("invalid number of args: %zu (expected 0)",
tokens.size() - pos);
diff --git a/updater/include/private/commands.h b/updater/include/private/commands.h
index 79f915434..7a23bb78b 100644
--- a/updater/include/private/commands.h
+++ b/updater/include/private/commands.h
@@ -307,7 +307,7 @@ class Command {
: type_(type),
index_(index),
cmdline_(std::move(cmdline)),
- patch_(std::move(patch)),
+ patch_(patch),
target_(std::move(target)),
source_(std::move(source)),
stash_(std::move(stash)) {}