forked from chromium/chromium
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Explicitly CHECK arguments in dbus::MessageWriter::AppendString/Objec…
…tPath Add dbus::IsStringValidObjectPath() and dbus::ObjectPath::IsValid() BUG=129335 TEST=dbus_unittests Review URL: https://chromiumcodereview.appspot.com/10502011 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@140489 0039d316-1c4b-4281-b951-d872f2087c98
- Loading branch information
hashimoto@chromium.org
committed
Jun 5, 2012
1 parent
44437a2
commit 43fa5b8
Showing
7 changed files
with
109 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
// 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. | ||
|
||
#ifndef DBUS_STRING_UTIL_H_ | ||
#define DBUS_STRING_UTIL_H_ | ||
#pragma once | ||
|
||
#include <string> | ||
|
||
namespace dbus { | ||
|
||
// Returns true if the specified string is a valid object path. | ||
bool IsValidObjectPath(const std::string& value); | ||
|
||
} // namespace dbus | ||
|
||
#endif // DBUS_STRING_UTIL_H_ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
// 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 "testing/gtest/include/gtest/gtest.h" | ||
|
||
TEST(StringUtilTest, IsValidObjectPath) { | ||
EXPECT_TRUE(dbus::IsValidObjectPath("/")); | ||
EXPECT_TRUE(dbus::IsValidObjectPath("/foo/bar")); | ||
EXPECT_TRUE(dbus::IsValidObjectPath("/hoge_fuga/piyo123")); | ||
// Empty string. | ||
EXPECT_FALSE(dbus::IsValidObjectPath("")); | ||
// Emptyr elemnt. | ||
EXPECT_FALSE(dbus::IsValidObjectPath("//")); | ||
EXPECT_FALSE(dbus::IsValidObjectPath("/foo//bar")); | ||
EXPECT_FALSE(dbus::IsValidObjectPath("/foo///bar")); | ||
// Trailing '/'. | ||
EXPECT_FALSE(dbus::IsValidObjectPath("/foo/")); | ||
EXPECT_FALSE(dbus::IsValidObjectPath("/foo/bar/")); | ||
// Not beginning with '/'. | ||
EXPECT_FALSE(dbus::IsValidObjectPath("foo/bar")); | ||
// Invalid characters. | ||
EXPECT_FALSE(dbus::IsValidObjectPath("/foo.bar")); | ||
EXPECT_FALSE(dbus::IsValidObjectPath("/foo/*")); | ||
EXPECT_FALSE(dbus::IsValidObjectPath("/foo/bar(1)")); | ||
} |