WARNING: Do not test this on a main account - my inventory got messed up - see Other Information.
Steps To Reproduce
Right click any non-system folder in inventory -> Copy or Cut.
Left click on Current Outfit Folder to select it
With Current Outfit Folder selected, use CTRL+V
or
Right click any non-system folder in inventory -> Copy or Cut.
Open My Outfits folder
Left click on on any outfit folder to select it
With Outfit Folder selected, use CTRL+V
Observed Behaviour
Viewer crashes to desktop.
Logs attached.
Callstack:
> secondlife-bin.exe!can_move_to_outfit(LLInventoryItem * inv_item, int move_is_into_current_outfit) Line 3890 C++
secondlife-bin.exe!LLFolderBridge::pasteFromClipboard() Line 3245 + 0x6 bytes C++
secondlife-bin.exe!LLFolderView::paste() Line 1014 + 0x9 bytes C++
secondlife-bin.exe!LLEditPaste::handleEvent(const LLSD & userdata) Line 5264 C++
secondlife-bin.exe!boost::detail::function::void_function_obj_invoker2<boost::_bi::bind_t<void,boost::_mfi::mf1<void,LLInspectAvatar,LLSD const &>,boost::_bi::list2<boost::_bi::value<LLInspectAvatar *>,boost::arg<2> > >,void,LLUICtrl *,LLSD const &>::invoke(boost::detail::function::function_buffer & function_obj_ptr, LLUICtrl * a0, const LLSD & a1) Line 154 C++
secondlife-bin.exe!boost::signals2::detail::signal2_impl<void,std::list<LLSD,std::allocator<LLSD> > *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &,boost::signals2::optional_last_value<void>,int,std::less<int>,boost::function<void __cdecl(std::list<LLSD,std::allocator<LLSD> > *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)>,boost::function<void __cdecl(boost::signals2::connection const &,std::list<LLSD,std::allocator<LLSD> > *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)>,boost::signals2::mutex>::slot_invoker::operator()(const boost::shared_ptr<boost::signals2::detail::connection_body<std::pair<enum boost::signals2::detail::slot_meta_group,boost::optional<int> >,boost::signals2::slot2<void,std::list<LLSD,std::allocator<LLSD> > *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &,boost::function<void __cdecl(std::list<LLSD,std::allocator<LLSD> > *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)> >,boost::signals2::mutex> > & connectionBody) Line 345 + 0x4c bytes C++
secondlife-bin.exe!boost::signals2::detail::slot_call_iterator_t<boost::signals2::detail::signal2_impl<void,std::list<LLSD,std::allocator<LLSD> > *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &,boost::signals2::optional_last_value<void>,int,std::less<int>,boost::function<void __cdecl(std::list<LLSD,std::allocator<LLSD> > *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)>,boost::function<void __cdecl(boost::signals2::connection const &,std::list<LLSD,std::allocator<LLSD> > *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)>,boost::signals2::mutex>::slot_invoker,std::_List_iterator<std::_List_val<boost::shared_ptr<boost::signals2::detail::connection_body<std::pair<enum boost::signals2::detail::slot_meta_group,boost::optional<int> >,boost::signals2::slot2<void,std::list<LLSD,std::allocator<LLSD> > *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &,boost::function<void __cdecl(std::list<LLSD,std::allocator<LLSD> > *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)> >,boost::signals2::mutex> >,std::allocator<boost::shared_ptr<boost::signals2::detail::connection_body<std::pair<enum boost::signals2::detail::slot_meta_group,boost::optional<int> >,boost::signals2::slot2<void,std::list<LLSD,std::allocator<LLSD> > *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &,boost::function<void __cdecl(std::list<LLSD,std::allocator<LLSD> > *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)> >,boost::signals2::mutex> > > > >,boost::signals2::detail::connection_body<std::pair<enum boost::signals2::detail::slot_meta_group,boost::optional<int> >,boost::signals2::slot2<void,std::list<LLSD,std::allocator<LLSD> > *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &,boost::function<void __cdecl(std::list<LLSD,std::allocator<LLSD> > *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)> >,boost::signals2::mu() Line 82 + 0x1c bytes C++
secondlife-bin.exe!boost::signals2::optional_last_value<void>::operator()<boost::signals2::detail::slot_call_iterator_t<boost::signals2::detail::signal2_impl<void,std::list<LLSD,std::allocator<LLSD> > *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &,boost::signals2::optional_last_value<void>,int,std::less<int>,boost::function<void __cdecl(std::list<LLSD,std::allocator<LLSD> > *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)>,boost::function<void __cdecl(boost::signals2::connection const &,std::list<LLSD,std::allocator<LLSD> > *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)>,boost::signals2::mutex>::slot_invoker,std::_List_iterator<std::_List_val<boost::shared_ptr<boost::signals2::detail::connection_body<std::pair<enum boost::signals2::detail::slot_meta_group,boost::optional<int> >,boost::signals2::slot2<void,std::list<LLSD,std::allocator<LLSD> > *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &,boost::function<void __cdecl(std::list<LLSD,std::allocator<LLSD> > *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)> >,boost::signals2::mutex> >,std::allocator<boost::shared_ptr<boost::signals2::detail::connection_body<std::pair<enum boost::signals2::detail::slot_meta_group,boost::optional<int> >,boost::signals2::slot2<void,std::list<LLSD,std::allocator<LLSD> > *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &,boost::function<void __cdecl(std::list<LLSD,std::allocator<LLSD> > *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)> >,boost::signals2::mutex> > > > >,boost::signals2::detail::connection_body<std::pair<enum boost::signals2::detail::slot_meta_group,boost::optional<int> >,boost::signals2::slot2<void,std::list<LLSD,std::allocator<LLSD> > *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &,boost::function<void __cdecl(std::list<LLSD,std::allocator<LLSD> > *,std::basic_string<char,std::char_traits<char>(boost::signals2::detail::slot_call_iterator_t<boost::signals2::detail::signal2_impl<void,std::list<LLSD,std::allocator<LLSD> > *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &,boost::signals2::optional_last_value<void>,int,std::less<int>,boost::function<void __cdecl(std::list<LLSD,std::allocator<LLSD> > *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)>,boost::function<void __cdecl(boost::signals2::connection const &,std::list<LLSD,std::allocator<LLSD> > *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)>,boost::signals2::mutex>::slot_invoker,std::_List_iterator<std::_List_val<boost::shared_ptr<boost::signals2::detail::connection_body<std::pair<enum boost::signals2::detail::slot_meta_group,boost::optional<int> >,boost::signals2::slot2<void,std::list<LLSD,std::allocator<LLSD> > *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &,boost::function<void __cdecl(std::list<LLSD,std::allocator<LLSD> > first, boost::signals2::detail::slot_call_iterator_t<boost::signals2::detail::signal2_impl<void,std::list<LLSD,std::allocator<LLSD> > *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &,boost::signals2::optional_last_value<void>,int,std::less<int>,boost::function<void __cdecl(std::list<LLSD,std::allocator<LLSD> > *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)>,boost::function<void __cdecl(boost::signals2::connection const &,std::list<LLSD,std::allocator<LLSD> > *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &)>,boost::signals2::mutex>::slot_invoker,std::_List_iterator<std::_List_val<boost::shared_ptr<boost::signals2::detail::connection_body<std::pair<enum boost::signals2::detail::slot_meta_group,boost::optional<int> >,boost::signals2::slot2<void,std::list<LLSD,std::allocator<LLSD> > *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &,boost::function<void __cdecl(std::list<LLSD,std::allocator<LLSD> > last) Line 65535 C++
secondlife-bin.exe!boost::signals2::detail::signal2_impl<void,LLUICtrl *,LLSD const &,boost::signals2::optional_last_value<void>,int,std::less<int>,boost::function<void __cdecl(LLUICtrl *,LLSD const &)>,boost::function<void __cdecl(boost::signals2::connection const &,LLUICtrl *,LLSD const &)>,boost::signals2::mutex>::operator()(LLUICtrl * arg1, const LLSD & arg2) Line 246 + 0xa4 bytes C++
secondlife-bin.exe!LLUICtrl::onCommit() Line 393 + 0x27 bytes C++
secondlife-bin.exe!LLMenuItemCallGL::handleAcceleratorKey(unsigned char key, unsigned int mask) Line 851 C++
secondlife-bin.exe!LLMenuGL::handleAcceleratorKey(unsigned char key, unsigned int mask) Line 2985 + 0xc bytes C++
secondlife-bin.exe!LLViewerWindow::handleKey(unsigned char key, unsigned int mask) Line 2591 + 0x16 bytes C++
secondlife-bin.exe!LLViewerKeyboard::handleKey(unsigned char translated_key, unsigned int translated_mask, int repeated) Line 698 + 0x1a bytes C++
secondlife-bin.exe!LLViewerWindow::handleTranslatedKeyDown(unsigned char key, unsigned int mask, int repeated) Line 1371 + 0x10 bytes C++
secondlife-bin.exe!LLKeyboard::handleTranslatedKeyDown(unsigned char translated_key, unsigned int translated_mask) Line 240 + 0x16 bytes C++
secondlife-bin.exe!LLKeyboardWin32::handleKeyDown(const unsigned short key, unsigned int mask) Line 210 + 0xc bytes C++
secondlife-bin.exe!LLWindowWin32::mainWindowProc(HWND__ * h_wnd, unsigned int u_msg, unsigned int w_param, long l_param) Line 2058 + 0x15 bytes C++
user32.dll!_InternalCallWinProc@20() + 0x23 bytes
user32.dll!_UserCallWinProcCheckWow@32() + 0xb7 bytes
user32.dll!_CallWindowProcAorW@24() + 0x5e bytes
user32.dll!_CallWindowProcW@20() + 0x1b bytes
opengl32.dll!_wglWndProc@16() + 0x20b bytes
user32.dll!_InternalCallWinProc@20() + 0x23 bytes
user32.dll!_UserCallWinProcCheckWow@32() + 0xb7 bytes
user32.dll!_DispatchMessageWorker@8() + 0xed bytes
user32.dll!_DispatchMessageW@4() + 0xf bytes
secondlife-bin.exe!LLWindowWin32::gatherInput() Line 1783 C++
secondlife-bin.exe!LLAppViewer::mainLoop() Line 1370 C++
secondlife-bin.exe!WinMain(HINSTANCE__ * hInstance, HINSTANCE__ * hPrevInstance, char * lpCmdLine, int nCmdShow) Line 325 C++
secondlife-bin.exe!__tmainCRTStartup() Line 547 + 0x1c bytes C
kernel32.dll!@BaseThreadInitThunk@12() + 0x12 bytes
ntdll.dll!___RtlUserThreadStart@8() + 0x27 bytes
ntdll.dll!__RtlUserThreadStart@8() + 0x1b bytes
Expected Behaviour
CTRL+V should be disabled for the current outfit folder - you cannot right click it and paste.
Other Information
Take care when testing this - use an unimportant alt.
While testing, any folder that I cut or copied from and their main folder if I cut/copied a subfoler and the Current Outfit Folder was stuck saying "(Loading....)" after the folder name after relogging from the crash, even though my inventory was fully fetched.
This has not yet resolved itself after multiple relogs.
Seems really similar to what was reported in VWR-24003
Good job I was using an alt :D
Original Jira Fields
| Field | Value |
| ------------- | ------------- |
| Issue | BUG-6297 |
| Summary | Pasting a folder into the Current Outfit Folder or any folder in My Outfits with CTRL+V crashes viewer |
| Type | Bug |
| Priority | Unset |
| Status | Accepted |
| Resolution | Accepted |
| Reporter | Whirly Fizzle (whirly.fizzle) |
| Created at | 2014-06-08T03:11:11Z |
| Updated at | 2014-06-09T16:47:13Z |
```
{
'Business Unit': ['Platform'],
'Date of First Response': '2014-06-09T11:12:45.613-0500',
'System': 'SL Viewer',
'Target Viewer Version': 'viewer-development',
'What just happened?': '.',
'What were you doing when it happened?': 'Filling in....',
'What were you expecting to happen instead?': '.',
}
```
WARNING: Do not test this on a main account - my inventory got messed up - see Other Information.
Steps To Reproduce
Right click any non-system folder in inventory -> Copy or Cut.
Left click on Current Outfit Folder to select it
With Current Outfit Folder selected, use CTRL+V
or
Right click any non-system folder in inventory -> Copy or Cut.
Open My Outfits folder
Left click on on any outfit folder to select it
With Outfit Folder selected, use CTRL+V
Observed Behaviour
Viewer crashes to desktop.
Logs attached.
Callstack:
Expected Behaviour
CTRL+V should be disabled for the current outfit folder - you cannot right click it and paste.
Other Information
Take care when testing this - use an unimportant alt. While testing, any folder that I cut or copied from and their main folder if I cut/copied a subfoler and the Current Outfit Folder was stuck saying "(Loading....)" after the folder name after relogging from the crash, even though my inventory was fully fetched. This has not yet resolved itself after multiple relogs. Seems really similar to what was reported in VWR-24003 Good job I was using an alt :D
Attachments
Original Jira Fields
| Field | Value | | ------------- | ------------- | | Issue | BUG-6297 | | Summary | Pasting a folder into the Current Outfit Folder or any folder in My Outfits with CTRL+V crashes viewer | | Type | Bug | | Priority | Unset | | Status | Accepted | | Resolution | Accepted | | Reporter | Whirly Fizzle (whirly.fizzle) | | Created at | 2014-06-08T03:11:11Z | | Updated at | 2014-06-09T16:47:13Z | ``` { 'Business Unit': ['Platform'], 'Date of First Response': '2014-06-09T11:12:45.613-0500', 'System': 'SL Viewer', 'Target Viewer Version': 'viewer-development', 'What just happened?': '.', 'What were you doing when it happened?': 'Filling in....', 'What were you expecting to happen instead?': '.', } ```