update_engine: error out on bad compression factor
We need to check that we are parsing compression factor correctly here.
This test here catches a bug where in the build system compression
factor is specified as a string 64k, instead of integer value 262144
Test: th
Change-Id: I98fa4db3a9f66137d3d5f93bd4b34f7126f8a184
diff --git a/payload_generator/payload_generation_config.cc b/payload_generator/payload_generation_config.cc
index 470d622..839960e 100644
--- a/payload_generator/payload_generation_config.cc
+++ b/payload_generator/payload_generation_config.cc
@@ -228,7 +228,16 @@
compression_factor = "4096";
}
size_t compression_factor_value{};
- android::base::ParseUint(compression_factor, &compression_factor_value);
+ if (!android::base::ParseUint(compression_factor,
+ &compression_factor_value)) {
+ LOG(ERROR) << "failed to parse compression factor value: "
+ << compression_factor;
+ return false;
+ }
+ CHECK_EQ(static_cast<int>(compression_factor_value % kBlockSize), 0);
+ CHECK_EQ(static_cast<int>(compression_factor_value &
+ (compression_factor_value - 1)),
+ 0);
metadata->set_compression_factor(compression_factor_value);
}
dynamic_partition_metadata = std::move(metadata);