diff options
author | B Stack <bgstack15@gmail.com> | 2019-03-12 16:09:20 -0400 |
---|---|---|
committer | B Stack <bgstack15@gmail.com> | 2019-03-12 16:09:20 -0400 |
commit | 27177c9cbc47d4114ccee56015fb0407e7e258cc (patch) | |
tree | dc226d83311470a23cdf0c02064feb525fcc5096 /Bugs.txt | |
parent | Merge branch '10.9' into 'master' (diff) | |
download | FreeFileSync-27177c9cbc47d4114ccee56015fb0407e7e258cc.tar.gz FreeFileSync-27177c9cbc47d4114ccee56015fb0407e7e258cc.tar.bz2 FreeFileSync-27177c9cbc47d4114ccee56015fb0407e7e258cc.zip |
10.10
Diffstat (limited to 'Bugs.txt')
-rwxr-xr-x | Bugs.txt | 217 |
1 files changed, 217 insertions, 0 deletions
diff --git a/Bugs.txt b/Bugs.txt new file mode 100755 index 00000000..1cec865e --- /dev/null +++ b/Bugs.txt @@ -0,0 +1,217 @@ +When manually compiling FreeFileSync, you should also fix the following bugs in its dependent libraries: + + +---------------- +| libssh2 Bugs | +---------------- +__________________________________________________________________________________________________________ +Amazons SFTP server returns legitimate package sizes of ~100kb! +https://freefilesync.org/forum/viewtopic.php?t=5999 + +/src/sftp.c: + +- #define LIBSSH2_SFTP_PACKET_MAXLEN 80000 ++ #define LIBSSH2_SFTP_PACKET_MAXLEN 160000 +__________________________________________________________________________________________________________ + + +---------------- +| libcurl Bugs | +---------------- +__________________________________________________________________________________________________________ +https://github.com/curl/curl/issues/1455 + +/lib/ftp.c: + +Add: + static bool is_routable_ip_v4(unsigned int ip[4]) + { + if (ip[0] == 127 || //127.0.0.0/8 (localhost) + ip[0] == 10 || //10.0.0.0/8 (private) + (ip[0] == 192 && ip[1] == 168) || //192.168.0.0/16 (private) + (ip[0] == 169 && ip[1] == 254) || //169.254.0.0/16 (link-local) + (ip[0] == 172 && ip[1] / 16 == 1)) //172.16.0.0/12 (private) + return false; + return true; + } + + +Remove: if (data->set.ftp_skip_ip) + +Replace with: + + bool skipIp = data->set.ftp_skip_ip; + if (!skipIp && !is_routable_ip_v4(ip)) + { + unsigned int ip_ctrl[4]; + if (4 != sscanf(control_address(conn), "%u.%u.%u.%u", + &ip_ctrl[0], &ip_ctrl[1], &ip_ctrl[2], &ip_ctrl[3]) || + is_routable_ip_v4(ip_ctrl)) + skipIp = true; + } + + if (skipIp) +__________________________________________________________________________________________________________ + +"wrong dir listing because libcurl remembers wrong CWD": https://github.com/curl/curl/issues/1782 + +=> "fixed" by adding only the "if (data->set.ftp_filemethod == FTPFILE_NOCWD)" below: https://github.com/curl/curl/issues/1811 +=> this is NOT enough! consider what happens for a reused connection that first used CURLFTPMETHOD_MULTICWD, now CURLFTPMETHOD_NOCWD: + + the code in ftp_state_cwd() will issue a CWD sequence that ends with "ftpc->cwdcount == 1"!!! See "if (++ftpc->cwdcount <= ftpc->dirdepth)" + => this skips the previous "fix" in https://github.com/curl/curl/issues/1718 with + if ((conn->data->set.ftp_filemethod == FTPFILE_NOCWD) && !ftpc->cwdcount) + +/lib/ftp.c: + + if (ftpc->prevpath) + { ++ if (data->set.ftp_filemethod == FTPFILE_NOCWD) ++ { ++ /* ++ CURLFTPMETHOD_NOCWD ++ if the connection is used for the first time, *no* CWD takes place ++ if the connection is reused, ftp_state_cwd() issues a single "CWD ftpc->entrypath" before the operation ++ in both cases ftp_done() sets ftpc->prevpath to "" after a successfull FTP operation ++ ergo: "" corresponds to ftpc->entrypath, so we only ever need CWD if ftpc->prevpath != "" ++ => avoid needless "CWD /" and reduce folder traversal time with CURLFTPMETHOD_NOCWD by 15-20% ++ */ ++ if (strcmp(ftpc->prevpath, "") == 0) ++ { ++ infof(data, "Request has same path (\"%s\") as previous transfer\n", ftpc->prevpath); ++ ftpc->cwddone = TRUE; ++ } ++ } ++ else ++ { + /* prevpath is "raw" so we convert the input path before we compare the + strings */ + size_t dlen; + char* path; + CURLcode result = + Curl_urldecode(conn->data, data->state.path, 0, &path, &dlen, FALSE); + if (result) + { + freedirs(ftpc); + return result; + } + + dlen -= ftpc->file?strlen(ftpc->file):0; + if ((dlen == strlen(ftpc->prevpath)) && + !strncmp(path, ftpc->prevpath, dlen) && +- (ftpc->prevmethod == data->set.ftp_filemethod)) ++ true) //(ftpc->prevmethod == data->set.ftp_filemethod)) + { + infof(data, "Request has same path as previous transfer\n"); + ftpc->cwddone = TRUE; + } + free(path); ++ } + } +__________________________________________________________________________________________________________ + + +------------------ +| wxWidgets Bugs | +------------------ +__________________________________________________________________________________________________________ +Fix incorrect pane height calculations: + +/src/aui/framemanager.cpp: + +- // determine the dock's minimum size +- bool plus_border = false; +- bool plus_caption = false; +- int dock_min_size = 0; +- for (j = 0; j < dock_pane_count; ++j) +- { +- wxAuiPaneInfo& pane = *dock.panes.Item(j); +- if (pane.min_size != wxDefaultSize) +- { +- if (pane.HasBorder()) +- plus_border = true; +- if (pane.HasCaption()) +- plus_caption = true; +- if (dock.IsHorizontal()) +- { +- if (pane.min_size.y > dock_min_size) +- dock_min_size = pane.min_size.y; +- } +- else +- { +- if (pane.min_size.x > dock_min_size) +- dock_min_size = pane.min_size.x; +- } +- } +- } +- +- if (plus_border) +- dock_min_size += (pane_borderSize*2); +- if (plus_caption && dock.IsHorizontal()) +- dock_min_size += (caption_size); +- +- dock.min_size = dock_min_size; + + ++ // determine the dock's minimum size ++ int dock_min_size = 0; ++ for (j = 0; j < dock_pane_count; ++j) ++ { ++ wxAuiPaneInfo& pane = *dock.panes.Item(j); ++ if (pane.min_size != wxDefaultSize) ++ { ++ int paneSize = dock.IsHorizontal() ? pane.min_size.y : pane.min_size.x; ++ if (pane.HasBorder()) ++ paneSize += 2 * pane_borderSize; ++ if (pane.HasCaption() && dock.IsHorizontal()) ++ paneSize += caption_size; ++ ++ if (paneSize > dock_min_size) ++ dock_min_size = paneSize; ++ } ++ } ++ ++ dock.min_size = dock_min_size; +__________________________________________________________________________________________________________ + +/src/gtk/menu.cpp: + +-g_signal_connect(m_menu, "map", G_CALLBACK(menu_map), this); ++g_signal_connect(m_menu, "show", G_CALLBACK(menu_map), this); //"map" is never called on Ubuntu Unity, but "show" is +__________________________________________________________________________________________________________ + +Backspace not working in filter dialog: http://www.freefilesync.org/forum/viewtopic.php?t=347 + +/src/gtk/window.cpp: + + void wxWindowGTK::ConnectWidget( GtkWidget *widget ) + { +- static bool isSourceAttached; +- if (!isSourceAttached) +- { +- // attach GSource to detect new GDK events +- isSourceAttached = true; +- static GSourceFuncs funcs = { +- source_prepare, source_check, source_dispatch, +- NULL, NULL, NULL +- }; +- GSource* source = g_source_new(&funcs, sizeof(GSource)); +- // priority slightly higher than GDK_PRIORITY_EVENTS +- g_source_set_priority(source, GDK_PRIORITY_EVENTS - 1); +- g_source_attach(source, NULL); +- } ++// ++// if (!isSourceAttached) ++// { ++// // attach GSource to detect new GDK events ++// isSourceAttached = true; ++// static GSourceFuncs funcs = { ++// source_prepare, source_check, source_dispatch, ++// NULL, NULL, NULL ++// }; ++// GSource* source = g_source_new(&funcs, sizeof(GSource)); ++// // priority slightly higher than GDK_PRIORITY_EVENTS ++// g_source_set_priority(source, GDK_PRIORITY_EVENTS - 1); ++// g_source_attach(source, NULL); ++// } +__________________________________________________________________________________________________________ |