Disable native strndup and strnlen on AIX.

On at least some revisions of AIX, strndup returns unterminated strings
under some conditions, apparently because strnlen returns incorrect
values in those cases.  Disable both on AIX and use the replacements
from openbsd-compat.  Fixes problem with ECDSA keys there, ok djm.
This commit is contained in:
Darren Tucker 2018-03-30 18:23:07 +11:00
parent 6b5a17bc14
commit 2c71ca1dd1
3 changed files with 4 additions and 2 deletions

View File

@ -603,6 +603,8 @@ case "$host" in
[AIX 5.2 and 5.3 (and presumably newer) require this])
AC_DEFINE([PTY_ZEROREAD], [1], [read(1) can return 0 for a non-closed fd])
AC_DEFINE([PLATFORM_SYS_DIR_UID], 2, [System dirs owned by bin (uid 2)])
AC_DEFINE([BROKEN_STRNDUP], 1, [strndup broken, see APAR IY61211])
AC_DEFINE([BROKEN_STRNLEN], 1, [strnlen broken, see APAR IY62551])
;;
*-*-android*)
AC_DEFINE([DISABLE_UTMP], [1], [Define if you don't want to use utmp])

View File

@ -17,7 +17,7 @@
*/
#include "config.h"
#ifndef HAVE_STRNDUP
#if !defined(HAVE_STRNDUP) || defined(BROKEN_STRNDUP)
#include <sys/types.h>
#include <stddef.h>

View File

@ -19,7 +19,7 @@
/* OPENBSD ORIGINAL: lib/libc/string/strnlen.c */
#include "config.h"
#ifndef HAVE_STRNLEN
#if !defined(HAVE_STRNLEN) || defined(BROKEN_STRNLEN)
#include <sys/types.h>
#include <string.h>