static bool isSafeUrl(const char* url, MainAppProviderI* pMainApp) { if (!url) return false; if (gcString(url) == "about:blank") return true; wxURI wxurl(url); if (wxurl.GetScheme() == "file") return true; wxString server = wxurl.GetServer(); size_t x=0; for (auto s : g_szSafeList) { if (isSafeUrl(server, s)) return true; x++; } if (pMainApp && pMainApp->getProvider()) { wxString cusProvider(pMainApp->getProvider()); if (cusProvider.empty()) cusProvider = "desura.com"; if (isSafeUrl(server, cusProvider)) return true; cusProvider = "." + cusProvider; return isSafeUrl(server, cusProvider); } return false; }
void *Entry() { wxURL wxurl(url); if(wxurl.GetError() != wxURL_NOERR) { exitcode = 1; return NULL; } wxInputStream *input = wxurl.GetInputStream(); if(!input) { exitcode = 2; return NULL; } size = input->GetSize(); if(size < 0) { exitcode = 3; return NULL; } wxFileOutputStream output(filename); while(!input->Eof() && !TestDestroy() && !please_quit) { if(input->CanRead()) { char buffer[16384]; input->Read(buffer, sizeof buffer); int lastread = input->LastRead(); output.Write(buffer, lastread); position += lastread; } else wxThread::Sleep(100); if(position >= size) break; } return NULL; }
bool isSafeUrl(const char* url) { if (!url) return false; if (gcString(url) == "about:blank") return true; wxURI wxurl(url); if (wxurl.GetScheme() == "file") return true; wxString server = wxurl.GetServer(); size_t x=0; while (g_szSafeList[x]) { if (g_szSafeList[x][0] == '.') { if (server.Contains(wxString(g_szSafeList[x]))) return true; } else { if (server == wxString(g_szSafeList[x])) return true; } x++; } return false; }