Skip to content

Commit 5dbdf17

Browse files
committed
SEBWIN-1085, #1337: Fixed crash when entering diacritics in browser address bar and improved request filter logging.
1 parent 2b23dc1 commit 5dbdf17

2 files changed

Lines changed: 40 additions & 32 deletions

File tree

SafeExamBrowser.Browser/Handlers/RequestHandler.cs

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ protected override bool OnOpenUrlFromTab(IWebBrowser webBrowser, IBrowser browse
121121
private bool IsConfigurationFile(IRequest request, out string downloadUrl)
122122
{
123123
var isValidUri = Uri.TryCreate(request.Url, UriKind.RelativeOrAbsolute, out var uri);
124-
var hasFileExtension = string.Equals(appConfig.ConfigurationFileExtension, Path.GetExtension(uri.AbsolutePath), StringComparison.OrdinalIgnoreCase);
124+
var hasFileExtension = string.Equals(appConfig.ConfigurationFileExtension, Path.GetExtension(uri?.AbsolutePath), StringComparison.OrdinalIgnoreCase);
125125
var isDataUri = request.Url.Contains(appConfig.ConfigurationFileMimeType);
126126
var isConfigurationFile = isValidUri && (hasFileExtension || isDataUri);
127127

@@ -183,35 +183,39 @@ private bool IsQuitUrl(IRequest request)
183183
private bool Block(IRequest request)
184184
{
185185
var block = false;
186-
var url = WebUtility.UrlDecode(request.Url);
187-
var isValidUrl = Uri.TryCreate(url, UriKind.Absolute, out _);
188186

189-
if (settings.Filter.ProcessMainRequests && request.ResourceType == ResourceType.MainFrame && isValidUrl)
187+
if (settings.Filter.ProcessMainRequests || settings.Filter.ProcessContentRequests)
190188
{
191-
var result = filter.Process(new Request { Url = url });
189+
var url = WebUtility.UrlDecode(request.Url);
190+
var isValidUrl = Uri.TryCreate(url, UriKind.Absolute, out _);
192191

193-
// We apparently can't filter chrome extension requests, as this prevents the rendering of PDFs.
194-
if (result == FilterResult.Block && !url.StartsWith("chrome-extension://"))
192+
if (settings.Filter.ProcessMainRequests && request.ResourceType == ResourceType.MainFrame && isValidUrl)
195193
{
196-
block = true;
197-
logger.Info($"Blocked main request{(windowSettings.UrlPolicy.CanLog() ? $" for '{url}'" : "")} ({request.ResourceType}, {request.TransitionType}).");
198-
}
199-
}
194+
var result = filter.Process(new Request { Url = url });
200195

201-
if (settings.Filter.ProcessContentRequests && request.ResourceType != ResourceType.MainFrame && isValidUrl)
202-
{
203-
var result = filter.Process(new Request { Url = url });
196+
// We apparently can't filter chrome extension requests, as this prevents the rendering of PDFs.
197+
if (result == FilterResult.Block && !url.StartsWith("chrome-extension://"))
198+
{
199+
block = true;
200+
logger.Info($"Blocked main request{(windowSettings.UrlPolicy.CanLog() ? $" for '{url}'" : "")} ({request.ResourceType}, {request.TransitionType}).");
201+
}
202+
}
204203

205-
if (result == FilterResult.Block)
204+
if (settings.Filter.ProcessContentRequests && request.ResourceType != ResourceType.MainFrame && isValidUrl)
206205
{
207-
block = true;
208-
logger.Info($"Blocked content request{(windowSettings.UrlPolicy.CanLog() ? $" for '{url}'" : "")} ({request.ResourceType}, {request.TransitionType}).");
206+
var result = filter.Process(new Request { Url = url });
207+
208+
if (result == FilterResult.Block)
209+
{
210+
block = true;
211+
logger.Info($"Blocked content request{(windowSettings.UrlPolicy.CanLog() ? $" for '{url}'" : "")} ({request.ResourceType}, {request.TransitionType}).");
212+
}
209213
}
210-
}
211214

212-
if (!isValidUrl)
213-
{
214-
logger.Warn($"Filter could not process request{(windowSettings.UrlPolicy.CanLog() ? $" for '{url}'" : "")} ({request.ResourceType}, {request.TransitionType})!");
215+
if (!isValidUrl)
216+
{
217+
logger.Warn($"Filter could not process request{(windowSettings.UrlPolicy.CanLog() ? $" for '{url}'" : "")} ({request.ResourceType}, {request.TransitionType})!");
218+
}
215219
}
216220

217221
return block;

SafeExamBrowser.Browser/Handlers/ResourceHandler.cs

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -149,22 +149,26 @@ private void AppendCustomHeaders(IWebBrowser webBrowser, IRequest request)
149149
private bool Block(IRequest request)
150150
{
151151
var block = false;
152-
var url = WebUtility.UrlDecode(request.Url);
153-
var isValidUri = Uri.TryCreate(url, UriKind.Absolute, out _);
154152

155-
if (settings.Filter.ProcessContentRequests && isValidUri)
153+
if (settings.Filter.ProcessContentRequests)
156154
{
157-
var result = filter.Process(new Request { Url = url });
155+
var url = WebUtility.UrlDecode(request.Url);
156+
var isValidUri = Uri.TryCreate(url, UriKind.Absolute, out _);
158157

159-
if (result == FilterResult.Block)
158+
if (isValidUri)
160159
{
161-
block = true;
162-
logger.Info($"Blocked content request{(windowSettings.UrlPolicy.CanLog() ? $" for '{url}'" : "")} ({request.ResourceType}, {request.TransitionType}).");
160+
var result = filter.Process(new Request { Url = url });
161+
162+
if (result == FilterResult.Block)
163+
{
164+
block = true;
165+
logger.Info($"Blocked content request{(windowSettings.UrlPolicy.CanLog() ? $" for '{url}'" : "")} ({request.ResourceType}, {request.TransitionType}).");
166+
}
167+
}
168+
else
169+
{
170+
logger.Warn($"Filter could not process request{(windowSettings.UrlPolicy.CanLog() ? $" for '{url}'" : "")} ({request.ResourceType}, {request.TransitionType})!");
163171
}
164-
}
165-
else if (!isValidUri)
166-
{
167-
logger.Warn($"Filter could not process request{(windowSettings.UrlPolicy.CanLog() ? $" for '{url}'" : "")} ({request.ResourceType}, {request.TransitionType})!");
168172
}
169173

170174
return block;

0 commit comments

Comments
 (0)