0
Files
src/dbus/string_util.cc
avi@chromium.org 0d8db08c32 Use a direct include of strings headers in crypto/, dbus/, device/.
BUG=247723
TEST=none
TBR=ben@chromium.org

Review URL: https://chromiumcodereview.appspot.com/16123026

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@205457 0039d316-1c4b-4281-b951-d872f2087c98
2013-06-11 07:27:01 +00:00

49 lines
1.4 KiB
C++

// 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/strings/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