Objective
This article provides information on determining the root cause of XML corruption and a path to resolution.
Information
Customers may report errors that are not resolved by general solutions, and upon the investigation of the logs, we see errors such as the following:
Unable to load xml file: Root element is missing.
2020-01-02, 09:26:47, 149, 0, 1b90, 5, error, eseccrmi, Updates, Load, Unable to load xml file: Root element is missing.
Call Stack listing:
at ESECCrmi.Updates.Load()
at ESECCrmi.Updates..ctor()
at Deployment.DeploymentManager.Refresh(DeployementPlugin deployer)
at Deployment.DeployementPlugin.timerRefresh_Elapsed(Object sender, ElapsedEventArgs e)
at System.Timers.Timer.MyTimerCallback(Object state)
at System.Threading.TimerQueueTimer.CallCallbackInContext(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.TimerQueueTimer.CallCallback()
at System.Threading.TimerQueueTimer.Fire()
at System.Threading.TimerQueue.FireNextTimers()
at System.Threading.TimerQueue.AppDomainTimerCallback(Int32 id)
2020-01-02, 09:24:50, 48, 2, b6c, 1, information, EndPointSecurity, ESECFramework, Main, Application is starting...
2020-01-02, 09:24:50, 228, 0, b6c, 1, error, eseccrmi, Updates, Load, Unable to load xml file: Root element is missing.
Call Stack listing:
at ESECCrmi.Updates.Load()
at ESECCrmi.Updates..ctor()
at ESEC.ESECFramework.GetCheckForNewerBuilds()
at ESEC.ESECFramework.Main()
Both errors reference a failure to load an XML file but do not specify the exact XML file in question. As such, we need to review the Call stack or the referenced module to make a call on the most likely file in question. In the example above, the calls were made to the Updates module, and we can infer that the most likely culprit is the toolcfg_updates.xml
.
Resolution
After determining the most likely culprit to the error, gather a copy of the expected troublesome file, and compare it to a clean/fresh install of the application. We may find there are missing sections, incomplete files, or that the file itself does not exist within the installation.
Depending on the level of corruption, we can replace the file from the clean install or add the missing section, but in doing so, we will need to re-confirm any custom settings the end-user may have configured. Make sure to have a backup of the original file if making any changes.
- Stop all EndPointSecurity services and close the EndPointSecurity GUI.
- Navigate to
C:\Program Files (x86)\GFI\EndPointSecurity 6\Data
. - Make a copy of the original .xml file and rename the extension to
.old
. - Edit the original file or replace it with the corrected file.
- Restart the services that were stopped in step #1.
- Attempt to replicate the issue and confirm the solution.