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 // This implementation is based upon D-Bus Specification Version 0.19.
12 bool IsValidObjectPath(const std::string
& value
) {
13 // A valid object path begins with '/'.
14 if (!base::StartsWith(value
, "/", base::CompareCase::SENSITIVE
))
17 // Elements are pieces delimited by '/'. For instance, "org", "chromium",
18 // "Foo" are elements of "/org/chromium/Foo".
19 int element_length
= 0;
20 for (size_t i
= 1; i
< value
.size(); ++i
) {
21 const char c
= value
[i
];
23 // No element may be the empty string.
24 if (element_length
== 0)
28 // Each element must only contain "[A-Z][a-z][0-9]_".
29 const bool is_valid_character
=
30 ('A' <= c
&& c
<= 'Z') || ('a' <= c
&& c
<= 'z') ||
31 ('0' <= c
&& c
<= '9') || c
== '_';
32 if (!is_valid_character
)
38 // A trailing '/' character is not allowed unless the path is the root path.
39 if (value
.size() > 1 &&
40 base::EndsWith(value
, "/", base::CompareCase::SENSITIVE
))