diff options
author | Josh Bell <josh@lindenlab.com> | 2008-03-07 17:26:51 +0000 |
---|---|---|
committer | Josh Bell <josh@lindenlab.com> | 2008-03-07 17:26:51 +0000 |
commit | 31f7f6c0018ecbbc55986035e935f5e42a33ff16 (patch) | |
tree | a1df38c525b5f47eb7b592518342478fe0239b37 /indra/lscript/lscript_byteconvert.h | |
parent | dc27e10bdd158e0f57b3e07a5946cb8978b916e8 (diff) |
svn merge -r 80990:81720 svn+ssh://svn.lindenlab.com/svn/linden/branches/Branch_1-19-1-Server --> release
Reg-api merge is the bulk of the diff, it's actually not so bad. Change summary:
* Fixed a bogus HTTP/curl warning and cleaned up one line of code for clarity
* extra '.' in FQDN names/extra . in the non-FQDN case, which is a syntax error
* DEV-11542 Joining two parcels destroys search relevance of a store.
* Fixed bug preventing users who turn off email notification from getting offline messages at login
* Updated version numbers
* New reg-api (w00t!)
* DEV-11427 / DEV-11399 - LSL slowdown from strncpy buffer-clearing overhead
* DEV-11359 Hide music URL should be on by default
* Update to r89 of eventlet
* QAR-347 "SEC-28 - It is possible to rez any object, whether you own it or not."
* QAR-336 Additional logging to track teleport failures
* DEV-11397 - use the slave db for read queries for crons
* Fix to turn off PEAR debug logging
* Copied code from eventlet.coros to make an Updater that won't die so easily. (multiagent-chat)
* Various chicanery with dir-find query
* Emergency fix for bad FORCE INDEX on user table when actually searching on the user_last_name table
* DEV-11124 : Modify backbone service proxy so that we know which web-ds host a dataservice is actually called
* Fixes for DEV-5883 : Test improved-instant-message
Diffstat (limited to 'indra/lscript/lscript_byteconvert.h')
-rw-r--r-- | indra/lscript/lscript_byteconvert.h | 41 |
1 files changed, 20 insertions, 21 deletions
diff --git a/indra/lscript/lscript_byteconvert.h b/indra/lscript/lscript_byteconvert.h index d0a5d574d0..e8b727b737 100644 --- a/indra/lscript/lscript_byteconvert.h +++ b/indra/lscript/lscript_byteconvert.h @@ -166,8 +166,15 @@ inline void bytestream_int2float(U8 *stream, S32 &offset) inline bool bytestream2char(char *buffer, const U8 *stream, S32 &offset, S32 buffsize) { S32 source_len = strlen( (const char *)stream+offset ); - strncpy( buffer, (const char *)stream+offset, buffsize-1 ); - buffer[buffsize-1] = 0; + S32 copy_len = buffsize - 1; + if( copy_len > source_len ) + { + copy_len = source_len; + } + + // strncpy without \0 padding overhead + memcpy( buffer, stream+offset, copy_len ); + buffer[copy_len] = 0; offset += source_len + 1; // advance past source string, include terminating '\0' @@ -1073,28 +1080,20 @@ inline void safe_instruction_float2bytestream(U8 *stream, S32 &offset, F32 value inline void safe_instruction_bytestream2char(char *buffer, U8 *stream, S32 &offset, S32 buffsize) { - bool safe; - while ( (safe = safe_instruction_check_address(stream, offset, 1)) - && buffsize-- - &&(*buffer++ = *(stream + offset++))) - ; + // This varies from the old method. Previously, we would copy up until we got an error, + // then halt the script via safe_isntruction_check_address. Now we don't bother + // copying a thing if there's an error. - // Return if it ended in a null (success) or if script error handling is taking over - if( !safe || (0 == *(buffer-1)) ) + if( safe_instruction_check_address(stream, offset, strlen( (const char *)stream + offset ) + 1 ) ) { - return; // Yep. Success. + // Takes the same parms as this function. Won't overread, per above check. + bytestream2char( buffer, stream, offset, buffsize ); + } + else + { + // Truncate - no point in copying + *buffer = 0; } - - // Defensive mode. We copied at least one char and ran out of space before - // null termination. Add the terminator... - *(buffer-1) = 0; - - // ...and advance offset past the end of the data as if we copied the rest. If we - // violate the safety check, script error handling will protect us. No need to - // keep advancing. - while( safe_instruction_check_address(stream, offset, 1) - && *( stream + offset++ ) ) - ; } inline void safe_instruction_bytestream_count_char(U8 *stream, S32 &offset) |