diff --git a/src/checksum.c b/src/checksum.c
index 20fa181e..dbb20f3e 100644
--- a/src/checksum.c
+++ b/src/checksum.c
@@ -19,13 +19,34 @@
* along with this program. If not, see .
*/
-/* SHA-1 code taken from GnuPG */
-/* MD5 code taken from Asterisk */
+/*
+ * SHA-1 code taken from GnuPG, as per copyrights above.
+ *
+ * MD5 code from various public domain sources sharing the following
+ * copyright declaration:
+ *
+ * This code implements the MD5 message-digest algorithm.
+ * The algorithm is due to Ron Rivest. This code was
+ * written by Colin Plumb in 1993, no copyright is claimed.
+ * This code is in the public domain; do with it what you wish.
+ *
+ * Equivalent code is available from RSA Data Security, Inc.
+ * This code has been tested against that, and is equivalent,
+ * except that you don't need to include two pages of legalese
+ * with every copy.
+ *
+ * To compute the message digest of a chunk of bytes, declare an
+ * MD5Context structure, pass it to MD5Init, call MD5Update as
+ * needed on buffers full of bytes, and then call MD5Final, which
+ * will fill a supplied 16-byte array with the digest.
+ */
+
#include
#include
#include
#include
#include
+#include
#include "msapi_utf8.h"
#include "rufus.h"
#include "resource.h"
@@ -523,7 +544,8 @@ static void md5_final(MD5_CONTEXT *ctx)
*/
INT_PTR CALLBACK ChecksumCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
- int i;
+ int i, dw;
+ RECT rect;
HFONT hFont;
HDC hDC;
@@ -540,6 +562,19 @@ INT_PTR CALLBACK ChecksumCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM
SendDlgItemMessageA(hDlg, IDC_SHA1, WM_SETFONT, (WPARAM)hFont, TRUE);
SetWindowTextA(GetDlgItem(hDlg, IDC_MD5), md5str);
SetWindowTextA(GetDlgItem(hDlg, IDC_SHA1), sha1str);
+
+ // Move/Resize the controls as needed to fit our text
+ hDC = GetDC(GetDlgItem(hDlg, IDC_SHA1));
+ SelectFont(hDC, hFont); // Yes, you *MUST* reapply the font to the DC, even after SetWindowText!
+ GetWindowRect(GetDlgItem(hDlg, IDC_SHA1), &rect);
+ dw = rect.right - rect.left;
+ DrawTextU(hDC, sha1str, -1, &rect, DT_CALCRECT);
+ if (hDC != NULL)
+ ReleaseDC(GetDlgItem(hDlg, IDC_SHA1), hDC);
+ dw = rect.right - rect.left - dw + 12; // Ideally we'd compute the field borders from the system, but hey...
+ ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDC_MD5), 0, 0, dw, 0, 1.0f);
+ ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDC_SHA1), 0, 0, dw, 0, 1.0f);
+
for (i=(int)safe_strlen(image_path); (i>0)&&(image_path[i]!='\\'); i--);
if (image_path != NULL) // VS code analysis has a false positive on this one
SetWindowTextU(hDlg, &image_path[i+1]);
diff --git a/src/license.h b/src/license.h
index f038b312..1850887c 100644
--- a/src/license.h
+++ b/src/license.h
@@ -101,6 +101,13 @@ const char* additional_copyrights =
"http://kolibrios.org\\line\n"
"GNU General Public License (GPL) v2 or later\\line\n"
"\\line\n"
+"MD5 checksum by Ron Rivest, Colin Plumb et al.\\line\n"
+"Public Domain\\line\n"
+"\\line\n"
+"SHA-1 checksum from GnuPG:\\line\n"
+"https://www.gnupg.org\\line\n"
+"GNU General Public License (GPL) v3 or later\\line\n"
+"\\line\n"
"About and License dialogs inspired by WinSCP by Martin Prikryl\\line\n"
"http://winscp.net\\line\n"
"GNU General Public License (GPL) v3 or later\\line\n"
diff --git a/src/rufus.rc b/src/rufus.rc
index d11ec2d1..c0dff7ba 100644
--- a/src/rufus.rc
+++ b/src/rufus.rc
@@ -32,7 +32,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
IDD_DIALOG DIALOGEX 12, 12, 242, 376
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "Rufus 2.3.700"
+CAPTION "Rufus 2.3.701"
FONT 8, "Segoe UI Symbol", 400, 0, 0x0
BEGIN
LTEXT "Device",IDS_DEVICE_TXT,9,6,200,8
@@ -317,8 +317,8 @@ END
//
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 2,3,700,0
- PRODUCTVERSION 2,3,700,0
+ FILEVERSION 2,3,701,0
+ PRODUCTVERSION 2,3,701,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@@ -335,13 +335,13 @@ BEGIN
BEGIN
VALUE "CompanyName", "Akeo Consulting (http://akeo.ie)"
VALUE "FileDescription", "Rufus"
- VALUE "FileVersion", "2.3.700"
+ VALUE "FileVersion", "2.3.701"
VALUE "InternalName", "Rufus"
VALUE "LegalCopyright", "© 2011-2015 Pete Batard (GPL v3)"
VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html"
VALUE "OriginalFilename", "rufus.exe"
VALUE "ProductName", "Rufus"
- VALUE "ProductVersion", "2.3.700"
+ VALUE "ProductVersion", "2.3.701"
END
END
BLOCK "VarFileInfo"
diff --git a/src/stdlg.c b/src/stdlg.c
index 92e535d6..0717bed5 100644
--- a/src/stdlg.c
+++ b/src/stdlg.c
@@ -821,7 +821,7 @@ INT_PTR CALLBACK SelectionCallback(HWND hDlg, UINT message, WPARAM wParam, LPARA
RECT rect;
HFONT hDlgFont;
HWND hCtrl;
- HDC dc;
+ HDC hDC;
switch (message) {
case WM_INITDIALOG:
@@ -861,13 +861,14 @@ INT_PTR CALLBACK SelectionCallback(HWND hDlg, UINT message, WPARAM wParam, LPARA
// Move/Resize the controls as needed to fit our text
hCtrl = GetDlgItem(hDlg, IDC_SELECTION_TEXT);
- dc = GetDC(hCtrl);
- SelectFont(dc, hDlgFont); // Yes, you *MUST* reapply the font to the DC, even after SetWindowText!
+ hDC = GetDC(hCtrl);
+ SelectFont(hDC, hDlgFont); // Yes, you *MUST* reapply the font to the DC, even after SetWindowText!
GetWindowRect(hCtrl, &rect);
dh = rect.bottom - rect.top;
- DrawTextU(dc, szMessageText, -1, &rect, DT_CALCRECT | DT_WORDBREAK);
+ DrawTextU(hDC, szMessageText, -1, &rect, DT_CALCRECT | DT_WORDBREAK);
dh = rect.bottom - rect.top - dh;
- ReleaseDC(hCtrl, dc);
+ if (hDC != NULL)
+ ReleaseDC(hCtrl, hDC);
ResizeMoveCtrl(hDlg, hCtrl, 0, 0, 0, dh, 1.0f);
ResizeMoveCtrl(hDlg, hDlg, 0, 0, 0, dh, 1.0f);