diff options
| -rw-r--r-- | indra/llvfs/CMakeLists.txt | 34 | ||||
| -rw-r--r-- | indra/llvfs/lldiriterator.cpp | 21 | ||||
| -rw-r--r-- | indra/llvfs/tests/lldiriterator_test.cpp | 65 | ||||
| -rw-r--r-- | indra/newview/lllogchat.cpp | 2 | 
4 files changed, 105 insertions, 17 deletions
| diff --git a/indra/llvfs/CMakeLists.txt b/indra/llvfs/CMakeLists.txt index b6d1ce61e5..2c581cf8d6 100644 --- a/indra/llvfs/CMakeLists.txt +++ b/indra/llvfs/CMakeLists.txt @@ -62,11 +62,15 @@ list(APPEND llvfs_SOURCE_FILES ${llvfs_HEADER_FILES})  add_library (llvfs ${llvfs_SOURCE_FILES}) -target_link_libraries(llvfs +set(vfs_BOOST_LIBRARIES      ${BOOST_FILESYSTEM_LIBRARY}      ${BOOST_SYSTEM_LIBRARY}      ) +target_link_libraries(llvfs +    ${vfs_BOOST_LIBRARIES} +    ) +  if (DARWIN)    include(CMakeFindFrameworks)    find_library(CARBON_LIBRARY Carbon) @@ -76,15 +80,21 @@ endif (DARWIN)  # Add tests  if (LL_TESTS) -	include(LLAddBuildTest) -	# UNIT TESTS -	SET(llvfs_TEST_SOURCE_FILES -	  # none so far -	  ) -	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}") +    include(LLAddBuildTest) +    # UNIT TESTS +    SET(llvfs_TEST_SOURCE_FILES +	lldiriterator.cpp +	) + +    set_source_files_properties(lldiriterator.cpp +	PROPERTIES +	LL_TEST_ADDITIONAL_LIBRARIES "${vfs_BOOST_LIBRARIES}" +	) +    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) diff --git a/indra/llvfs/lldiriterator.cpp b/indra/llvfs/lldiriterator.cpp index 041436ed92..25550321f0 100644 --- a/indra/llvfs/lldiriterator.cpp +++ b/indra/llvfs/lldiriterator.cpp @@ -121,6 +121,14 @@ bool LLDirIterator::Impl::next(std::string &fname)  	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 regex; @@ -135,9 +143,6 @@ std::string glob_to_regex(const std::string& glob)  		switch (c)  		{ -			case '.': -				regex+="\\."; -				break;  			case '*':  				if (glob.begin() == i)  				{ @@ -170,8 +175,16 @@ std::string glob_to_regex(const std::string& glob)  			case '!':  				regex+= square_brace_open ? '^' : c;  				break; +			case '.': // This collection have different regex meaning +			case '^': // and so need escaping. +			case '(':  +			case ')': +			case '+': +			case '|': +			case '$': +				regex += '\\';   			default: -				regex+=c; +				regex += c;  				break;  		} diff --git a/indra/llvfs/tests/lldiriterator_test.cpp b/indra/llvfs/tests/lldiriterator_test.cpp new file mode 100644 index 0000000000..505d86faa7 --- /dev/null +++ b/indra/llvfs/tests/lldiriterator_test.cpp @@ -0,0 +1,65 @@ +/** + * @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(); +    } + +} diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp index efc4e23838..ebb5912ace 100644 --- a/indra/newview/lllogchat.cpp +++ b/indra/newview/lllogchat.cpp @@ -230,7 +230,7 @@ std::string LLLogChat::makeLogFileName(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);  	while (position != filename.npos)  	{ | 
