1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "dbus/string_util.h"
7 #include "base/strings/string_util.h"
11 bool IsValidObjectPath(const std::string
& value
) {
12 // This implementation is based upon D-Bus Specification Version 0.19.
14 const bool kCaseSensitive
= true;
16 // A valid object path begins with '/'.
17 if (!base::StartsWithASCII(value
, "/", kCaseSensitive
))
20 // Elements are pieces delimited by '/'. For instance, "org", "chromium",
21 // "Foo" are elements of "/org/chromium/Foo".
22 int element_length
= 0;
23 for (size_t i
= 1; i
< value
.size(); ++i
) {
24 const char c
= value
[i
];
26 // No element may be the empty string.
27 if (element_length
== 0)
31 // Each element must only contain "[A-Z][a-z][0-9]_".
32 const bool is_valid_character
=
33 ('A' <= c
&& c
<= 'Z') || ('a' <= c
&& c
<= 'z') ||
34 ('0' <= c
&& c
<= '9') || c
== '_';
35 if (!is_valid_character
)
41 // A trailing '/' character is not allowed unless the path is the root path.
42 if (value
.size() > 1 && base::EndsWith(value
, "/", kCaseSensitive
))