Avoid using BIO streams in bioprinttest.c
authorRichard Levitte <levitte@openssl.org>
Wed, 19 Apr 2017 11:06:08 +0000 (13:06 +0200)
committerRichard Levitte <levitte@openssl.org>
Mon, 24 Apr 2017 16:09:01 +0000 (18:09 +0200)
Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/3243)

test/bioprinttest.c
test/testutil.h

index 418d6e4..56aa0b0 100644 (file)
@@ -7,8 +7,16 @@
  * https://www.openssl.org/source/license.html
  */
 
+#define TESTUTIL_NO_size_t_COMPARISON
+
 #include <stdio.h>
 #include <string.h>
+#include <openssl/e_os2.h>
+#ifdef OPENSSL_SYS_WINDOWS
+# include <winsock.h>
+#else
+# include OPENSSL_UNISTD
+#endif
 #include <openssl/bio.h>
 #include "internal/numbers.h"
 #include "testutil.h"
@@ -245,3 +253,55 @@ int test_main(int argc, char **argv)
 
     return run_tests(argv[0]);
 }
+
+/*
+ * Replace testutil output routines.  We do this to eliminate possible sources
+ * of BIO error
+ */
+void test_open_streams(void)
+{
+}
+
+void test_close_streams(void)
+{
+}
+
+int test_puts_stdout(const char *str)
+{
+    return write(1, str, strlen(str));
+}
+
+int test_puts_stderr(const char *str)
+{
+    return write(2, str, strlen(str));
+}
+
+static char vprint_buf[10240];
+
+int test_vprintf_stdout(const char *fmt, va_list ap)
+{
+    size_t len = vsnprintf(vprint_buf, sizeof(vprint_buf), fmt, ap);
+
+    if (len >= sizeof(vprint_buf))
+        return -1;
+    return test_puts_stdout(vprint_buf);
+}
+
+int test_vprintf_stderr(const char *fmt, va_list ap)
+{
+    size_t len = vsnprintf(vprint_buf, sizeof(vprint_buf), fmt, ap);
+
+    if (len >= sizeof(vprint_buf))
+        return -1;
+    return test_puts_stderr(vprint_buf);
+}
+
+int test_flush_stdout(void)
+{
+    return 0;
+}
+
+int test_flush_stderr(void)
+{
+    return 0;
+}
index d266fd5..5d96ddd 100644 (file)
@@ -176,7 +176,13 @@ DECLARE_COMPARISONS(char, char)
 DECLARE_COMPARISONS(unsigned char, uchar)
 DECLARE_COMPARISONS(long, long)
 DECLARE_COMPARISONS(unsigned long, ulong)
+/*
+ * Because this comparison uses a printf format specifier that's not
+ * universally known (yet), we provide an option to not have it declared.
+ */
+# ifndef TESTUTIL_NO_size_t_COMPARISON
 DECLARE_COMPARISONS(size_t, size_t)
+# endif
 
 /*
  * Pointer comparisons against other pointers and null.