|
05/15/15, 01:26 AM | #1 |
Secure Render Mode Bug
Neither SCENE_MANAGER nor WINDOW_MANAGER do handle entering/leaving SecureRenderMode properly. (Opening/Closing Crone Market)
SCENE_MANAGER does not wait until all custom fade-scenes reaching SCENE_HIDDEN state. Any custom fade-scene with a fade-out duration greather than zero will cause security exceptions (Access private function "StopAllMovements" from ...) One would expect one could dynamically change the fade-out-duration by handling the EVENT_SECURE_RENDER_MODE_CHANGED and call SetHiddenForReason with a zero fade-duration. But this event is not triggered before the market is causing a security exception already. You have no chance to react to this situation. The only way to overcome this is to create fade-scenes with zero fade-out duration (which is not default value for ZO_FadeSceneFragment!) just for the rare case the market will be opened... The same thing the other way round: The SCENE_MANAGER does not wait until market scene reaching SCENE_HIDDEN before showing custom scenes again. Any key-bind function simply doing SCENE_MANAGER:Show("myscene") or SCENE_MANAGER:ShowBaseScene() without checking WINDOW_MNAGER:IsSecureRenderModeEnabled() and skipping any scene change, will cause a security exception. Please prove I just doing something wrong, but I think the whole SecureRenderMode transition should be reviewed by ZOS. |
|
![]() |
05/15/15, 04:41 AM | #2 |
|
My store does something like this. I can reproduce it by clicking tabs on the world map info control and then clicking on the store.
Code:
EsoUI/Ingame/Scenes/IngameFragments.lua:430: attempt to access a private function 'StopAllMovement' from insecure code stack traceback: EsoUI/Ingame/Scenes/IngameFragments.lua:430: in function 'ZO_StopMovementFragment:Show' EsoUI/Libraries/ZO_Scene/ZO_SceneFragment.lua:126: in function 'ZO_SceneFragment:ShouldBeShown' EsoUI/Libraries/ZO_Scene/ZO_SceneFragment.lua:170: in function 'ZO_SceneFragment:Refresh' EsoUI/Libraries/ZO_Scene/ZO_Scene.lua:291: in function 'ZO_Scene:RefreshFragmentsHelper' EsoUI/Libraries/ZO_Scene/ZO_Scene.lua:299: in function 'ZO_Scene:RefreshFragments' EsoUI/Libraries/ZO_Scene/ZO_Scene.lua:256: in function 'ZO_Scene:SetState' EsoUI/Libraries/ZO_Scene/ZO_Scene.lua:406: in function 'ZO_RemoteScene:SetState' EsoUI/Libraries/ZO_Scene/ZO_SceneManager.lua:155: in function 'ZO_SceneManager:ShowScene' EsoUI/Libraries/ZO_Scene/ZO_SceneManager.lua:430: in function 'ZO_SceneManager:OnSceneStateChange' EsoUI/Ingame/Scenes/IngameSceneManager.lua:278: in function 'ZO_IngameSceneManager:OnS Last edited by XanDDemoX : 05/15/15 at 06:14 AM. |
![]() |
05/15/15, 09:01 AM | #3 |
Looking at secure render mode it only impacts which controls draw and which don't, so it doesn't interact with the security violation code. It might be that something else is happening at the same time secure render mode is changing. I know that any scene that uses the stop movement fragment (I'm only seeing crown store and gamepad scenes using it right now) will trigger a violation if the scene is shown from insecure code. Is there some way your code is showing one of those?
|
|
![]() |
05/15/15, 09:30 AM | #4 | |
It "just" surrounds a TopLevelWindow with a ZO_HUDFadeSceneFragment to handle where and when it is visible. rft is the TopLevelWindow: Lua Code:
Last edited by votan : 05/15/15 at 09:33 AM. |
||
![]() |
05/15/15, 09:33 AM | #5 | |
|
![]() Code:
<TopLevelControl name="FasterTravel_WorldMapWayshrines" inherits="ZO_WorldMapInfoContent"> <OnInitialized> ... self.fragment = ZO_FadeSceneFragment:New(self) ... </OnInitialized> Code:
local function AddWorldMapFragment(strId,fragment,normal,highlight,pressed) WORLD_MAP_INFO.modeBar:Add(strId, { fragment }, {pressed = pressed,highlight =highlight,normal = normal}) end local path = "/esoui/art/treeicons/achievements_indexicon_alliancewar_" AddWorldMapFragment(SI_MAP_INFO_MODE_WAYSHRINES,wayshrineControl.fragment,path.."up.dds",path.."over.dds",path.."down.dds") path = "/esoui/art/mainmenu/menubar_group_" AddWorldMapFragment(SI_MAP_INFO_MODE_PLAYERS,playersControl.fragment,path.."up.dds",path.."over.dds",path.."down.dds") Last edited by XanDDemoX : 05/15/15 at 09:49 AM. |
|
![]() |
05/18/15, 07:57 AM | #6 |
Thanks for the test code. I was able to repro it here. It seems like the problem is: if you are the last fragment to complete in a scene then you will trigger the code to show the next scene which will be a security violation if that scene includes a fragment that calls a private function immediately on show. Fixing this will be a bit of work to separate out scenes a bit more. In the mean time you should be able to have an animation as long as it's finishes just before the slowest scene fragment.
|
|
![]() |
05/18/15, 12:15 PM | #7 | |
![]() But I don't know, if I got you right. Any fade-out duration greather than zero (even 2ms) raises an exception. By the way: You can also cause the exception the other way round: Do this in chat window, while market is open: Lua Code:
|
||
![]() |
ESOUI » Developer Discussions » General Authoring Discussion » Secure Render Mode Bug |
«
Previous Thread
|
Next Thread
»
|
Display Modes |
![]() |
![]() |
![]() |
|
|