[M120 Migration][VD] Fix url crash in RequestCertificateConfirm
[platform/framework/web/chromium-efl.git] / dbus / string_util.cc
1 // Copyright 2012 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "dbus/string_util.h"
6
7 #include <stddef.h>
8
9 #include "base/strings/string_util.h"
10
11 namespace dbus {
12
13 // This implementation is based upon D-Bus Specification Version 0.19.
14 bool IsValidObjectPath(const std::string& value) {
15   // A valid object path begins with '/'.
16   if (!base::StartsWith(value, "/", base::CompareCase::SENSITIVE))
17     return false;
18
19   // Elements are pieces delimited by '/'. For instance, "org", "chromium",
20   // "Foo" are elements of "/org/chromium/Foo".
21   int element_length = 0;
22   for (size_t i = 1; i < value.size(); ++i) {
23     const char c = value[i];
24     if (c == '/') {
25       // No element may be the empty string.
26       if (element_length == 0)
27         return false;
28       element_length = 0;
29     } else {
30       // Each element must only contain "[A-Z][a-z][0-9]_".
31       const bool is_valid_character =
32           ('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z') ||
33           ('0' <= c && c <= '9') || c == '_';
34       if (!is_valid_character)
35         return false;
36       element_length++;
37     }
38   }
39
40   // A trailing '/' character is not allowed unless the path is the root path.
41   if (value.size() > 1 &&
42       base::EndsWith(value, "/", base::CompareCase::SENSITIVE))
43     return false;
44
45   return true;
46 }
47
48 }  // namespace dbus