Skip to content
Snippets Groups Projects
Commit 80b81279 authored by Squire's avatar Squire
Browse files

CHOP-662 Merged into viewer-development-crash-horde

parents 84c44b8f 8c653512
No related branches found
No related tags found
No related merge requests found
...@@ -62,11 +62,15 @@ list(APPEND llvfs_SOURCE_FILES ${llvfs_HEADER_FILES}) ...@@ -62,11 +62,15 @@ list(APPEND llvfs_SOURCE_FILES ${llvfs_HEADER_FILES})
add_library (llvfs ${llvfs_SOURCE_FILES}) add_library (llvfs ${llvfs_SOURCE_FILES})
target_link_libraries(llvfs set(vfs_BOOST_LIBRARIES
${BOOST_FILESYSTEM_LIBRARY} ${BOOST_FILESYSTEM_LIBRARY}
${BOOST_SYSTEM_LIBRARY} ${BOOST_SYSTEM_LIBRARY}
) )
target_link_libraries(llvfs
${vfs_BOOST_LIBRARIES}
)
if (DARWIN) if (DARWIN)
include(CMakeFindFrameworks) include(CMakeFindFrameworks)
find_library(CARBON_LIBRARY Carbon) find_library(CARBON_LIBRARY Carbon)
...@@ -76,15 +80,21 @@ endif (DARWIN) ...@@ -76,15 +80,21 @@ endif (DARWIN)
# Add tests # Add tests
if (LL_TESTS) if (LL_TESTS)
include(LLAddBuildTest) include(LLAddBuildTest)
# UNIT TESTS # UNIT TESTS
SET(llvfs_TEST_SOURCE_FILES SET(llvfs_TEST_SOURCE_FILES
# none so far lldiriterator.cpp
) )
LL_ADD_PROJECT_UNIT_TESTS(llvfs "${llvfs_TEST_SOURCE_FILES}")
set_source_files_properties(lldiriterator.cpp
# INTEGRATION TESTS PROPERTIES
set(test_libs llmath llcommon llvfs ${LLCOMMON_LIBRARIES} ${WINDOWS_LIBRARIES}) LL_TEST_ADDITIONAL_LIBRARIES "${vfs_BOOST_LIBRARIES}"
# TODO: Some of these need refactoring to be proper Unit tests rather than Integration tests. )
LL_ADD_INTEGRATION_TEST(lldir "" "${test_libs}") LL_ADD_PROJECT_UNIT_TESTS(llvfs "${llvfs_TEST_SOURCE_FILES}")
# INTEGRATION TESTS
set(test_libs llmath llcommon llvfs ${LLCOMMON_LIBRARIES} ${WINDOWS_LIBRARIES})
# TODO: Some of these need refactoring to be proper Unit tests rather than Integration tests.
LL_ADD_INTEGRATION_TEST(lldir "" "${test_libs}")
endif (LL_TESTS) endif (LL_TESTS)
...@@ -121,6 +121,14 @@ bool LLDirIterator::Impl::next(std::string &fname) ...@@ -121,6 +121,14 @@ bool LLDirIterator::Impl::next(std::string &fname)
return found; return found;
} }
/**
Converts the incoming glob into a regex. This involves
converting incoming glob expressions to regex equivilents and
at the same time, escaping any regex meaningful characters which
do not have glob meaning, i.e.
.()+|^$
in the input.
*/
std::string glob_to_regex(const std::string& glob) std::string glob_to_regex(const std::string& glob)
{ {
std::string regex; std::string regex;
...@@ -135,9 +143,6 @@ std::string glob_to_regex(const std::string& glob) ...@@ -135,9 +143,6 @@ std::string glob_to_regex(const std::string& glob)
switch (c) switch (c)
{ {
case '.':
regex+="\\.";
break;
case '*': case '*':
if (glob.begin() == i) if (glob.begin() == i)
{ {
...@@ -170,8 +175,16 @@ std::string glob_to_regex(const std::string& glob) ...@@ -170,8 +175,16 @@ std::string glob_to_regex(const std::string& glob)
case '!': case '!':
regex+= square_brace_open ? '^' : c; regex+= square_brace_open ? '^' : c;
break; break;
case '.': // This collection have different regex meaning
case '^': // and so need escaping.
case '(':
case ')':
case '+':
case '|':
case '$':
regex += '\\';
default: default:
regex+=c; regex += c;
break; break;
} }
......
/**
* @file lldiriterator_test.cpp
* @date 2011-06
* @brief LLDirIterator test cases.
*
* $LicenseInfo:firstyear=2011&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2011, Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.,
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
#include "linden_common.h"
#include "lltut.h"
#include "../lldiriterator.h"
namespace tut
{
struct LLDirIteratorFixture
{
LLDirIteratorFixture()
{
}
};
typedef test_group<LLDirIteratorFixture> LLDirIteratorTest_factory;
typedef LLDirIteratorTest_factory::object LLDirIteratorTest_t;
LLDirIteratorTest_factory tf("LLDirIterator");
/*
CHOP-662 was originally introduced to deal with crashes deleting files from
a directory (VWR-25500). However, this introduced a crash looking for
old chat logs as the glob_to_regex function in lldiriterator wasn't escaping lots of regexp characters
*/
void test_chop_662(void)
{
// Check a selection of bad group names from the crash reports
LLDirIterator iter(".","+bad-group-name]+??-??.*");
LLDirIterator iter1(".","))--@---bad-group-name2((??-??.*\\.txt");
LLDirIterator iter2(".","__^v--x)Cuide d sua vida(x--v^__??-??.*");
}
template<> template<>
void LLDirIteratorTest_t::test<1>()
{
test_chop_662();
}
}
...@@ -230,7 +230,7 @@ std::string LLLogChat::makeLogFileName(std::string filename) ...@@ -230,7 +230,7 @@ std::string LLLogChat::makeLogFileName(std::string filename)
std::string LLLogChat::cleanFileName(std::string filename) std::string LLLogChat::cleanFileName(std::string filename)
{ {
std::string invalidChars = "\"\'\\/?*:.<>|"; std::string invalidChars = "\"\'\\/?*:.<>|[]{}~"; // Cannot match glob or illegal filename chars
std::string::size_type position = filename.find_first_of(invalidChars); std::string::size_type position = filename.find_first_of(invalidChars);
while (position != filename.npos) while (position != filename.npos)
{ {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment