Skip to content
This repository has been archived by the owner on Mar 28, 2024. It is now read-only.

[BUG-37689] When setting a local texture from a path containing non-standard characters, the viewer either crashes or the local texture silently fails with no feedback. #12020

Open
sl-service-account opened this issue Aug 18, 2016 · 2 comments

Comments

@sl-service-account
Copy link

sl-service-account commented Aug 18, 2016

Repro 1 - Silent fail

  • Create a folder on your computer called Bōshi
    (My path is C:\Users\Whirly\Desktop\Bōshi).

  • Place Texture A in folder Bōshi.

  • Rez a box.

  • Edit box -> Texture tab -> Click texture thumbnail to open the texture picker.

  • Choose Local

  • Add Texture A from the Bōshi folder.

    Observed Behaviour

  • Nothing happens.

  • Texture A is not added to the avilable local texture list.

  • Viewer gives no error message.

  • See Fig 1 attached.

    Expected Behaviour

    Texture A should appear in the local texture list and apply to the box when selected.

    Repro 2 - Crash

  • Create a folder on your computer called ΚυÏ�ιάκοÏ
    (My path is C:\Users\Whirly\Desktop\ΚυÏ�ιάκοÏ).

  • Place Texture A in folder ΚυÏ�ιάκοÏ.

  • Rez a box.

  • Edit box -> Texture tab -> Click texture thumbnail to open the texture picker.

  • Choose Local

  • Add Texture A from the ΚυÏ�Î¹Î¬ÎºÎ¿Ï folder.

    Observed Behaviour

  • Viewer crashes.

  • Logs attached.

Callstack

Operating system: Windows NT
                  6.1.7601 Service Pack 1
CPU: x86
     GenuineIntel family 6 model 60 stepping 3
     8 CPUs

Crash reason:  Unhandled C++ Exception
Crash address: 0x74f5c54f
Assertion: Unknown assertion type 0x00000000
Process uptime: 2139 seconds

Thread 0 (crashed)
 0  KERNELBASE!RaiseException + 0xc54f
    eip = 0x74f5c54f   esp = 0x0230efcc   ebp = 0x0230f01c   ebx = 0x00000001
    esi = 0x01b75180   edi = 0x0230f080   eax = 0x0230efcc   ecx = 0x00000003
    edx = 0x00000000   efl = 0x00200206
    Found by: given as instruction pointer in context
 1  msvcr120.dll + 0x19339
    eip = 0x58bd9339   esp = 0x0230f024   ebp = 0x0230f05c
    Found by: previous frame's frame pointer
 2  SecondLifeViewer.exe!`anonymous namespace'::error(bool,boost::filesystem::path const &,boost::system::error_code *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &) + 0x9b
    eip = 0x013c114b   esp = 0x0230f064   ebp = 0x0230f170
    Found by: previous frame's frame pointer
 3  SecondLifeViewer.exe!boost::filesystem::detail::last_write_time(boost::filesystem::path const &,boost::system::error_code *) + 0x126
    eip = 0x013c14f6   esp = 0x0230f0bc   ebp = 0x0230f170
    Found by: call frame info
 4  SecondLifeViewer.exe!LLLocalBitmap::updateSelf(LLLocalBitmap::EUpdateType) [lllocalbitmaps.cpp : 184 + 0x1a]
    eip = 0x005a8ee3   esp = 0x0230f130   ebp = 0x0230f1b0
    Found by: call frame info
 5  SecondLifeViewer.exe!LLLocalBitmap::LLLocalBitmap(std::basic_string<char,std::char_traits<char>,std::allocator<char> >) [lllocalbitmaps.cpp : 125 + 0x9]
    eip = 0x005a66ed   esp = 0x0230f1b8   ebp = 0x0230f1fc
    Found by: call frame info
 6  SecondLifeViewer.exe!LLLocalBitmapMgr::addUnit() [lllocalbitmaps.cpp : 859 + 0x41]
    eip = 0x005a6a2d   esp = 0x0230f204   ebp = 0x0230f280
    Found by: call frame info
 7  SecondLifeViewer.exe!LLFloaterTexturePicker::onBtnAdd(void *) [lltexturectrl.cpp : 872 + 0x5]
    eip = 0x0088ccf8   esp = 0x0230f288   ebp = 0x0230f288
    Found by: call frame info
 8  SecondLifeViewer.exe!boost::detail::function::function_invoker1<LLFloaterIMNearbyChat * (*)(LLSD const &),LLFloater *,LLSD const &>::invoke(boost::detail::function::function_buffer &,LLSD const &) [function_template.hpp : 95 + 0x7]
    eip = 0x0092432d   esp = 0x0230f290   ebp = 0x0230f294
    Found by: call frame info
 9  SecondLifeViewer.exe!boost::detail::function::void_function_obj_invoker0<boost::_bi::bind_t<boost::_bi::unspecified,boost::function<void >,boost::_bi::list1<boost::_bi::value<void *> > >,void>::invoke(boost::detail::function::function_buffer &) [function_template.hpp : 153 + 0x40]
    eip = 0x0039675a   esp = 0x0230f29c   ebp = 0x0230f2c0
    Found by: call frame info
10  SecondLifeViewer.exe!boost::signals2::detail::variadic_slot_invoker<boost::signals2::detail::void_type,unsigned int,LLSD const &>::m_invoke<boost::shared_ptr<boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group,boost::optional<int> >,boost::signals2::slot<void ,boost::function<void > >,boost::signals2::mutex> > >(boost::shared_ptr<boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group,boost::optional<int> >,boost::signals2::slot<void ,boost::function<void > >,boost::signals2::mutex> > const &,boost::signals2::detail::void_type const *) [variadic_slot_invoker.hpp : 127 + 0x4b]
    eip = 0x005f99c3   esp = 0x0230f2c8   ebp = 0x0230f2f4
    Found by: call frame info
11  SecondLifeViewer.exe!boost::signals2::detail::slot_call_iterator_t<boost::signals2::detail::variadic_slot_invoker<boost::signals2::detail::void_type,unsigned int,LLSD const &>,std::_List_iterator<std::_List_val<std::_List_simple_types<boost::shared_ptr<boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group,boost::optional<int> >,boost::signals2::slot<void ,boost::function<void > >,boost::signals2::mutex> > > > >,boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group,boost::optional<int> >,boost::signals2::slot<void ,boost::function<void > >,boost::signals2::mutex> >::dereference() [slot_call_iterator.hpp : 82 + 0xc]
    eip = 0x005fdf97   esp = 0x0230f2fc   ebp = 0x0230f330
    Found by: call frame info
12  SecondLifeViewer.exe!boost::signals2::optional_last_value<void>::operator()<boost::signals2::detail::slot_call_iterator_t<boost::signals2::detail::variadic_slot_invoker<boost::signals2::detail::void_type,std::list<LLSD,std::allocator<LLSD> > *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &>,std::_List_iterator<std::_List_val<std::_List_simple_types<boost::shared_ptr<boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group,boost::optional<int> >,boost::signals2::slot<void ,boost::function<void > >,boost::signals2::mutex> > > > >,boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group,boost::optional<int> >,boost::signals2::slot<void ,boost::function<void > >,boost::signals2::mutex> > >(boost::signals2::detail::slot_call_iterator_t<boost::signals2::detail::variadic_slot_invoker<boost::signals2::detail::void_type,std::list<LLSD,std::allocator<LLSD> > *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &>,std::_List_iterator<std::_List_val<std::_List_simple_types<boost::shared_ptr<boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group,boost::optional<int> >,boost::signals2::slot<void ,boost::function<void > >,boost::signals2::mutex> > > > >,boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group,boost::optional<int> >,boost::signals2::slot<void ,boost::function<void > >,boost::signals2::mutex> >,boost::signals2::detail::slot_call_iterator_t<boost::signals2::detail::variadic_slot_invoker<boost::signals2::detail::void_type,std::list<LLSD,std::allocator<LLSD> > *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &>,std::_List_iterator<std::_List_val<std::_List_simple_types<boost::shared_ptr<boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group,boost::optional<int> >,boost::signals2::slot<void ,boost::function<void > >,boost::signals2::mutex> > > > >,boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group,boost::optional<int> >,boost::signals2::slot<void ,boost::function<void > >,boost::signals2::mutex> >) [optional_last_value.hpp : 55 + 0x5]
    eip = 0x005b9b27   esp = 0x0230f338   ebp = 0x0230f358
    Found by: call frame info
13  SecondLifeViewer.exe!boost::signals2::detail::signal_impl<void ,boost::signals2::optional_last_value<void>,int,std::less<int>,boost::function<void >,boost::function<void >,boost::signals2::mutex>::operator()(LLUICtrl *,LLSD const &) [signal_template.hpp : 246 + 0x76]
    eip = 0x001e248f   esp = 0x0230f360   ebp = 0x0230f478
    Found by: call frame info
14  SecondLifeViewer.exe!LLUICtrl::onCommit() [lluictrl.cpp : 393 + 0x25]
    eip = 0x00ed0ce4   esp = 0x0230f480   ebp = 0x0230f4a0
    Found by: call frame info
15  SecondLifeViewer.exe!LLButton::handleMouseUp(int,int,unsigned int) [llbutton.cpp : 500 + 0x7]
    eip = 0x00e734cd   esp = 0x0230f4a8   ebp = 0x0230f4c4
    Found by: call frame info
16  SecondLifeViewer.exe!LLMouseHandler::handleAnyMouseClick(int,int,unsigned int,LLMouseHandler::EClickType,int) [llmousehandler.cpp : 49 + 0xe]
    eip = 0x00ffddf0   esp = 0x0230f4cc   ebp = 0x0230f4f0
    Found by: call frame info
17  SecondLifeViewer.exe!LLViewerWindow::handleAnyMouseClick(LLWindow *,LLCoord<LL_COORD_TYPE_GL>,unsigned int,LLMouseHandler::EClickType,int) [llviewerwindow.cpp : 975 + 0x14]
    eip = 0x00a41ee7   esp = 0x0230f4f8   ebp = 0x0230f560
    Found by: call frame info
18  SecondLifeViewer.exe!LLViewerWindow::handleMouseUp(LLWindow *,LLCoord<LL_COORD_TYPE_GL>,unsigned int) [llviewerwindow.cpp : 1072 + 0x17]
    eip = 0x00a43e51   esp = 0x0230f568   ebp = 0x0230f584
    Found by: call frame info
19  SecondLifeViewer.exe!LLWindowWin32::mainWindowProc(HWND__ *,unsigned int,unsigned int,long) [llwindowwin32.cpp : 2329 + 0x10]
    eip = 0x010032c6   esp = 0x0230f58c   ebp = 0x0230f694
    Found by: call frame info
20  user32.dll + 0x162fa
    eip = 0x769d62fa   esp = 0x0230f69c   ebp = 0x0230f6c0
    Found by: call frame info
21  user32.dll + 0x16d3a
    eip = 0x769d6d3a   esp = 0x0230f6c8   ebp = 0x0230f738
    Found by: previous frame's frame pointer
22  user32.dll + 0x20d37
    eip = 0x769e0d37   esp = 0x0230f740   ebp = 0x0230f770
    Found by: previous frame's frame pointer
23  user32.dll + 0x20d5d
    eip = 0x769e0d5d   esp = 0x0230f778   ebp = 0x0230f790
    Found by: previous frame's frame pointer
24  opengl32.dll + 0x460fb
    eip = 0x5fe460fb   esp = 0x0230f798   ebp = 0x0230f7cc
    Found by: previous frame's frame pointer
25  user32.dll + 0x162fa
    eip = 0x769d62fa   esp = 0x0230f7d4   ebp = 0x0230f7f8
    Found by: previous frame's frame pointer
26  user32.dll + 0x16d3a
    eip = 0x769d6d3a   esp = 0x0230f800   ebp = 0x0230f870
    Found by: previous frame's frame pointer
27  user32.dll + 0x177d3
    eip = 0x769d77d3   esp = 0x0230f878   ebp = 0x0230f8d4
    Found by: previous frame's frame pointer
28  user32.dll + 0x1789a
    eip = 0x769d789a   esp = 0x0230f8dc   ebp = 0x0230f8e4
    Found by: previous frame's frame pointer
29  SecondLifeViewer.exe!LLWindowWin32::gatherInput() [llwindowwin32.cpp : 1796 + 0xa]
    eip = 0x01000413   esp = 0x0230f8ec   ebp = 0x0230f918
    Found by: previous frame's frame pointer
30  SecondLifeViewer.exe!LLAppViewer::mainLoop() [llappviewer.cpp : 1383 + 0x10]
    eip = 0x001b5bd2   esp = 0x0230f920   ebp = 0x0230faa0
    Found by: call frame info
31  SecondLifeViewer.exe!WinMain [llappviewerwin32.cpp : 322 + 0x7]
    eip = 0x00b4bfb7   esp = 0x0230faa8   ebp = 0x0230fad0
    Found by: call frame info
32  SecondLifeViewer.exe!__tmainCRTStartup [crtexe.c : 618 + 0xe]
    eip = 0x01416f1f   esp = 0x0230fad8   ebp = 0x0230fb1c
    Found by: call frame info
33  kernel32.dll + 0x1338a
    eip = 0x74e5338a   esp = 0x0230fb24   ebp = 0x0230fb28
    Found by: call frame info
34  ntdll.dll + 0x2a242
    eip = 0x7746a242   esp = 0x0230fb30   ebp = 0x0230fb68
    Found by: previous frame's frame pointer
35  ntdll.dll + 0x2a215
    eip = 0x7746a215   esp = 0x0230fb70   ebp = 0x0230fb80
    Found by: previous frame's frame pointer

Expected Behaviour

Viewer shouldn't crash.
Texture A should appear in the local texture list and apply to the box when selected

Attachments

Original Jira Fields
Field Value
Issue BUG-37689
Summary When setting a local texture from a path containing non-standard characters, the viewer either crashes or the local texture silently fails with no feedback.
Type Bug
Priority Unset
Status Accepted
Resolution Accepted
Reporter Whirly Fizzle (whirly.fizzle)
Created at 2016-08-18T21:25:49Z
Updated at 2016-08-25T17:48:36Z
{
  'Business Unit': ['Platform'],
  'Date of First Response': '2016-08-25T09:17:53.033-0500',
  'ReOpened Count': 0.0,
  'Severity': 'Unset',
  'System': 'SL Viewer',
  'Target Viewer Version': 'viewer-development',
  'What just happened?': 'Filling in...',
  'What were you doing when it happened?': '...',
  'What were you expecting to happen instead?': '....',
}
@sl-service-account
Copy link
Author

Nicky Dasmijn commented at 2016-08-25T14:17:53Z

Fix is in https://bitbucket.org/NickyD/viewer-release-bug-37689
Still waiting for the reporter (that's Whirly for everyone following at home) if that fixes the problem for her (we have had a few more fixes in Firestorm for this issues, just wanting to be sure this change really works for vr, which should).

@sl-service-account
Copy link
Author

Whirly Fizzle commented at 2016-08-25T17:48:36Z

Testing on Second Life 4.0.8.35927 (Second Life Test) built from Nicky's repository.

  • Repro 1 - silent fail
    Bug still reproduces.

  • Repro 2 - the crash.
    This is fixed.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

1 participant