From 1f9d55d2ab4ed2fd8445fbed067467af0e4e9706 Mon Sep 17 00:00:00 2001 From: Ted Bauer Date: Tue, 14 May 2024 15:12:10 -0400 Subject: [PATCH] Fix bug in device path proto reading aconfig_device_paths uses `include_str!` to include a text file containing comma-separated strings with each partition aconfig file. The lib does not handle the escaped newlines and quotation marks. Adds proper handling. Test: cargo t && m -j120 && acloud create --local-image && adb shell aflags list Bug: 340514768 Change-Id: I75214bf02dd962d8291f1654ade8cbce1cda9fde --- tools/aconfig/aconfig_device_paths/src/lib.rs | 34 +++++++++++++++++-- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/tools/aconfig/aconfig_device_paths/src/lib.rs b/tools/aconfig/aconfig_device_paths/src/lib.rs index c5a6bff1f7..7480b3002c 100644 --- a/tools/aconfig/aconfig_device_paths/src/lib.rs +++ b/tools/aconfig/aconfig_device_paths/src/lib.rs @@ -21,11 +21,19 @@ use std::path::PathBuf; use std::fs; +fn read_partition_paths() -> Vec { + include_str!("../partition_aconfig_flags_paths.txt") + .split(',') + .map(|s| s.trim().trim_matches('"')) + .filter(|s| !s.is_empty()) + .map(|s| PathBuf::from(s.to_string())) + .collect() +} + /// Determine all paths that contain an aconfig protobuf file. pub fn parsed_flags_proto_paths() -> Result> { - let mut result: Vec = [include_str!("../partition_aconfig_flags_paths.txt")] - .map(|s| PathBuf::from(s.to_string())) - .to_vec(); + let mut result: Vec = read_partition_paths(); + for dir in fs::read_dir("/apex")? { let dir = dir?; @@ -45,3 +53,23 @@ pub fn parsed_flags_proto_paths() -> Result> { Ok(result) } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_read_partition_paths() { + assert_eq!(read_partition_paths().len(), 4); + + assert_eq!( + read_partition_paths(), + vec![ + PathBuf::from("/system/etc/aconfig_flags.pb"), + PathBuf::from("/system_ext/etc/aconfig_flags.pb"), + PathBuf::from("/product/etc/aconfig_flags.pb"), + PathBuf::from("/vendor/etc/aconfig_flags.pb") + ] + ); + } +}