1717 ******************************************************************************/
1818
1919#include " browser-scheme.hpp"
20+ #include " ip-string.hpp"
2021#include " wide-string.hpp"
2122#include < include/wrapper/cef_stream_resource_handler.h>
2223
@@ -41,18 +42,28 @@ CefRefPtr<CefResourceHandler> BrowserSchemeHandlerFactory::Create(CefRefPtr<CefB
4142 if (fileExtension.compare (" woff2" ) == 0 )
4243 fileExtension = " woff" ;
4344
44- #ifdef _WIN32
45- CefRefPtr<CefStreamReader> stream = CefStreamReader::CreateForFile (path.substr (1 ));
46- #else
47- CefRefPtr<CefStreamReader> stream = CefStreamReader::CreateForFile (path);
48- #endif
49-
50- if (stream) {
51- CefString mimeType = CefGetMimeType (fileExtension);
52- if (mimeType.empty ())
53- mimeType = " application/octet-stream" ;
54- return new CefStreamResourceHandler (mimeType, stream);
55- } else {
45+ std::string filePath = path.substr (path.find_first_not_of (" /" ));
46+ std::string checkString = filePath.substr (0 , filePath.find_first_of (" /" ));
47+
48+ // An IP address should never be a valid path for CreateForFile normally, but in some cases an OS
49+ // can resolve one as such. As an extra safeguard, we prevent any IP addresses in the path.
50+ if (checkForIpv4String (checkString)) {
51+ return nullptr ;
52+ }
53+
54+ if (checkForIpv6String (checkString)) {
55+ return nullptr ;
56+ }
57+
58+ CefRefPtr<CefStreamReader> stream = CefStreamReader::CreateForFile (filePath);
59+ if (!stream) {
5660 return nullptr ;
5761 }
62+
63+ CefString mimeType = CefGetMimeType (fileExtension);
64+ if (mimeType.empty ()) {
65+ mimeType = " application/octet-stream" ;
66+ }
67+
68+ return new CefStreamResourceHandler (mimeType, stream);
5869}
0 commit comments