-
-
Notifications
You must be signed in to change notification settings - Fork 29
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add optional security wrapper for stpncpy().
This adds support for the optional stpncpy() security wrapper, based on the _FORTIFY_SOURCE setting. By default, it only impacts 10.6 builds, though it can be explicitly enabled on 10.5, albeit less efficiently due to the lack of the compiler builtin. The stpncpy() function is the only one with an optional security wrapper which is also optionally provided by legacy-support. Hence, this is the only addition needed to close the more general ticket. Closes: https://trac.macports.org/ticket/69878 Also fixes a minor comment formatting issue. TESTED: Tested on 10.4-10.5 ppc, 10.4-10.6 i386, 10.5-10.6 ppc (i386 Rosetta), 10.5-12.x x86_64, 11.x-14.x arm64. Passes all tests, including newly added tests for this feature.
- Loading branch information
Showing
3 changed files
with
126 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
/* | ||
* Copyright (c) 2010 Apple Inc. All rights reserved. | ||
* | ||
* @APPLE_LICENSE_HEADER_START@ | ||
* | ||
* This file contains Original Code and/or Modifications of Original Code | ||
* as defined in and that are subject to the Apple Public Source License | ||
* Version 2.0 (the 'License'). You may not use this file except in | ||
* compliance with the License. Please obtain a copy of the License at | ||
* http://www.opensource.apple.com/apsl/ and read it before using this | ||
* file. | ||
* | ||
* The Original Code and all software distributed under the License are | ||
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER | ||
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, | ||
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, | ||
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. | ||
* Please see the License for the specific language governing rights and | ||
* limitations under the License. | ||
* | ||
* @APPLE_LICENSE_HEADER_END@ | ||
*/ | ||
|
||
/* | ||
* NOTICE: This file was modified in May 2024 to allow for use as a supporting | ||
* file for MacPorts legacy support library. This notice is included in support | ||
* of clause 2.2 (b) of the Apple Public License, Version 2.0. | ||
* | ||
* The code is almost verbatim from Apple except for: | ||
* | ||
* The correction of the return type. | ||
* | ||
* The removal of the 'restrict' qualifiers for compatibility with | ||
* pre-C99 compilers. | ||
* | ||
* The addition of the missing 'const' qualifier. | ||
* | ||
* The _FORTIFY_SOURCE definition here in lieu of providing it as a | ||
* compiler command-line flag (as the Apple build procedure does). | ||
*/ | ||
|
||
/* MP support header */ | ||
#include "MacportsLegacySupport.h" | ||
/* Note that the support for this mechanism is absent prior to 10.5 */ | ||
#if __MP_LEGACY_SUPPORT_STPNCPY__ && \ | ||
__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1050 | ||
|
||
/* Ensure that we don't create an infinitely recursive check function */ | ||
#undef _FORTIFY_SOURCE | ||
#define _FORTIFY_SOURCE 0 | ||
|
||
#include <stdlib.h> | ||
#include <string.h> | ||
|
||
extern void __chk_fail (void) __attribute__((__noreturn__)); | ||
|
||
char * | ||
__stpncpy_chk (char *dest, const char *src, | ||
size_t len, size_t dstlen) | ||
{ | ||
if (__builtin_expect (dstlen < len, 0)) | ||
__chk_fail (); | ||
|
||
return stpncpy (dest, src, len); | ||
} | ||
|
||
#endif /* __MP_LEGACY_SUPPORT_STPNCPY__ && >= 10.5*/ |