<pre style='margin:0'>
Christopher Nielsen (mascguy) pushed a commit to branch master
in repository macports-legacy-support.
</pre>
<p><a href="https://github.com/macports/macports-legacy-support/commit/4d68e7e705b372f045500ad3953f81b774462339">https://github.com/macports/macports-legacy-support/commit/4d68e7e705b372f045500ad3953f81b774462339</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 4d68e7e705b372f045500ad3953f81b774462339
</span>Author: Fred Wright <fw@fwright.net>
AuthorDate: Mon Jun 2 20:23:41 2025 -0700
<span style='display:block; white-space:pre;color:#404040;'> stpncpy_chk: Fix build for mismatched SDK.
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> The __chk_fail() function is only available in the 10.5 and 10.6
</span><span style='display:block; white-space:pre;color:#404040;'> libSystem, so building for those OS versions with a 10.7+ SDK gets
</span><span style='display:block; white-space:pre;color:#404040;'> an undefined symbol. This changes it to use dlsym() to look up
</span><span style='display:block; white-space:pre;color:#404040;'> the symbol at runtime (which only happens in the failing case).
</span><span style='display:block; white-space:pre;color:#404040;'> Weak linking doesn't work without extra hackery.
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> TESTED:
</span><span style='display:block; white-space:pre;color:#404040;'> Now builds with all compatible SDKs, and tests pass.
</span>---
src/stpncpy_chk.c | 27 ++++++++++++++++++---------
1 file changed, 18 insertions(+), 9 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/stpncpy_chk.c b/src/stpncpy_chk.c
</span><span style='display:block; white-space:pre;color:#808080;'>index d2b0dd4..3e51699 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/stpncpy_chk.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/stpncpy_chk.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -22,9 +22,10 @@
</span> */
/*
<span style='display:block; white-space:pre;background:#ffe0e0;'>- * NOTICE: This file was modified in May 2024 to allow for use as a supporting
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * file for MacPorts legacy support library. This notice is included in support
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * of clause 2.2 (b) of the Apple Public License, Version 2.0.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * NOTICE: This file was modified in May 2024, and again in June 2025, to allow
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * for use as a supporting file for MacPorts legacy support library. This
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * notice is included in support of clause 2.2 (b) of the Apple Public License,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Version 2.0.
</span> *
* The code is almost verbatim from Apple except for:
*
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -37,10 +38,16 @@
</span> *
* The _FORTIFY_SOURCE definition here in lieu of providing it as a
* compiler command-line flag (as the Apple build procedure does).
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Making the reference to __chk_fail optional, to handle building
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * with a "mismatched" SDK. This uses dlsym() instead of weak linking.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * The inclusion of OS version conditionals.
</span> */
/* MP support header */
#include "MacportsLegacySupport.h"
<span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> /* Note that the support for this mechanism is absent prior to 10.5 */
#if __MPLS_LIB_SUPPORT_STPNCPY__ && __MPLS_TARGET_OSVER >= 1050
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -48,17 +55,19 @@
</span> #undef _FORTIFY_SOURCE
#define _FORTIFY_SOURCE 0
<span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <dlfcn.h>
</span> #include <stdlib.h>
#include <string.h>
<span style='display:block; white-space:pre;background:#ffe0e0;'>-extern void __chk_fail (void) __attribute__((__noreturn__));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> char *
<span style='display:block; white-space:pre;background:#ffe0e0;'>-__stpncpy_chk (char *dest, const char *src,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- size_t len, size_t dstlen)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+__stpncpy_chk (char *dest, const char *src, size_t len, size_t dstlen)
</span> {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if (__builtin_expect (dstlen < len, 0))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- __chk_fail ();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void (*chk_fail_p) (void) __attribute__((__noreturn__));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (__builtin_expect (dstlen < len, 0)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if ((chk_fail_p = dlsym(RTLD_NEXT, "__chk_fail"))) (*chk_fail_p)();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ abort();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span>
return stpncpy (dest, src, len);
}
</pre><pre style='margin:0'>
</pre>