Slightly improved cleansing of the command-line on Win32.
This commit is contained in:
parent
334d828c5b
commit
f250143f8b
@ -21,6 +21,7 @@
|
|||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
/* Const */
|
/* Const */
|
||||||
#define BUFFER_SIZE 4096U
|
#define BUFFER_SIZE 4096U
|
||||||
@ -329,6 +330,7 @@ static int encrypt(const char* const passphrase, const CHR* const input_path, co
|
|||||||
}
|
}
|
||||||
|
|
||||||
const size_t padding = sizeof(uint64_t) - (file_size % sizeof(uint64_t));
|
const size_t padding = sizeof(uint64_t) - (file_size % sizeof(uint64_t));
|
||||||
|
assert(padding && (padding <= sizeof(uint64_t)));
|
||||||
if (slunkcrypt_random_bytes(buffer, padding) < padding)
|
if (slunkcrypt_random_bytes(buffer, padding) < padding)
|
||||||
{
|
{
|
||||||
FPUTS(T("\n\nSlunkCrypt error: Failed to generate random data!\n\n"), stderr);
|
FPUTS(T("\n\nSlunkCrypt error: Failed to generate random data!\n\n"), stderr);
|
||||||
@ -503,6 +505,7 @@ static int decrypt(const char* const passphrase, const CHR* const input_path, co
|
|||||||
}
|
}
|
||||||
|
|
||||||
const size_t padding = GET_LOWBITS(buffer[sizeof(uint64_t) - 1U]) + 1U;
|
const size_t padding = GET_LOWBITS(buffer[sizeof(uint64_t) - 1U]) + 1U;
|
||||||
|
assert(padding && (padding <= sizeof(uint64_t)));
|
||||||
if (padding != sizeof(uint64_t))
|
if (padding != sizeof(uint64_t))
|
||||||
{
|
{
|
||||||
const size_t count = sizeof(uint64_t) - padding;
|
const size_t count = sizeof(uint64_t) - padding;
|
||||||
|
@ -48,22 +48,39 @@
|
|||||||
// Terminal initialization
|
// Terminal initialization
|
||||||
// ==========================================================================
|
// ==========================================================================
|
||||||
|
|
||||||
/* CRT imports */
|
#ifdef _WIN32
|
||||||
#if defined(_WIN32) && !defined(_DLL)
|
#ifdef _DLL
|
||||||
|
#define _acmdln GetCommandLineA()
|
||||||
|
#define _wcmdln GetCommandLineW()
|
||||||
|
#else
|
||||||
extern char *const _acmdln;
|
extern char *const _acmdln;
|
||||||
extern wchar_t *const _wcmdln;
|
extern wchar_t *const _wcmdln;
|
||||||
#endif
|
#endif
|
||||||
|
static void clear_cmdline_args(char *const acmdln, wchar_t *const wcmdln)
|
||||||
|
{
|
||||||
|
if (acmdln && acmdln[0U])
|
||||||
|
{
|
||||||
|
const size_t len = strlen(acmdln);
|
||||||
|
slunkcrypt_bzero(acmdln, len * sizeof(char));
|
||||||
|
if (len > 5U) strcpy(acmdln, "slunk");
|
||||||
|
}
|
||||||
|
if (wcmdln && wcmdln[0U])
|
||||||
|
{
|
||||||
|
const size_t len = wcslen(wcmdln);
|
||||||
|
slunkcrypt_bzero(wcmdln, len * sizeof(wchar_t));
|
||||||
|
if (len > 5U) wcscpy(wcmdln, L"slunk");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void init_terminal(void)
|
void init_terminal(void)
|
||||||
{
|
{
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
|
SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
|
||||||
_setmode(_fileno(stdin), _O_BINARY);
|
_setmode(_fileno(stdout), _O_BINARY);
|
||||||
|
_setmode(_fileno(stdin), _O_BINARY);
|
||||||
_setmode(_fileno(stderr), _O_U8TEXT);
|
_setmode(_fileno(stderr), _O_U8TEXT);
|
||||||
#ifndef _DLL
|
clear_cmdline_args(_acmdln, _wcmdln);
|
||||||
if (_acmdln) slunkcrypt_bzero(_acmdln, strlen(_acmdln) * sizeof(char));
|
|
||||||
if (_wcmdln) slunkcrypt_bzero(_wcmdln, wcslen(_wcmdln) * sizeof(wchar_t));
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user