
The methodology used to generate this CL is documented in https://crbug.com/1098010#c34. No-Try: true Bug: 1098010 Change-Id: Id0e774f0a2778c9651c064cabd38146f92989536 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3894315 Owners-Override: Avi Drissman <avi@chromium.org> Commit-Queue: Mark Mentovai <mark@chromium.org> Reviewed-by: Mark Mentovai <mark@chromium.org> Auto-Submit: Avi Drissman <avi@chromium.org> Cr-Commit-Position: refs/heads/main@{#1046513}
49 lines
1.4 KiB
C++
49 lines
1.4 KiB
C++
// Copyright 2012 The Chromium Authors
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#include "dbus/string_util.h"
|
|
|
|
#include <stddef.h>
|
|
|
|
#include "base/strings/string_util.h"
|
|
|
|
namespace dbus {
|
|
|
|
// This implementation is based upon D-Bus Specification Version 0.19.
|
|
bool IsValidObjectPath(const std::string& value) {
|
|
// A valid object path begins with '/'.
|
|
if (!base::StartsWith(value, "/", base::CompareCase::SENSITIVE))
|
|
return false;
|
|
|
|
// Elements are pieces delimited by '/'. For instance, "org", "chromium",
|
|
// "Foo" are elements of "/org/chromium/Foo".
|
|
int element_length = 0;
|
|
for (size_t i = 1; i < value.size(); ++i) {
|
|
const char c = value[i];
|
|
if (c == '/') {
|
|
// No element may be the empty string.
|
|
if (element_length == 0)
|
|
return false;
|
|
element_length = 0;
|
|
} else {
|
|
// Each element must only contain "[A-Z][a-z][0-9]_".
|
|
const bool is_valid_character =
|
|
('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z') ||
|
|
('0' <= c && c <= '9') || c == '_';
|
|
if (!is_valid_character)
|
|
return false;
|
|
element_length++;
|
|
}
|
|
}
|
|
|
|
// A trailing '/' character is not allowed unless the path is the root path.
|
|
if (value.size() > 1 &&
|
|
base::EndsWith(value, "/", base::CompareCase::SENSITIVE))
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
} // namespace dbus
|