Skip to content

Commit

Permalink
[md5sum] fix unwanted partial matches in is_in_md5sum()
Browse files Browse the repository at this point in the history
* is_in_md5sum() could partially match a string against another one, which, aside from matching
  unwanted files, could also lead to files not being identified as being in the md5sum.txt if
  the previous partial match happened to be with the current search target.
* Fix this by making sure that we always match a whole path followed by '/n', '/r' or '/0'.
  • Loading branch information
pbatard committed Apr 28, 2024
1 parent df9e333 commit 83e0bda
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 11 deletions.
22 changes: 16 additions & 6 deletions src/iso.c
Original file line number Diff line number Diff line change
Expand Up @@ -493,7 +493,7 @@ static void fix_config(const char* psz_fullpath, const char* psz_path, const cha
static BOOL is_in_md5sum(char* path)
{
BOOL found = FALSE;
char c[3], *p;
char c[3], *p, *pos = md5sum_pos, *nul_pos;

// If we are creating the md5sum file from scratch, every file is in it.
if (fd_md5sum != NULL)
Expand All @@ -514,14 +514,24 @@ static BOOL is_in_md5sum(char* path)

// Search for the string in the remainder of the md5sum.txt
// NB: md5sum_data is always NUL terminated.
p = strstr(md5sum_pos, path);
p = strstr(pos, path);
// Cater for the case where we matched a partial string and look for the full one
while (p != NULL && p[strlen(path)] != '\n' && p[strlen(path)] != '\r' && p[strlen(path)] != '\0') {
pos = p + strlen(path);
p = strstr(pos, path);
}
found = (p != NULL);
// If not found in remainder and we have a remainder, loop to search from beginning
if (!found && md5sum_pos != md5sum_data) {
c[2] = *md5sum_pos;
*md5sum_pos = 0;
if (!found && pos != md5sum_data) {
nul_pos = pos;
c[2] = *nul_pos;
*nul_pos = 0;
p = strstr(md5sum_data, path);
*md5sum_pos = c[2];
while (p != NULL && p[strlen(path)] != '\n' && p[strlen(path)] != '\r' && p[strlen(path)] != '\0') {
pos = p + strlen(path);
p = strstr(pos, path);
}
*nul_pos = c[2];
found = (p != NULL);
}

Expand Down
10 changes: 5 additions & 5 deletions src/rufus.rc
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
IDD_DIALOG DIALOGEX 12, 12, 232, 326
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_ACCEPTFILES
CAPTION "Rufus 4.5.2146"
CAPTION "Rufus 4.5.2147"
FONT 9, "Segoe UI Symbol", 400, 0, 0x0
BEGIN
LTEXT "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP
Expand Down Expand Up @@ -397,8 +397,8 @@ END
//

VS_VERSION_INFO VERSIONINFO
FILEVERSION 4,5,2146,0
PRODUCTVERSION 4,5,2146,0
FILEVERSION 4,5,2147,0
PRODUCTVERSION 4,5,2147,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
Expand All @@ -416,13 +416,13 @@ BEGIN
VALUE "Comments", "https://rufus.ie"
VALUE "CompanyName", "Akeo Consulting"
VALUE "FileDescription", "Rufus"
VALUE "FileVersion", "4.5.2146"
VALUE "FileVersion", "4.5.2147"
VALUE "InternalName", "Rufus"
VALUE "LegalCopyright", "� 2011-2024 Pete Batard (GPL v3)"
VALUE "LegalTrademarks", "https://www.gnu.org/licenses/gpl-3.0.html"
VALUE "OriginalFilename", "rufus-4.5.exe"
VALUE "ProductName", "Rufus"
VALUE "ProductVersion", "4.5.2146"
VALUE "ProductVersion", "4.5.2147"
END
END
BLOCK "VarFileInfo"
Expand Down

0 comments on commit 83e0bda

Please sign in to comment.