123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- // Copyright (c) 2012 The Chromium Authors. All rights reserved.
- // 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
|