Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d2b588e2 authored by David Pursell's avatar David Pursell
Browse files

adb: fix adbd feature parsing for no features.

Previously the transport features list was only overwritten if a
new feature list was found. However, adbd can reuse the same atransport
object even if the adb server is killed and restarted, so the feature
list was not cleared properly if the newly started adb server didn't
provide one.

This CL fixes the bug by clearing the transport features list whenever
a connection banner is parsed.

Bug: http://b/24405971
Change-Id: Ia6ee6c9a46a621534681f6d4d7df77156b885eb9
parent fca4821e
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -239,6 +239,10 @@ void parse_banner(const std::string& banner, atransport* t) {
    // "device::ro.product.name=x;ro.product.model=y;ro.product.device=z;".
    std::vector<std::string> pieces = android::base::Split(banner, ":");

    // Reset the features list or else if the server sends no features we may
    // keep the existing feature set (http://b/24405971).
    t->SetFeatures("");

    if (pieces.size() > 2) {
        const std::string& props = pieces[2];
        for (auto& prop : android::base::Split(props, ";")) {
+4 −0
Original line number Diff line number Diff line
@@ -796,6 +796,10 @@ std::string FeatureSetToString(const FeatureSet& features) {
}

FeatureSet StringToFeatureSet(const std::string& features_string) {
    if (features_string.empty()) {
        return FeatureSet();
    }

    auto names = android::base::Split(features_string,
                                      {kFeatureStringDelimiter});
    return FeatureSet(names.begin(), names.end());
+3 −0
Original line number Diff line number Diff line
@@ -167,6 +167,9 @@ TEST(transport, SetFeatures) {
    ASSERT_FALSE(t.has_feature("foo"));
    ASSERT_TRUE(t.has_feature("bar"));
    ASSERT_TRUE(t.has_feature("baz"));

    t.SetFeatures("");
    ASSERT_EQ(0U, t.features().size());
}

TEST(transport, parse_banner_no_features) {