diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-06 03:01:46 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-06 03:01:46 +0000 |
commit | f8fe689a81f906d1b91bb3220acde2a4ecb14c5b (patch) | |
tree | 26484e9d7e2c67806c2d1760196ff01aaa858e8c /src/VBox/HostDrivers/Support/SUPR3HardenedNoCrt.cpp | |
parent | Initial commit. (diff) | |
download | virtualbox-f8fe689a81f906d1b91bb3220acde2a4ecb14c5b.tar.xz virtualbox-f8fe689a81f906d1b91bb3220acde2a4ecb14c5b.zip |
Adding upstream version 6.0.4-dfsg.upstream/6.0.4-dfsgupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/VBox/HostDrivers/Support/SUPR3HardenedNoCrt.cpp')
-rw-r--r-- | src/VBox/HostDrivers/Support/SUPR3HardenedNoCrt.cpp | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/src/VBox/HostDrivers/Support/SUPR3HardenedNoCrt.cpp b/src/VBox/HostDrivers/Support/SUPR3HardenedNoCrt.cpp new file mode 100644 index 00000000..cafc3e5a --- /dev/null +++ b/src/VBox/HostDrivers/Support/SUPR3HardenedNoCrt.cpp @@ -0,0 +1,179 @@ +/* $Id: SUPR3HardenedNoCrt.cpp $ */ +/** @file + * VirtualBox Support Library - Hardened main() no-crt routines. + */ + +/* + * Copyright (C) 2006-2019 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#if RT_OS_WINDOWS +# include <iprt/win/windows.h> +#endif + +#include <VBox/sup.h> + +#include "SUPLibInternal.h" + + +#ifdef SUP_HARDENED_NEED_CRT_FUNCTIONS /** @todo this crap is obsolete. */ + +/** memcmp */ +DECLHIDDEN(int) suplibHardenedMemComp(void const *pvDst, const void *pvSrc, size_t cbToComp) +{ + size_t const *puDst = (size_t const *)pvDst; + size_t const *puSrc = (size_t const *)pvSrc; + while (cbToComp >= sizeof(size_t)) + { + if (*puDst != *puSrc) + break; + puDst++; + puSrc++; + cbToComp -= sizeof(size_t); + } + + uint8_t const *pbDst = (uint8_t const *)puDst; + uint8_t const *pbSrc = (uint8_t const *)puSrc; + while (cbToComp > 0) + { + if (*pbDst != *pbSrc) + { + if (*pbDst < *pbSrc) + return -1; + return 1; + } + + pbDst++; + pbSrc++; + cbToComp--; + } + + return 0; +} + + +/** memcpy */ +DECLHIDDEN(void *) suplibHardenedMemCopy(void *pvDst, const void *pvSrc, size_t cbToCopy) +{ + size_t *puDst = (size_t *)pvDst; + size_t const *puSrc = (size_t const *)pvSrc; + while (cbToCopy >= sizeof(size_t)) + { + *puDst++ = *puSrc++; + cbToCopy -= sizeof(size_t); + } + + uint8_t *pbDst = (uint8_t *)puDst; + uint8_t const *pbSrc = (uint8_t const *)puSrc; + while (cbToCopy > 0) + { + *pbDst++ = *pbSrc++; + cbToCopy--; + } + + return pvDst; +} + + +/** memset */ +DECLHIDDEN(void *) suplibHardenedMemSet(void *pvDst, int ch, size_t cbToSet) +{ + uint8_t *pbDst = (uint8_t *)pvDst; + while (cbToSet > 0) + { + *pbDst++ = (uint8_t)ch; + cbToSet--; + } + + return pvDst; +} + + +/** strcpy */ +DECLHIDDEN(char *) suplibHardenedStrCopy(char *pszDst, const char *pszSrc) +{ + char *pszRet = pszDst; + char ch; + do + { + ch = *pszSrc++; + *pszDst++ = ch; + } while (ch); + return pszRet; +} + + +/** strlen */ +DECLHIDDEN(size_t) suplibHardenedStrLen(const char *psz) +{ + const char *pszStart = psz; + while (*psz) + psz++; + return psz - pszStart; +} + + +/** strcat */ +DECLHIDDEN(char *) suplibHardenedStrCat(char *pszDst, const char *pszSrc) +{ + char *pszRet = pszDst; + while (*pszDst) + pszDst++; + suplibHardenedStrCopy(pszDst, pszSrc); + return pszRet; +} + + +/** strcmp */ +DECLHIDDEN(int) suplibHardenedStrCmp(const char *psz1, const char *psz2) +{ + for (;;) + { + char ch1 = *psz1++; + char ch2 = *psz2++; + if (ch1 != ch2) + return ch1 < ch2 ? -1 : 1; + if (ch1 == 0) + return 0; + } +} + + +/** strncmp */ +DECLHIDDEN(int) suplibHardenedStrNCmp(const char *psz1, const char *psz2, size_t cchMax) +{ + while (cchMax-- > 0) + { + char ch1 = *psz1++; + char ch2 = *psz2++; + if (ch1 != ch2) + return ch1 < ch2 ? -1 : 1; + if (ch1 == 0) + break; + } + return 0; +} + +#endif /* SUP_HARDENED_NEED_CRT_FUNCTIONS */ + |