| Index: dbus/string_util.cc
|
| diff --git a/dbus/string_util.cc b/dbus/string_util.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..4d4c9da96211f0cb1d9b56a2669d462561bd8745
|
| --- /dev/null
|
| +++ b/dbus/string_util.cc
|
| @@ -0,0 +1,48 @@
|
| +// 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 "base/string_util.h"
|
| +
|
| +namespace dbus {
|
| +
|
| +bool IsValidObjectPath(const std::string& value) {
|
| + // This implementation is based upon D-Bus Specification Version 0.19.
|
| +
|
| + const bool kCaseSensitive = true;
|
| +
|
| + // A valid object path begins with '/'.
|
| + if (!StartsWithASCII(value, "/", kCaseSensitive))
|
| + 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 && EndsWith(value, "/", kCaseSensitive))
|
| + return false;
|
| +
|
| + return true;
|
| +}
|
| +
|
| +} // namespace dbus
|
|
|