Call for testing: OpenSSH 6.7

Damien Miller djm at mindrot.org
Fri Aug 22 17:48:54 EST 2014


On Thu, 21 Aug 2014, Tom Christensen wrote:

> On 21/08/14 03:00, Damien Miller wrote:
> > Thanks for figuring this out. I'd prefer to keep the dependencies from
> > the tests to a minimum, at least until we have the API defined in
> > libopenssh, so here's a workaround that uses argv[0]:
> > 
> <snip patch>
> 
> That took care of the segfault but unfortunately test_sshbuf fails:
> test_sshbuf: ........................................................
> regress/unittests/sshbuf/test_sshbuf_getput_basic.c:412 test #57 "sshbuf_putf"
> ASSERT_INT_EQ(r, 0) failed:
>            r = -10
>            0 = 0
> 
> The rest of the testsuite is a total loss presumably due to this early
> failure.
> 
> This is on Solaris 9/SPARC with gcc 4.9.1.

It looks like this is failing:

        if ((len = vsnprintf(NULL, 0, fmt, ap2)) < 0) {

Does your libc vsnprintf() support checking the length of the formatted
string this way? (AFAIK SUSv3 requires it).

We should check for it in configure anyway...

Index: configure.ac
===================================================================
RCS file: /var/cvs/openssh/configure.ac,v
retrieving revision 1.580
diff -u -p -r1.580 configure.ac
--- configure.ac	22 Aug 2014 07:36:20 -0000	1.580
+++ configure.ac	22 Aug 2014 07:48:42 -0000
@@ -1887,11 +1887,9 @@ if test "x$ac_cv_func_snprintf" = "xyes"
 	)
 fi
 
-# If we don't have a working asprintf, then we strongly depend on vsnprintf
-# returning the right thing on overflow: the number of characters it tried to
-# create (as per SUSv3)
-if test "x$ac_cv_func_asprintf" != "xyes" && \
-   test "x$ac_cv_func_vsnprintf" = "xyes" ; then
+# We depend on vsnprintf returning the right thing on overflow: the
+# number of characters it tried to create (as per SUSv3)
+if test "x$ac_cv_func_vsnprintf" = "xyes" ; then
 	AC_MSG_CHECKING([whether vsnprintf returns correct values on overflow])
 	AC_RUN_IFELSE(
 		[AC_LANG_PROGRAM([[
@@ -1899,15 +1897,23 @@ if test "x$ac_cv_func_asprintf" != "xyes
 #include <stdio.h>
 #include <stdarg.h>
 
-int x_snprintf(char *str,size_t count,const char *fmt,...)
+int x_snprintf(char *str, size_t count, const char *fmt, ...)
 {
-	size_t ret; va_list ap;
-	va_start(ap, fmt); ret = vsnprintf(str, count, fmt, ap); va_end(ap);
+	size_t ret;
+	va_list ap;
+
+	va_start(ap, fmt);
+	ret = vsnprintf(str, count, fmt, ap);
+	va_end(ap);
 	return ret;
 }
 		]], [[
-	char x[1];
-	exit(x_snprintf(x, 1, "%s %d", "hello", 12345) == 11 ? 0 : 1);
+char x[1];
+if (x_snprintf(x, 1, "%s %d", "hello", 12345) != 11)
+	return 1;
+if (x_snprintf(NULL, 0, "%s %d", "hello", 12345) != 11)
+	return 1;
+return 0;
 		]])],
 		[AC_MSG_RESULT([yes])],
 		[



More information about the openssh-unix-dev mailing list