Go to file
Nat Goodspeed 99c040ea99 DRTVWR-575: Fix possible bad indexing in LLSD::operator[](size_t).
One could argue that passing a negative index to an LLSD array should do
something other than shrug and reference element [0], but as that's legacy
behavior, it seems all too likely that the viewer sometimes relies on it.

This specific problem arises if the index passed to operator[]() is negative
-- either with the previous Integer parameter or with size_t (which of course
reinterprets the negative index as hugely positive). The non-const
ImplArray::ref() overload checks parameter 'i' and, if it appears negative,
sets internal 'index' to 0.

But in the next stanza, if (index >= existing size()), it calls resize() to
scale the internal array up to one more than the requested index. The trouble
is that it passed resize(i + 1), not the adjusted resize(index + 1).

With a requested index of exactly -1, that would pass resize(0), which would
result in the ensuing array[0] reference being invalid.

With a requested index less than -1, that would pass resize(hugely positive)
-- since, whether operator[]() accepts signed LLSD::Integer or size_t,
resize() accepts std::vector::size_type. Given that the footprint of an LLSD
array element is at least a pointer, the number of bytes required for
resize(hugely positive) is likely to exceed available heap storage.

Passing the adjusted resize(index + 1) should defend against that case.
2023-01-04 17:18:31 -05:00
doc SL-18432 Fix for alpha sorting 2022-10-24 22:14:20 +03:00
etc SL-694 - stub support for ObjectAnimation message type 2017-05-30 22:03:43 +01:00
indra DRTVWR-575: Fix possible bad indexing in LLSD::operator[](size_t). 2023-01-04 17:18:31 -05:00
scripts Merge branch 'master' into DRTVWR-548-maint-N 2022-05-26 03:07:05 +03:00
.clang-format DRTVWR-497 tweak clang-format rules for argument packing 2020-08-24 13:52:57 -06:00
.gitignore DRTVWR-546 merge up to 6.5.2 2021-12-15 14:37:18 -07:00
.pre-commit-config.yaml SL-15741: Add pre-commit configuration 2022-01-24 18:47:10 +02:00
BuildParams Merge branch 'SL-15742' into DRTVWR-527-maint 2021-12-16 00:58:44 +02:00
README.md SL-14702: Spruce up README 2021-08-02 10:10:14 -07:00
autobuild.xml SL-18151 [SEC] MOAP can force multiple floaters open on users screen: The Viewer part of the fix for this JIRA - pulls in the updated Dullahan that exposes the user_gesture/is_redirect flags and uses them to determine what type of 'nav_type' is exchanged with viewer/plugin 2022-09-14 14:52:31 -07:00
build.sh DRTVWR-546 merge in master v6.5.1 2021-11-16 11:44:55 -07:00

README.md

Second Life Logo

Second Life is a free 3D virtual world where users can create, connect and chat with others from around the world. This repository contains the source code for the official client.

Open Source

Second Life provides a huge variety of tools for expression, content creation, socialization and play. Its vibrancy is only possible because of input and contributions from its residents. The client codebase has been open source since 2007 and is available under the LGPL license. The Open Source Portal contains additional information about Linden Lab's open source history and projects.

Download

Most people use a pre-built viewer release to access Second Life. Windows and macOS builds are published on the official website. More experimental viewers, such as release candidates and project viewers, are detailed on the Alternate Viewers page.

Third Party Viewers

Third party maintained forks, which include Linux compatible builds, are indexed in the Third Party Viewer Directory.

Build Instructions

Windows

Mac

Linux

Contribute

Help make Second Life better! You can get involved with improvements by filing bugs, suggesting enhancements, submitting pull requests and more. See the open source portal for details.