summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/bio
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/bio')
-rw-r--r--src/lib/libcrypto/bio/b_print.c59
-rw-r--r--src/lib/libcrypto/bio/bio.h18
-rw-r--r--src/lib/libcrypto/bio/bio_local.h6
3 files changed, 11 insertions, 72 deletions
diff --git a/src/lib/libcrypto/bio/b_print.c b/src/lib/libcrypto/bio/b_print.c
index a750ac413f..f6943ea3f3 100644
--- a/src/lib/libcrypto/bio/b_print.c
+++ b/src/lib/libcrypto/bio/b_print.c
@@ -1,21 +1,10 @@
1/* $OpenBSD: b_print.c,v 1.27 2023/07/05 21:23:37 beck Exp $ */ 1/* $OpenBSD: b_print.c,v 1.28 2024/03/02 09:18:28 tb Exp $ */
2 2
3/* Theo de Raadt places this file in the public domain. */ 3/* Theo de Raadt places this file in the public domain. */
4 4
5#include <openssl/bio.h> 5#include <openssl/bio.h>
6 6
7int 7#include "bio_local.h"
8BIO_printf(BIO *bio, const char *format, ...)
9{
10 va_list args;
11 int ret;
12
13 va_start(args, format);
14 ret = BIO_vprintf(bio, format, args);
15 va_end(args);
16 return (ret);
17}
18LCRYPTO_ALIAS(BIO_printf);
19 8
20#ifdef HAVE_FUNOPEN 9#ifdef HAVE_FUNOPEN
21static int 10static int
@@ -40,7 +29,6 @@ BIO_vprintf(BIO *bio, const char *format, va_list args)
40fail: 29fail:
41 return (ret); 30 return (ret);
42} 31}
43LCRYPTO_ALIAS(BIO_vprintf);
44 32
45#else /* !HAVE_FUNOPEN */ 33#else /* !HAVE_FUNOPEN */
46 34
@@ -57,55 +45,18 @@ BIO_vprintf(BIO *bio, const char *format, va_list args)
57 free(buf); 45 free(buf);
58 return (ret); 46 return (ret);
59} 47}
60LCRYPTO_ALIAS(BIO_vprintf);
61 48
62#endif /* HAVE_FUNOPEN */ 49#endif /* HAVE_FUNOPEN */
63 50
64/*
65 * BIO_snprintf and BIO_vsnprintf return -1 for overflow,
66 * due to the history of this API. Justification:
67 *
68 * Traditional snprintf surfaced in 4.4BSD, and returned
69 * "number of bytes wanted". Solaris and Windows opted to
70 * return -1. A draft standard was written which returned -1.
71 * Due to the large volume of code already using the first
72 * semantics, the draft was repaired before standardization to
73 * specify "number of bytes wanted" plus "-1 for character conversion
74 * style errors". Solaris adapted to this rule, but Windows stuck
75 * with -1.
76 *
77 * Original OpenSSL comment which is full of lies:
78 *
79 * "In case of truncation, return -1 like traditional snprintf.
80 * (Current drafts for ISO/IEC 9899 say snprintf should return
81 * the number of characters that would have been written,
82 * had the buffer been large enough.)"
83 */
84int 51int
85BIO_snprintf(char *buf, size_t n, const char *format, ...) 52BIO_printf(BIO *bio, const char *format, ...)
86{ 53{
87 va_list args; 54 va_list args;
88 int ret; 55 int ret;
89 56
90 va_start(args, format); 57 va_start(args, format);
91 ret = vsnprintf(buf, n, format, args); 58 ret = BIO_vprintf(bio, format, args);
92 va_end(args); 59 va_end(args);
93
94 if (ret >= n || ret == -1)
95 return (-1);
96 return (ret);
97}
98LCRYPTO_ALIAS(BIO_snprintf);
99
100int
101BIO_vsnprintf(char *buf, size_t n, const char *format, va_list args)
102{
103 int ret;
104
105 ret = vsnprintf(buf, n, format, args);
106
107 if (ret >= n || ret == -1)
108 return (-1);
109 return (ret); 60 return (ret);
110} 61}
111LCRYPTO_ALIAS(BIO_vsnprintf); 62LCRYPTO_ALIAS(BIO_printf);
diff --git a/src/lib/libcrypto/bio/bio.h b/src/lib/libcrypto/bio/bio.h
index b955524c45..10b0924f73 100644
--- a/src/lib/libcrypto/bio/bio.h
+++ b/src/lib/libcrypto/bio/bio.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: bio.h,v 1.60 2023/08/25 12:37:33 schwarze Exp $ */ 1/* $OpenBSD: bio.h,v 1.61 2024/03/02 09:18:28 tb Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -648,25 +648,9 @@ void BIO_copy_next_retry(BIO *b);
648#ifndef __MINGW_PRINTF_FORMAT 648#ifndef __MINGW_PRINTF_FORMAT
649int BIO_printf(BIO *bio, const char *format, ...) 649int BIO_printf(BIO *bio, const char *format, ...)
650 __attribute__((__format__(__printf__, 2, 3), __nonnull__(2))); 650 __attribute__((__format__(__printf__, 2, 3), __nonnull__(2)));
651int BIO_vprintf(BIO *bio, const char *format, va_list args)
652 __attribute__((__format__(__printf__, 2, 0), __nonnull__(2)));
653int BIO_snprintf(char *buf, size_t n, const char *format, ...)
654 __attribute__((__deprecated__, __format__(__printf__, 3, 4),
655 __nonnull__(3)));
656int BIO_vsnprintf(char *buf, size_t n, const char *format, va_list args)
657 __attribute__((__deprecated__, __format__(__printf__, 3, 0),
658 __nonnull__(3)));
659#else 651#else
660int BIO_printf(BIO *bio, const char *format, ...) 652int BIO_printf(BIO *bio, const char *format, ...)
661 __attribute__((__format__(__MINGW_PRINTF_FORMAT, 2, 3), __nonnull__(2))); 653 __attribute__((__format__(__MINGW_PRINTF_FORMAT, 2, 3), __nonnull__(2)));
662int BIO_vprintf(BIO *bio, const char *format, va_list args)
663 __attribute__((__format__(__MINGW_PRINTF_FORMAT, 2, 0), __nonnull__(2)));
664int BIO_snprintf(char *buf, size_t n, const char *format, ...)
665 __attribute__((__deprecated__, __format__(__MINGW_PRINTF_FORMAT, 3, 4),
666 __nonnull__(3)));
667int BIO_vsnprintf(char *buf, size_t n, const char *format, va_list args)
668 __attribute__((__deprecated__, __format__(__MINGW_PRINTF_FORMAT, 3, 0),
669 __nonnull__(3)));
670#endif 654#endif
671 655
672void ERR_load_BIO_strings(void); 656void ERR_load_BIO_strings(void);
diff --git a/src/lib/libcrypto/bio/bio_local.h b/src/lib/libcrypto/bio/bio_local.h
index 4eecf7e04a..f59b5756c9 100644
--- a/src/lib/libcrypto/bio/bio_local.h
+++ b/src/lib/libcrypto/bio/bio_local.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: bio_local.h,v 1.5 2022/12/02 19:44:04 tb Exp $ */ 1/* $OpenBSD: bio_local.h,v 1.6 2024/03/02 09:18:28 tb Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -59,6 +59,8 @@
59#ifndef HEADER_BIO_LOCAL_H 59#ifndef HEADER_BIO_LOCAL_H
60#define HEADER_BIO_LOCAL_H 60#define HEADER_BIO_LOCAL_H
61 61
62#include <stdarg.h>
63
62__BEGIN_HIDDEN_DECLS 64__BEGIN_HIDDEN_DECLS
63 65
64struct bio_method_st { 66struct bio_method_st {
@@ -118,6 +120,8 @@ typedef struct bio_f_buffer_ctx_struct {
118 int obuf_off; /* write/read offset */ 120 int obuf_off; /* write/read offset */
119} BIO_F_BUFFER_CTX; 121} BIO_F_BUFFER_CTX;
120 122
123int BIO_vprintf(BIO *bio, const char *format, va_list args);
124
121__END_HIDDEN_DECLS 125__END_HIDDEN_DECLS
122 126
123#endif /* !HEADER_BIO_LOCAL_H */ 127#endif /* !HEADER_BIO_LOCAL_H */