From ca99b669f2c4625e2c0d7b15493739c0ed581b63 Mon Sep 17 00:00:00 2001 From: Burer Date: Sun, 17 May 2026 11:53:45 +0000 Subject: [PATCH] apps/cmm: update HTTPS proxy (#439) - new proxy address - fix proxy usage for `dl` - fix buffers overflow - optimize memory usage - explicit notify error for `dl` when URL is HTTPS and proxy is not found - cleanup some dead code to fit app in the same sectors size Reviewed-on: https://git.kolibrios.org/KolibriOS/kolibrios/pulls/439 Reviewed-by: Ivan B <1+dunkaist@noreply.localhost> --- data/common/settings/app.ini | 2 +- programs/cmm/browser/WebView.c | 34 ++++++++++++------------- programs/cmm/downloader/dl.c | 40 +++++++++++++++++++----------- programs/cmm/downloader/settings.h | 2 +- 4 files changed, 45 insertions(+), 33 deletions(-) diff --git a/data/common/settings/app.ini b/data/common/settings/app.ini index 7768816b8..7c9d4c1a4 100644 --- a/data/common/settings/app.ini +++ b/data/common/settings/app.ini @@ -23,7 +23,7 @@ path=/usbhd0/1/kolibri.img autoclose=0 [WebView] -proxy_address=http://proxy.kolibrios.org:82/?site= +proxy_address=http://proxy.kolibrios.org/?site= search_engine=http://wiby.me/?q= ;search_engine=http://bing.com/search?q= ;search_engine=https://html.duckduckgo.com/html/?q= diff --git a/programs/cmm/browser/WebView.c b/programs/cmm/browser/WebView.c index a0afa25a6..1106d47c0 100644 --- a/programs/cmm/browser/WebView.c +++ b/programs/cmm/browser/WebView.c @@ -72,8 +72,8 @@ progress_bar prbar; proc_info Form; char settings_file[256]; -char proxy_address[768]; -char search_engine[768]; +char proxy_address[256]; +char search_engine[256]; #include "settings.h" #include "tabs.h" @@ -307,14 +307,14 @@ void ProcessButtonClick(dword id__) case SANDWICH_BUTTON: EventShowMainMenu(); return; case VIEW_SOURCE: EventViewSource(); return; case EDIT_SOURCE: EventEditSource(); return; - case VIEW_HISTORY: OpenPage(URL_SERVICE_HISTORY); return; - case DOWNLOAD_MANAGER: EventOpenDownloader(""); return; - case UPDATE_BROWSER: EventUpdateBrowser(); return; - case OPEN_SETTINGS: RunProgram("/sys/@open", #settings_file); return; - case CLEAR_CACHE: EventClearCache(); return; - case IN_NEW_TAB: EventClickLink(TARGET_NEW_TAB); return; - case IN_NEW_WINDOW: EventClickLink(TARGET_NEW_WINDOW); return; - case COPY_LINK_URL: EventCopyLinkToClipboard(); return; + case VIEW_HISTORY: OpenPage(URL_SERVICE_HISTORY); return; + case DOWNLOAD_MANAGER: EventOpenDownloader(""); return; + case UPDATE_BROWSER: EventUpdateBrowser(); return; + case OPEN_SETTINGS: RunProgram("/sys/@open", #settings_file); return; + case CLEAR_CACHE: EventClearCache(); return; + case IN_NEW_TAB: EventClickLink(TARGET_NEW_TAB); return; + case IN_NEW_WINDOW: EventClickLink(TARGET_NEW_WINDOW); return; + case COPY_LINK_URL: EventCopyLinkToClipboard(); return; case DOWNLOAD_LINK_CT: EventOpenDownloader( GetAbsoluteActiveURL() ); return; case OPEN_FILE: EventOpenDialog(); return; } @@ -331,10 +331,10 @@ void ProcessKeyEvent() if (key_modifier&KEY_LCTRL) || (key_modifier&KEY_RCTRL) switch(key_scancode) { case SCAN_CODE_KEY_O: EventOpenDialog(); return; - case SCAN_CODE_KEY_H: ProcessButtonClick(VIEW_HISTORY); return; - case SCAN_CODE_KEY_E: ProcessButtonClick(OPEN_SETTINGS); return; - case SCAN_CODE_KEY_U: EventViewSource(); return; - case SCAN_CODE_KEY_T: EventOpenNewTab(URL_SERVICE_HOMEPAGE); return; + case SCAN_CODE_KEY_H: ProcessButtonClick(VIEW_HISTORY); return; + case SCAN_CODE_KEY_E: ProcessButtonClick(OPEN_SETTINGS); return; + case SCAN_CODE_KEY_U: EventViewSource(); return; + case SCAN_CODE_KEY_T: EventOpenNewTab(URL_SERVICE_HOMEPAGE); return; case SCAN_CODE_KEY_N: RunProgram(#program_path, NULL); return; case SCAN_CODE_KEY_J: ProcessButtonClick(DOWNLOAD_MANAGER); return; case SCAN_CODE_KEY_R: ProcessButtonClick(REFRESH_BUTTON); return; @@ -533,12 +533,12 @@ bool GetLocalFileData(dword _path) bool GetUrl(dword _http_url) { - char new_url_full[URL_SIZE+1]; + char new_url_full[URL_SIZE + sizeof(proxy_address) + 1]; if (!strncmp(_http_url,"http://",7)) { http.get(_http_url); return true; } else if (!strncmp(_http_url,"https://",8)) { - if (#proxy_address) { + if (proxy_address[0]) { strcpy(#new_url_full, #proxy_address); strncat(#new_url_full, _http_url, URL_SIZE); http.get(#new_url_full); @@ -840,7 +840,7 @@ void ProcessMenuClick() void EventSearchWeb() { - char new_url[URL_SIZE+1]; + char new_url[URL_SIZE + sizeof(search_engine) + 1]; // replace the spaces with '+' for the search query replace_char(#editURL, ' ', '+', URL_SIZE); strcpy(#new_url, #search_engine); diff --git a/programs/cmm/downloader/dl.c b/programs/cmm/downloader/dl.c index a94b22134..e82a2bf1f 100644 --- a/programs/cmm/downloader/dl.c +++ b/programs/cmm/downloader/dl.c @@ -27,7 +27,7 @@ char filepath[4096]; char save_dir[4096]; char settings_file[256]; -char proxy_address[768]; +char proxy_address[256]; #include "settings.h" @@ -41,7 +41,7 @@ progress_bar pb = {0, GAPX, 52, WIN_W - GAPX - GAPX, 17, 0, NULL, NULL, void main() { - dword shared_url; + // dword shared_url; // only used by the disabled -mem branch (long URL via SHM) load_dll(libini, #lib_init,1); load_dll(boxlib, #box_lib_init,0); @@ -66,12 +66,15 @@ void main() param += 4; } - if (!strncmp(#param, "-mem", 5)) { - //shared_url = memopen(#dl_shared, URL_SIZE+1, SHM_OPEN + SHM_WRITE); - strcpy(#uEdit, shared_url); - } else { - strcpy(#uEdit, #param); - } + // Disabled long-URL-via-SHM ("DL") channel. memopen was never + // finished (read from uninitialised ptr). Reimplement properly + // if passing long URLs from WebView is ever needed. + // if (!strncmp(#param, "-mem", 5)) { + // shared_url = memopen(#dl_shared, URL_SIZE+1, SHM_OPEN + SHM_WRITE); + // strcpy(#uEdit, shared_url); + // } else { + strcpy(#uEdit, #param); + // } if (streq(#param, "-test")) { strcpy(#uEdit, URL_SPEED_TEST); @@ -157,7 +160,7 @@ void DrawWindow() } else if (http.transfer) { DrawDlButton(WIN_W-BUT_W/2, BTN_STOP, T_CANCEL); DrawDownloadingProgress(); - } else if (!http.transfer) && (filepath) { + } else { autoclose.disabled = true; DrawDlButton(GAPX, BTN_RUN, T_RUN); DrawDlButton(WIN_W-BUT_W/2, BTN_DIR, T_OPEN_DIR); @@ -177,14 +180,24 @@ void DrawWindow() void StartDownloading() { - char get_url[URL_SIZE+33]; + char get_url[URL_SIZE + sizeof(proxy_address) + 1]; if (http.transfer > 0) return; ResetDownloadSpeed(); pb.back_color = 0xFFFfff; if (!strncmp(#uEdit,"https://",8)) { - miniprintf(#get_url, "%s%s", #proxy_address, #uEdit); + if (!proxy_address[0]) { + pb.progress_color = PB_COL_ERROR; + notify("'HTTPS URLs require proxy_address in app.ini' -E"); + StopDownloading(); + EditBox_UpdateText(#ed, ed_focus + ed_always_focus); + DrawWindow(); + return; + } + strcpy(#get_url, #proxy_address); + strncat(#get_url, #uEdit, URL_SIZE); + } else { + strcpy(#get_url, #uEdit); } - strcpy(#get_url, #uEdit); if (http.get(#get_url)) { pb.value = 0; @@ -288,7 +301,7 @@ void CompleteDownload() void SaveFile(int attempt) { - int i, fi=0; + int i; char notify_message[4296]; char file_name[URL_SIZE+96]; @@ -349,7 +362,6 @@ void SaveFile(int attempt) void Unarchive(dword _arc) { char folder_name[4096]; - strcpy(#folder_name, #save_dir); strcpy(#folder_name, #filepath+strrchr(#filepath, '/')); folder_name[strlen(#folder_name)-4] = '\0'; CreateDir(#folder_name); diff --git a/programs/cmm/downloader/settings.h b/programs/cmm/downloader/settings.h index cddde5cc7..3d1b6104a 100644 --- a/programs/cmm/downloader/settings.h +++ b/programs/cmm/downloader/settings.h @@ -5,5 +5,5 @@ void LoadIniConfig() ini.path = GetIni(#settings_file, "app.ini"); ini.section = "WebView"; - ini.GetString("proxy", #proxy_address, sizeof(proxy_address), NULL); + ini.GetString("proxy_address", #proxy_address, sizeof(proxy_address), NULL); } \ No newline at end of file