Merging from the server/server-1.25 branch

svn merge -r107352:108210
svn+ssh://svn.lindenlab.com/svn/linden/branches/server/server-1.25

Merge conflicts were resolved:

  scripts/start-server   : one conflict, kept the "working" version

  indra/llcommon/llversionserver.h : reverted
  indra/newview/Info-SecondLife.plist : reverted
  indra/newview/res/viewerRes.rc : reverted

  indra/newsim/llagentinfo.cpp : kept *both*... "working" had
      is_agent_online, which nothing else had, and the merge had
      isGodAllowed(), part of SEC resolution

  indra/backbone/agent_router.py : kartic & rdw merged and reviewed
      using brains and things

  indra/newsim/llsimhttpresponder.cpp : doesn't exist in trunk, and
      that's OK (even though there was a change for it)
master
Robert Knop 2009-01-19 20:40:59 +00:00
parent 15a6d273cc
commit f1380f2fc3
4 changed files with 42 additions and 60 deletions

View File

@ -663,7 +663,8 @@ S32 LLStringOps::collate(const llwchar* a, const llwchar* b)
namespace LLStringFn
{
void replace_nonprintable(std::basic_string<char>& string, char replacement)
// NOTE - this restricts output to ascii
void replace_nonprintable_in_ascii(std::basic_string<char>& string, char replacement)
{
const char MIN = 0x20;
std::basic_string<char>::size_type len = string.size();
@ -676,23 +677,9 @@ namespace LLStringFn
}
}
void replace_nonprintable(
std::basic_string<llwchar>& string,
llwchar replacement)
{
const llwchar MIN = 0x20;
const llwchar MAX = 0x7f;
std::basic_string<llwchar>::size_type len = string.size();
for(std::basic_string<llwchar>::size_type ii = 0; ii < len; ++ii)
{
if((string[ii] < MIN) || (string[ii] > MAX))
{
string[ii] = replacement;
}
}
}
void replace_nonprintable_and_pipe(std::basic_string<char>& str,
// NOTE - this restricts output to ascii
void replace_nonprintable_and_pipe_in_ascii(std::basic_string<char>& str,
char replacement)
{
const char MIN = 0x20;
@ -707,22 +694,6 @@ namespace LLStringFn
}
}
void replace_nonprintable_and_pipe(std::basic_string<llwchar>& str,
llwchar replacement)
{
const llwchar MIN = 0x20;
const llwchar MAX = 0x7f;
const llwchar PIPE = 0x7c;
std::basic_string<llwchar>::size_type len = str.size();
for(std::basic_string<llwchar>::size_type ii = 0; ii < len; ++ii)
{
if( (str[ii] < MIN) || (str[ii] > MAX) || (str[ii] == PIPE) )
{
str[ii] = replacement;
}
}
}
// https://wiki.lindenlab.com/wiki/Unicode_Guidelines has details on
// allowable code points for XML. Specifically, they are:
// 0x09, 0x0a, 0x0d, and 0x20 on up. JC
@ -748,6 +719,23 @@ namespace LLStringFn
return output;
}
/**
* @brief Replace all control characters (c < 0x20) with replacement in
* string.
*/
void replace_ascii_controlchars(std::basic_string<char>& string, char replacement)
{
const unsigned char MIN = 0x20;
std::basic_string<char>::size_type len = string.size();
for(std::basic_string<char>::size_type ii = 0; ii < len; ++ii)
{
const unsigned char c = (unsigned char) string[ii];
if(c < MIN)
{
string[ii] = replacement;
}
}
}
}

View File

@ -487,48 +487,29 @@ namespace LLStringFn
/**
* @brief Replace all non-printable characters with replacement in
* string.
* NOTE - this will zap non-ascii
*
* @param [in,out] string the to modify. out value is the string
* with zero non-printable characters.
* @param The replacement character. use LL_UNKNOWN_CHAR if unsure.
*/
void replace_nonprintable(
void replace_nonprintable_in_ascii(
std::basic_string<char>& string,
char replacement);
/**
* @brief Replace all non-printable characters with replacement in
* a wide string.
*
* @param [in,out] string the to modify. out value is the string
* with zero non-printable characters.
* @param The replacement character. use LL_UNKNOWN_CHAR if unsure.
*/
void replace_nonprintable(
std::basic_string<llwchar>& string,
llwchar replacement);
/**
* @brief Replace all non-printable characters and pipe characters
* with replacement in a string.
* NOTE - this will zap non-ascii
*
* @param [in,out] the string to modify. out value is the string
* with zero non-printable characters and zero pipe characters.
* @param The replacement character. use LL_UNKNOWN_CHAR if unsure.
*/
void replace_nonprintable_and_pipe(std::basic_string<char>& str,
void replace_nonprintable_and_pipe_in_ascii(std::basic_string<char>& str,
char replacement);
/**
* @brief Replace all non-printable characters and pipe characters
* with replacement in a wide string.
*
* @param [in,out] the string to modify. out value is the string
* with zero non-printable characters and zero pipe characters.
* @param The replacement wide character. use LL_UNKNOWN_CHAR if unsure.
*/
void replace_nonprintable_and_pipe(std::basic_string<llwchar>& str,
llwchar replacement);
/**
* @brief Remove all characters that are not allowed in XML 1.0.
@ -536,6 +517,19 @@ namespace LLStringFn
* Works with US ASCII and UTF-8 encoded strings. JC
*/
std::string strip_invalid_xml(const std::string& input);
/**
* @brief Replace all control characters (0 <= c < 0x20) with replacement in
* string. This is safe for utf-8
*
* @param [in,out] string the to modify. out value is the string
* with zero non-printable characters.
* @param The replacement character. use LL_UNKNOWN_CHAR if unsure.
*/
void replace_ascii_controlchars(
std::basic_string<char>& string,
char replacement);
}
////////////////////////////////////////////////////////////

View File

@ -278,7 +278,7 @@ void LLParcel::setName(const std::string& name)
// The escaping here must match the escaping in the database
// abstraction layer.
mName = name;
LLStringFn::replace_nonprintable(mName, LL_UNKNOWN_CHAR);
LLStringFn::replace_nonprintable_in_ascii(mName, LL_UNKNOWN_CHAR);
}
void LLParcel::setDesc(const std::string& desc)
@ -296,7 +296,7 @@ void LLParcel::setMusicURL(const std::string& url)
// abstraction layer.
// This should really filter the url in some way. Other than
// simply requiring non-printable.
LLStringFn::replace_nonprintable(mMusicURL, LL_UNKNOWN_CHAR);
LLStringFn::replace_nonprintable_in_ascii(mMusicURL, LL_UNKNOWN_CHAR);
}
void LLParcel::setMediaURL(const std::string& url)
@ -306,7 +306,7 @@ void LLParcel::setMediaURL(const std::string& url)
// abstraction layer if it's ever added.
// This should really filter the url in some way. Other than
// simply requiring non-printable.
LLStringFn::replace_nonprintable(mMediaURL, LL_UNKNOWN_CHAR);
LLStringFn::replace_nonprintable_in_ascii(mMediaURL, LL_UNKNOWN_CHAR);
}
void LLParcel::setMediaDesc(const std::string& desc)

View File

@ -894,7 +894,7 @@ void LLCacheName::Impl::processUUIDReply(LLMessageSystem* msg, bool isGroup)
else
{ // is group
msg->getStringFast(_PREHASH_UUIDNameBlock, _PREHASH_GroupName, entry->mGroupName, i);
LLStringFn::replace_nonprintable(entry->mGroupName, LL_UNKNOWN_CHAR);
LLStringFn::replace_ascii_controlchars(entry->mGroupName, LL_UNKNOWN_CHAR);
}
if (!isGroup)