From f6276d08ec2d6a7ce1ac568c77771162bd8cece5 Mon Sep 17 00:00:00 2001 From: Jacek Antonelli Date: Wed, 8 Oct 2008 00:59:21 -0500 Subject: Second Life viewer sources 1.21.5-RC --- linden/indra/cmake/MySQL.cmake | 4 +- linden/indra/llcommon/llversionviewer.h | 2 +- linden/indra/llmessage/llurlrequest.cpp | 42 +- linden/indra/llmessage/llxfermanager.cpp | 119 ++- linden/indra/llmessage/llxfermanager.h | 16 + linden/indra/newview/llfloaterregioninfo.cpp | 2 + linden/indra/newview/llpaneldirland.cpp | 2 + linden/indra/newview/llstartup.cpp | 1 + linden/indra/newview/lltexturecache.cpp | 2 +- linden/indra/newview/lltoolgrab.cpp | 6 +- linden/indra/newview/lltoolgrab.h | 1 + linden/indra/newview/llviewermessage.cpp | 5 + .../indra/newview/skins/default/xui/de/alerts.xml | 9 +- .../newview/skins/default/xui/de/floater_about.xml | 6 +- .../skins/default/xui/de/floater_color_picker.xml | 2 +- .../skins/default/xui/de/floater_inspect.xml | 10 +- .../skins/default/xui/de/floater_select_key.xml | 3 +- .../skins/default/xui/de/floater_snapshot.xml | 61 +- .../newview/skins/default/xui/de/floater_tos.xml | 4 +- .../newview/skins/default/xui/de/panel_avatar.xml | 181 ++-- .../newview/skins/default/xui/de/panel_login.xml | 2 +- .../default/xui/de/panel_preferences_input.xml | 31 +- .../default/xui/de/panel_preferences_network.xml | 2 +- .../skins/default/xui/de/panel_region_debug.xml | 2 +- .../indra/newview/skins/default/xui/de/strings.xml | 33 +- .../newview/skins/default/xui/en-us/alerts.xml | 20 +- .../skins/default/xui/en-us/floater_snapshot.xml | 4 +- .../skins/default/xui/en-us/panel_avatar.xml | 4 +- .../default/xui/en-us/panel_preferences_input.xml | 10 +- .../xui/en-us/panel_preferences_network.xml | 15 +- .../default/xui/en-us/panel_preferences_voice.xml | 12 +- .../default/xui/en-us/panel_preferences_web.xml | 8 +- .../skins/default/xui/en-us/panel_region_debug.xml | 6 +- .../indra/newview/skins/default/xui/fr/alerts.xml | 1041 ++++++-------------- .../newview/skins/default/xui/fr/floater_about.xml | 2 +- .../skins/default/xui/fr/floater_about_land.xml | 210 ++-- .../default/xui/fr/floater_animation_preview.xml | 89 +- .../skins/default/xui/fr/floater_auction.xml | 11 +- .../skins/default/xui/fr/floater_avatar_picker.xml | 4 +- .../default/xui/fr/floater_avatar_textures.xml | 20 +- .../skins/default/xui/fr/floater_build_options.xml | 6 +- .../newview/skins/default/xui/fr/floater_bumps.xml | 14 +- .../skins/default/xui/fr/floater_buy_contents.xml | 8 +- .../skins/default/xui/fr/floater_buy_currency.xml | 10 +- .../skins/default/xui/fr/floater_buy_land.xml | 137 ++- .../skins/default/xui/fr/floater_buy_object.xml | 4 +- .../skins/default/xui/fr/floater_chat_history.xml | 19 +- .../skins/default/xui/fr/floater_choose_group.xml | 2 +- .../skins/default/xui/fr/floater_clothing.xml | 6 +- .../skins/default/xui/fr/floater_color_picker.xml | 25 +- .../skins/default/xui/fr/floater_customize.xml | 243 +++-- .../default/xui/fr/floater_day_cycle_options.xml | 6 +- .../skins/default/xui/fr/floater_directory.xml | 67 +- .../skins/default/xui/fr/floater_env_settings.xml | 20 +- .../skins/default/xui/fr/floater_gesture.xml | 19 +- .../skins/default/xui/fr/floater_god_tools.xml | 126 +-- .../skins/default/xui/fr/floater_group_info.xml | 182 ++-- .../default/xui/fr/floater_hardware_settings.xml | 6 +- .../newview/skins/default/xui/fr/floater_html.xml | 6 +- .../newview/skins/default/xui/fr/floater_im.xml | 6 +- .../skins/default/xui/fr/floater_image_preview.xml | 26 +- .../skins/default/xui/fr/floater_import.xml | 8 +- .../skins/default/xui/fr/floater_inspect.xml | 10 +- .../default/xui/fr/floater_instant_message.xml | 17 +- .../xui/fr/floater_instant_message_ad_hoc.xml | 6 +- .../xui/fr/floater_instant_message_group.xml | 11 +- .../skins/default/xui/fr/floater_inventory.xml | 44 +- .../xui/fr/floater_inventory_item_properties.xml | 38 +- .../xui/fr/floater_inventory_view_finder.xml | 18 +- .../skins/default/xui/fr/floater_joystick.xml | 22 +- .../skins/default/xui/fr/floater_land_holdings.xml | 30 +- .../default/xui/fr/floater_live_lsleditor.xml | 8 +- .../skins/default/xui/fr/floater_media_browser.xml | 13 +- .../skins/default/xui/fr/floater_moveview.xml | 12 +- .../newview/skins/default/xui/fr/floater_mute.xml | 12 +- .../default/xui/fr/floater_name_description.xml | 4 +- .../skins/default/xui/fr/floater_new_im.xml | 6 +- .../default/xui/fr/floater_new_outfit_dialog.xml | 90 +- .../skins/default/xui/fr/floater_openobject.xml | 2 +- .../newview/skins/default/xui/fr/floater_pay.xml | 15 +- .../skins/default/xui/fr/floater_pay_object.xml | 18 +- .../skins/default/xui/fr/floater_post_process.xml | 2 +- .../skins/default/xui/fr/floater_postcard.xml | 2 +- .../skins/default/xui/fr/floater_preferences.xml | 2 +- .../default/xui/fr/floater_preview_animation.xml | 10 +- .../xui/fr/floater_preview_embedded_texture.xml | 4 +- .../default/xui/fr/floater_preview_gesture.xml | 67 +- .../default/xui/fr/floater_preview_notecard.xml | 2 +- .../fr/floater_preview_notecard_keep_discard.xml | 2 +- .../skins/default/xui/fr/floater_preview_sound.xml | 12 +- .../default/xui/fr/floater_preview_texture.xml | 4 +- .../fr/floater_preview_texture_keep_discard.xml | 6 +- .../default/xui/fr/floater_price_for_listing.xml | 13 +- .../skins/default/xui/fr/floater_report_abuse.xml | 52 +- .../skins/default/xui/fr/floater_report_bug.xml | 35 +- .../default/xui/fr/floater_script_ed_panel.xml | 6 +- .../default/xui/fr/floater_script_preview.xml | 2 +- .../skins/default/xui/fr/floater_script_search.xml | 2 +- .../skins/default/xui/fr/floater_select_key.xml | 2 +- .../skins/default/xui/fr/floater_sell_land.xml | 38 +- .../default/xui/fr/floater_settings_debug.xml | 2 +- .../xui/fr/floater_skin_preview_template.xml | 9 +- .../skins/default/xui/fr/floater_snapshot.xml | 39 +- .../skins/default/xui/fr/floater_sound_preview.xml | 4 +- .../skins/default/xui/fr/floater_telehub.xml | 28 +- .../skins/default/xui/fr/floater_texture_ctrl.xml | 10 +- .../newview/skins/default/xui/fr/floater_tools.xml | 240 ++--- .../skins/default/xui/fr/floater_top_objects.xml | 30 +- .../newview/skins/default/xui/fr/floater_water.xml | 15 +- .../default/xui/fr/floater_windlight_options.xml | 22 +- .../skins/default/xui/fr/floater_world_map.xml | 57 +- .../skins/default/xui/fr/menu_inventory.xml | 75 +- .../newview/skins/default/xui/fr/menu_login.xml | 4 +- .../skins/default/xui/fr/menu_pie_attachment.xml | 2 +- .../newview/skins/default/xui/fr/menu_pie_land.xml | 2 +- .../skins/default/xui/fr/menu_pie_object.xml | 4 +- .../newview/skins/default/xui/fr/menu_pie_self.xml | 2 +- .../newview/skins/default/xui/fr/menu_slurl.xml | 4 +- .../newview/skins/default/xui/fr/menu_viewer.xml | 28 +- .../indra/newview/skins/default/xui/fr/notify.xml | 380 ++++--- .../newview/skins/default/xui/fr/panel_audio.xml | 14 +- .../newview/skins/default/xui/fr/panel_avatar.xml | 235 +++-- .../default/xui/fr/panel_avatar_classified.xml | 20 +- .../skins/default/xui/fr/panel_avatar_pick.xml | 8 +- .../skins/default/xui/fr/panel_chat_bar.xml | 28 +- .../skins/default/xui/fr/panel_classified.xml | 14 +- .../newview/skins/default/xui/fr/panel_event.xml | 30 +- .../newview/skins/default/xui/fr/panel_friends.xml | 15 +- .../newview/skins/default/xui/fr/panel_group.xml | 9 +- .../skins/default/xui/fr/panel_group_finder.xml | 6 +- .../skins/default/xui/fr/panel_group_general.xml | 61 +- .../skins/default/xui/fr/panel_group_invite.xml | 10 +- .../default/xui/fr/panel_group_land_money.xml | 45 +- .../skins/default/xui/fr/panel_group_notices.xml | 70 +- .../skins/default/xui/fr/panel_group_roles.xml | 118 +-- .../skins/default/xui/fr/panel_group_voting.xml | 87 +- .../newview/skins/default/xui/fr/panel_groups.xml | 8 +- .../skins/default/xui/fr/panel_land_covenant.xml | 20 +- .../newview/skins/default/xui/fr/panel_login.xml | 7 +- .../skins/default/xui/fr/panel_overlaybar.xml | 21 +- .../newview/skins/default/xui/fr/panel_place.xml | 8 +- .../skins/default/xui/fr/panel_place_small.xml | 8 +- .../default/xui/fr/panel_preferences_audio.xml | 66 +- .../default/xui/fr/panel_preferences_chat.xml | 38 +- .../default/xui/fr/panel_preferences_general.xml | 14 +- .../default/xui/fr/panel_preferences_graphics1.xml | 30 +- .../skins/default/xui/fr/panel_preferences_im.xml | 17 +- .../default/xui/fr/panel_preferences_input.xml | 21 +- .../default/xui/fr/panel_preferences_network.xml | 26 +- .../default/xui/fr/panel_preferences_popups.xml | 4 +- .../default/xui/fr/panel_preferences_voice.xml | 8 +- .../skins/default/xui/fr/panel_preferences_web.xml | 4 +- .../skins/default/xui/fr/panel_region_covenant.xml | 28 +- .../skins/default/xui/fr/panel_region_debug.xml | 47 +- .../skins/default/xui/fr/panel_region_estate.xml | 24 +- .../skins/default/xui/fr/panel_region_general.xml | 34 +- .../skins/default/xui/fr/panel_region_terrain.xml | 22 +- .../skins/default/xui/fr/panel_region_texture.xml | 32 +- .../default/xui/fr/panel_speaker_controls.xml | 4 +- .../skins/default/xui/fr/panel_status_bar.xml | 19 +- .../newview/skins/default/xui/fr/panel_toolbar.xml | 10 +- .../skins/default/xui/fr/panel_top_pick.xml | 6 +- .../skins/default/xui/fr/panel_voice_options.xml | 4 +- .../newview/skins/default/xui/fr/role_actions.xml | 179 ++-- .../indra/newview/skins/default/xui/fr/strings.xml | 11 +- .../indra/newview/skins/default/xui/ja/alerts.xml | 6 +- .../newview/skins/default/xui/ja/floater_about.xml | 2 +- .../skins/default/xui/ja/floater_snapshot.xml | 59 +- .../newview/skins/default/xui/ja/panel_avatar.xml | 190 ++-- .../default/xui/ja/panel_preferences_audio.xml | 4 +- .../default/xui/ja/panel_preferences_chat.xml | 2 +- .../default/xui/ja/panel_preferences_general.xml | 4 +- .../default/xui/ja/panel_preferences_graphics1.xml | 2 +- .../default/xui/ja/panel_preferences_input.xml | 39 +- .../default/xui/ja/panel_preferences_network.xml | 2 +- .../default/xui/ja/panel_preferences_popups.xml | 4 +- .../default/xui/ja/panel_preferences_voice.xml | 2 +- .../skins/default/xui/ja/panel_preferences_web.xml | 8 +- .../indra/newview/skins/default/xui/ja/strings.xml | 33 +- .../newview/skins/default/xui/ko/floater_about.xml | 2 +- .../skins/default/xui/ko/floater_snapshot.xml | 57 +- .../newview/skins/default/xui/ko/panel_avatar.xml | 185 ++-- .../default/xui/ko/panel_preferences_input.xml | 31 +- .../default/xui/ko/panel_preferences_network.xml | 2 +- .../indra/newview/skins/default/xui/ko/strings.xml | 33 +- .../default/xui/pt/panel_preferences_network.xml | 2 +- .../skins/silver/xui/en-us/panel_avatar.xml | 4 +- linden/indra/test/llapp_tut.cpp | 2 +- linden/scripts/messages/message_template.msg | 3 +- 189 files changed, 3248 insertions(+), 3466 deletions(-) diff --git a/linden/indra/cmake/MySQL.cmake b/linden/indra/cmake/MySQL.cmake index 97dd091..e124ebb 100644 --- a/linden/indra/cmake/MySQL.cmake +++ b/linden/indra/cmake/MySQL.cmake @@ -14,8 +14,8 @@ if (WINDOWS) elseif (DARWIN) set(MYSQL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include) set(MYSQL_LIBRARIES - optimized ${LIBS_PREBUILT_DIRS_RELEASE}/libmysqlclient.a - debug ${LIBS_PREBUILT_DIRS_DEBUG}/libmysqlclient.a + optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libmysqlclient.a + debug ${ARCH_PREBUILT_DIRS_DEBUG}/libmysqlclient.a ) else (WINDOWS) set(MYSQL_FIND_REQUIRED) diff --git a/linden/indra/llcommon/llversionviewer.h b/linden/indra/llcommon/llversionviewer.h index d7a4e3d..739a30a 100644 --- a/linden/indra/llcommon/llversionviewer.h +++ b/linden/indra/llcommon/llversionviewer.h @@ -34,7 +34,7 @@ const S32 LL_VERSION_MAJOR = 1; const S32 LL_VERSION_MINOR = 21; -const S32 LL_VERSION_PATCH = 4; +const S32 LL_VERSION_PATCH = 5; const S32 LL_VERSION_BUILD = 0; const char * const LL_CHANNEL = "Second Life Release"; diff --git a/linden/indra/llmessage/llurlrequest.cpp b/linden/indra/llmessage/llurlrequest.cpp index fbd002b..ee62798 100644 --- a/linden/indra/llmessage/llurlrequest.cpp +++ b/linden/indra/llmessage/llurlrequest.cpp @@ -484,27 +484,29 @@ static size_t headerCallback(void* data, size_t size, size_t nmemb, void* user) // Per HTTP spec the first header line must be the status line. if (!complete->haveHTTPStatus()) { - std::string::iterator end = header.end(); - std::string::iterator pos1 = std::find(header.begin(), end, ' '); - if (pos1 != end) ++pos1; - std::string::iterator pos2 = std::find(pos1, end, ' '); - if (pos2 != end) ++pos2; - std::string::iterator pos3 = std::find(pos2, end, '\r'); - - std::string version(header.begin(), pos1); - std::string status(pos1, pos2); - std::string reason(pos2, pos3); - - int statusCode = atoi(status.c_str()); - if (statusCode > 0) + if (header.substr(0,5) == "HTTP/") { - complete->httpStatus((U32)statusCode, reason); - } - else - { - llwarns << "Unable to parse http response status line: " - << header << llendl; - complete->httpStatus(499,"Unable to parse status line."); + std::string::iterator end = header.end(); + std::string::iterator pos1 = std::find(header.begin(), end, ' '); + if (pos1 != end) ++pos1; + std::string::iterator pos2 = std::find(pos1, end, ' '); + if (pos2 != end) ++pos2; + std::string::iterator pos3 = std::find(pos2, end, '\r'); + + std::string version(header.begin(), pos1); + std::string status(pos1, pos2); + std::string reason(pos2, pos3); + + int statusCode = atoi(status.c_str()); + if (statusCode >= 300 && statusCode < 400) + { + // This is a redirect, ignore it and all headers + // until we find a normal status code. + } + else if (statusCode > 0) + { + complete->httpStatus((U32)statusCode, reason); + } } return header_len; } diff --git a/linden/indra/llmessage/llxfermanager.cpp b/linden/indra/llmessage/llxfermanager.cpp index f40612c..8173b7c 100644 --- a/linden/indra/llmessage/llxfermanager.cpp +++ b/linden/indra/llmessage/llxfermanager.cpp @@ -713,6 +713,78 @@ void LLXferManager::sendConfirmPacket (LLMessageSystem *mesgsys, U64 id, S32 pac /////////////////////////////////////////////////////////// +static bool find_and_remove(std::multiset& files, + const std::string& filename) +{ + std::multiset::iterator ptr; + if ( (ptr = files.find(filename)) != files.end()) + { + //erase(filename) erases *all* entries with that key + files.erase(ptr); + return true; + } + return false; +} + +void LLXferManager::expectFileForRequest(const std::string& filename) +{ + mExpectedRequests.insert(filename); +} + +bool LLXferManager::validateFileForRequest(const std::string& filename) +{ + return find_and_remove(mExpectedRequests, filename); +} + +void LLXferManager::expectFileForTransfer(const std::string& filename) +{ + mExpectedTransfers.insert(filename); +} + +bool LLXferManager::validateFileForTransfer(const std::string& filename) +{ + return find_and_remove(mExpectedTransfers, filename); +} + +static bool remove_prefix(std::string& filename, const std::string& prefix) +{ + if (std::equal(prefix.begin(), prefix.end(), filename.begin())) + { + filename = filename.substr(prefix.length()); + return true; + } + return false; +} + +static bool verify_cache_filename(const std::string& filename) +{ + //NOTE: This routine is only used to check file names that our own + // code places in the cache directory. As such, it can be limited + // to this very restrictive file name pattern. It does not need to + // handle other characters. + + size_t len = filename.size(); + //const boost::regex expr("[a-zA-Z0-9][-_.a-zA-Z0-9]<0,49>"); + if (len < 1 || len > 50) + { + return false; + } + for(unsigned i=0; i 0) + { + ok = '_'==c || '-'==c || '.'==c; + } + if (!ok) + { + return false; + } + } + return true; +} + void LLXferManager::processFileRequest (LLMessageSystem *mesgsys, void ** /*user_data*/) { @@ -734,16 +806,11 @@ void LLXferManager::processFileRequest (LLMessageSystem *mesgsys, void ** /*user mesgsys->getStringFast(_PREHASH_XferID, _PREHASH_Filename, local_filename); - U8 local_path_u8; - mesgsys->getU8("XferID", "FilePath", local_path_u8); - if( local_path_u8 < (U8)LL_PATH_LAST ) { + U8 local_path_u8; + mesgsys->getU8("XferID", "FilePath", local_path_u8); local_path = (ELLPath)local_path_u8; } - else - { - llwarns << "Invalid file path in LLXferManager::processFileRequest() " << (U32)local_path_u8 << llendl; - } mesgsys->getUUIDFast(_PREHASH_XferID, _PREHASH_VFileID, uuid); mesgsys->getS16Fast(_PREHASH_XferID, _PREHASH_VFileType, type_s16); @@ -782,6 +849,43 @@ void LLXferManager::processFileRequest (LLMessageSystem *mesgsys, void ** /*user } else if (!local_filename.empty()) { + // See DEV-21775 for detailed security issues + + if (local_path == LL_PATH_NONE) + { + // this handles legacy simulators that are passing objects + // by giving a filename that explicitly names the cache directory + static const std::string legacy_cache_prefix = "data/"; + if (remove_prefix(local_filename, legacy_cache_prefix)) + { + local_path = LL_PATH_CACHE; + } + } + + switch (local_path) + { + case LL_PATH_NONE: + if(!validateFileForTransfer(local_filename)) + { + llwarns << "SECURITY: Unapproved filename '" << local_filename << llendl; + return; + } + break; + + case LL_PATH_CACHE: + if(!verify_cache_filename(local_filename)) + { + llwarns << "SECURITY: Illegal cache filename '" << local_filename << llendl; + return; + } + break; + + default: + llwarns << "SECURITY: Restricted file dir enum: " << (U32)local_path << llendl; + return; + } + + std::string expanded_filename = gDirUtilp->getExpandedFilename( local_path, local_filename ); llinfos << "starting file transfer: " << expanded_filename << " to " << mesgsys->getSender() << llendl; @@ -861,6 +965,7 @@ void LLXferManager::processFileRequest (LLMessageSystem *mesgsys, void ** /*user } } + /////////////////////////////////////////////////////////// void LLXferManager::processConfirmation (LLMessageSystem *mesgsys, void ** /*user_data*/) diff --git a/linden/indra/llmessage/llxfermanager.h b/linden/indra/llmessage/llxfermanager.h index 77f3f60..4bcf5de 100644 --- a/linden/indra/llmessage/llxfermanager.h +++ b/linden/indra/llmessage/llxfermanager.h @@ -108,6 +108,8 @@ class LLXferManager // implementation methods virtual void startPendingDownloads(); virtual void addToList(LLXfer* xferp, LLXfer*& head, BOOL is_priority); + std::multiset mExpectedTransfers; // files that are authorized to transfer out + std::multiset mExpectedRequests; // files that are authorized to be downloaded on top of public: LLXferManager(LLVFS *vfs); @@ -168,6 +170,20 @@ class LLXferManager const LLHost& remote_host, void (*callback)(void**,S32,LLExtStat), void** user_data, BOOL is_priority = FALSE); + /** + When arbitrary files are requested to be transfered (by giving a dir of LL_PATH_NONE) + they must be "expected", but having something pre-authorize them. This pair of functions + maintains a pre-authorized list. The first function adds something to the list, the second + checks if is authorized, removing it if so. In this way, a file is only authorized for + a single use. + */ + virtual void expectFileForTransfer(const std::string& filename); + virtual bool validateFileForTransfer(const std::string& filename); + /** + Same idea, but for the viewer about to call InitiateDownload to track what it requested. + */ + virtual void expectFileForRequest(const std::string& filename); + virtual bool validateFileForRequest(const std::string& filename); /* // xfer request (may be memory or file) diff --git a/linden/indra/newview/llfloaterregioninfo.cpp b/linden/indra/newview/llfloaterregioninfo.cpp index ffd7d48..78d07cf 100644 --- a/linden/indra/newview/llfloaterregioninfo.cpp +++ b/linden/indra/newview/llfloaterregioninfo.cpp @@ -1306,6 +1306,7 @@ void LLPanelRegionTerrainInfo::onClickDownloadRaw(void* data) return; } std::string filepath = picker.getFirstFile(); + gXferManager->expectFileForRequest(filepath); LLPanelRegionTerrainInfo* self = (LLPanelRegionTerrainInfo*)data; strings_t strings; @@ -1325,6 +1326,7 @@ void LLPanelRegionTerrainInfo::onClickUploadRaw(void* data) return; } std::string filepath = picker.getFirstFile(); + gXferManager->expectFileForTransfer(filepath); LLPanelRegionTerrainInfo* self = (LLPanelRegionTerrainInfo*)data; strings_t strings; diff --git a/linden/indra/newview/llpaneldirland.cpp b/linden/indra/newview/llpaneldirland.cpp index 6e8af5f..c67ee9e 100644 --- a/linden/indra/newview/llpaneldirland.cpp +++ b/linden/indra/newview/llpaneldirland.cpp @@ -100,6 +100,8 @@ BOOL LLPanelDirLand::postBuild() if (results) { results->setSortChangedCallback(onClickSort); + // primary sort key is mCurrentSortColumn, secondary is name + results->sortByColumn("name", TRUE); results->sortByColumn(mCurrentSortColumn,mCurrentSortAscending); } diff --git a/linden/indra/newview/llstartup.cpp b/linden/indra/newview/llstartup.cpp index cb819df..0978fbb 100644 --- a/linden/indra/newview/llstartup.cpp +++ b/linden/indra/newview/llstartup.cpp @@ -3886,3 +3886,4 @@ void login_alert_done(S32 option, void* user_data) { LLPanelLogin::giveFocus(); } + diff --git a/linden/indra/newview/lltexturecache.cpp b/linden/indra/newview/lltexturecache.cpp index fd4ece6..ce35377 100644 --- a/linden/indra/newview/lltexturecache.cpp +++ b/linden/indra/newview/lltexturecache.cpp @@ -1553,7 +1553,7 @@ bool LLTextureCache::removeHeaderCacheEntry(const LLUUID& id) void LLTextureCache::removeFromCache(const LLUUID& id) { - llwarns << "Removing texture from cache: " << id << llendl; + //llwarns << "Removing texture from cache: " << id << llendl; if (!mReadOnly) { removeHeaderCacheEntry(id); diff --git a/linden/indra/newview/lltoolgrab.cpp b/linden/indra/newview/lltoolgrab.cpp index b49e8de..5eb688b 100644 --- a/linden/indra/newview/lltoolgrab.cpp +++ b/linden/indra/newview/lltoolgrab.cpp @@ -407,6 +407,7 @@ void LLToolGrab::startGrab() mLastIntersection = mGrabPick.mIntersection; mLastNormal = mGrabPick.mNormal; mLastBinormal = mGrabPick.mBinormal; + mLastGrabPos = LLVector3(-1.f, -1.f, -1.f); } @@ -809,12 +810,14 @@ void LLToolGrab::handleHoverNonPhysical(S32 x, S32 y, MASK mask) BOOL changed_since_last_update = FALSE; + // test if touch data needs to be updated if ((pick.mObjectFace != mLastFace) || (pick.mUVCoords != mLastUVCoords) || (pick.mSTCoords != mLastSTCoords) || (pick.mIntersection != mLastIntersection) || (pick.mNormal != mLastNormal) || - (pick.mBinormal != mLastBinormal)) + (pick.mBinormal != mLastBinormal) || + (grab_pos_region != mLastGrabPos)) { changed_since_last_update = TRUE; } @@ -847,6 +850,7 @@ void LLToolGrab::handleHoverNonPhysical(S32 x, S32 y, MASK mask) mLastIntersection = pick.mIntersection; mLastNormal= pick.mNormal; mLastBinormal= pick.mBinormal; + mLastGrabPos = grab_pos_region; } // update point-at / look-at diff --git a/linden/indra/newview/lltoolgrab.h b/linden/indra/newview/lltoolgrab.h index af66e0d..03cbcaf 100644 --- a/linden/indra/newview/lltoolgrab.h +++ b/linden/indra/newview/lltoolgrab.h @@ -124,6 +124,7 @@ private: LLVector3 mLastIntersection; LLVector3 mLastNormal; LLVector3 mLastBinormal; + LLVector3 mLastGrabPos; BOOL mSpinGrabbing; diff --git a/linden/indra/newview/llviewermessage.cpp b/linden/indra/newview/llviewermessage.cpp index f6cefce..0e39026 100644 --- a/linden/indra/newview/llviewermessage.cpp +++ b/linden/indra/newview/llviewermessage.cpp @@ -5159,6 +5159,11 @@ void process_initiate_download(LLMessageSystem* msg, void**) msg->getString("FileData", "SimFilename", sim_filename); msg->getString("FileData", "ViewerFilename", viewer_filename); + if (!gXferManager->validateFileForRequest(viewer_filename)) + { + llwarns << "SECURITY: Unauthorized download to local file " << viewer_filename << llendl; + return; + } gXferManager->requestFile(viewer_filename, sim_filename, LL_PATH_NONE, diff --git a/linden/indra/newview/skins/default/xui/de/alerts.xml b/linden/indra/newview/skins/default/xui/de/alerts.xml index 68cfce6..ab72b30 100644 --- a/linden/indra/newview/skins/default/xui/de/alerts.xml +++ b/linden/indra/newview/skins/default/xui/de/alerts.xml @@ -375,8 +375,8 @@ Die Second Life Website für weitere Informationen über Partnerschaften öffnen Wenn dieser Einwohner eine Webprofil-URL angegeben hat, können Sie: * Auf 'Laden' klicken und die Seite im integrierten Browser anzuzeigen. -* Auf Laden->"In external Browser öffnen" klicken um die Seite extern anzeigen zu lassen. -* Auf Laden->"Home-URL" klicken um zum Webprofil des Benutzers zurückzukehren. +* Auf Laden > 'In externem Browser' klicken, um die Seite extern anzeigen zu lassen. +* Auf Laden > 'Start URL' klicken, um zum Webprofil des Benutzers zurückzukehren. In Ihrem eigenen Profil können Sie jede beliebige URL als Ihr Webprofil eingeben und mit OK übernehmen. Wenn andere Einwohner Ihr Profil betrachten, können sie diese URL besuchen. @@ -860,7 +860,7 @@ Die Änderungen übernehmen und das Programm beenden? - Der Cache wird nach einem Neustart von [SECOND_LIFE] gelöscht/geleert. + Der Cache wird nach einem Neustart von [SECOND_LIFE] geleert. @@ -1024,7 +1024,8 @@ Sollte das Problem fortbestehen, finden Sie weitere Hilfestellung unter: http:// Achtung: Ihr System erfüllt nicht die Mindestanforderungen von Second Life. Dies kann eine schlechte Darstellungsleistung in Second Life zur Folge haben. Für nicht unterstützte Systemkonfigurationen bieten wir keinen technischen Support. MINDESTANF. -Die Seite [_URL] für weitere Informationen öffnen? +Die Seite [_URL] für +weitere Informationen öffnen? Bei Entdeckung nicht unterstützter Hardware diff --git a/linden/indra/newview/skins/default/xui/de/floater_about.xml b/linden/indra/newview/skins/default/xui/de/floater_about.xml index 05b8a49..7c9b242 100644 --- a/linden/indra/newview/skins/default/xui/de/floater_about.xml +++ b/linden/indra/newview/skins/default/xui/de/floater_about.xml @@ -21,12 +21,12 @@ SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) xmlrpc-epi Copyright (C) 2000 Epinions, Inc. zlib Copyright (C) 1995-2002 Jean-loup Gailly und Mark Adler. -Alle Rechte vorbehalten.Details siehe licenses.txt. +Alle Rechte vorbehalten. Details siehe licenses.txt. -Voice-Chat-Audiocoding:Polycom(R) Siren14(TM) (ITU-T Empf.G.722.1 Anhang C) +Voice-Chat-Audiocoding: Polycom(R) Siren14(TM) (ITU-T Empf.G.722.1 Anhang C) -We can only see a short distance ahead, but we can see plenty there that needs to be done. --Alan Turing +Wir können nur eine kurze Distanz in die Zukunft blicken, aber dort können wir eine Menge sehen, was getan werden muss. --Alan Turing Sie befinden sich in [POSITION] diff --git a/linden/indra/newview/skins/default/xui/de/floater_color_picker.xml b/linden/indra/newview/skins/default/xui/de/floater_color_picker.xml index a6f1515..c540ad3 100644 --- a/linden/indra/newview/skins/default/xui/de/floater_color_picker.xml +++ b/linden/indra/newview/skins/default/xui/de/floater_color_picker.xml @@ -26,7 +26,7 @@ Aktuelle Farbe: -(Unten ziehen, +(Nach unten ziehen, um zu speichern.) diff --git a/linden/indra/newview/skins/default/xui/de/floater_inspect.xml b/linden/indra/newview/skins/default/xui/de/floater_inspect.xml index 7c65c4f..e0f43df 100644 --- a/linden/indra/newview/skins/default/xui/de/floater_inspect.xml +++ b/linden/indra/newview/skins/default/xui/de/floater_inspect.xml @@ -1,14 +1,14 @@ - + - - + +