Compare commits
25 Commits
OpenSSL_0_
...
OpenSSL_0_
Author | SHA1 | Date | |
---|---|---|---|
![]() |
74743418dc | ||
![]() |
c2ef67100c | ||
![]() |
35c8d0d85f | ||
![]() |
2cdafc51f0 | ||
![]() |
e979e4715f | ||
![]() |
2c02faeecd | ||
![]() |
a8731c0cb8 | ||
![]() |
31172717e8 | ||
![]() |
cc21b51add | ||
![]() |
89133ba26a | ||
![]() |
1d587fdd1e | ||
![]() |
68d53e4f30 | ||
![]() |
ba6d3a6299 | ||
![]() |
5e7d583bab | ||
![]() |
27bc0555aa | ||
![]() |
1cbe0ff569 | ||
![]() |
0d6ebdf486 | ||
![]() |
92d0e6aa94 | ||
![]() |
1333891830 | ||
![]() |
ab69c5a379 | ||
![]() |
a95168889f | ||
![]() |
1ac4693c38 | ||
![]() |
0ede4e2e46 | ||
![]() |
9b914c7f91 | ||
![]() |
2c9dfa18aa |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -7,6 +7,7 @@
|
||||
.#*
|
||||
#*#
|
||||
*~
|
||||
/.dir-locals.el
|
||||
|
||||
# Top level excludes
|
||||
/Makefile.bak
|
||||
|
44
.travis.yml
Normal file
44
.travis.yml
Normal file
@@ -0,0 +1,44 @@
|
||||
language: c
|
||||
|
||||
addons:
|
||||
apt_packages:
|
||||
- binutils-mingw-w64
|
||||
- gcc-mingw-w64
|
||||
|
||||
os:
|
||||
- linux
|
||||
- osx
|
||||
|
||||
compiler:
|
||||
- clang
|
||||
- gcc
|
||||
- i686-w64-mingw32-gcc
|
||||
|
||||
env:
|
||||
- CONFIG_OPTS=""
|
||||
- CONFIG_OPTS="shared"
|
||||
- CONFIG_OPTS="-d"
|
||||
|
||||
matrix:
|
||||
exclude:
|
||||
- os: osx
|
||||
compiler: i686-w64-mingw32-gcc
|
||||
|
||||
before_script:
|
||||
- if [ "$CC" == i686-w64-mingw32-gcc ]; then
|
||||
export CROSS_COMPILE=${CC%%gcc}; unset CC;
|
||||
./Configure mingw $CONFIG_OPTS;
|
||||
else
|
||||
./config $CONFIG_OPTS;
|
||||
fi
|
||||
|
||||
script:
|
||||
- make
|
||||
- if [ -z "$CROSS_COMPILE" ]; then make test; fi
|
||||
|
||||
notifications:
|
||||
recipient:
|
||||
- openssl-commits@openssl.org
|
||||
email:
|
||||
on_success: change
|
||||
on_failure: always
|
18
CHANGES
18
CHANGES
@@ -2,6 +2,24 @@
|
||||
OpenSSL CHANGES
|
||||
_______________
|
||||
|
||||
Changes between 0.9.8zh and 0.9.8zi [xx XXX xxxx]
|
||||
|
||||
*)
|
||||
|
||||
Changes between 0.9.8zg and 0.9.8zh [3 Dec 2015]
|
||||
|
||||
*) X509_ATTRIBUTE memory leak
|
||||
|
||||
When presented with a malformed X509_ATTRIBUTE structure OpenSSL will leak
|
||||
memory. This structure is used by the PKCS#7 and CMS routines so any
|
||||
application which reads PKCS#7 or CMS data from untrusted sources is
|
||||
affected. SSL/TLS is not affected.
|
||||
|
||||
This issue was reported to OpenSSL by Adam Langley (Google/BoringSSL) using
|
||||
libFuzzer.
|
||||
(CVE-2015-3195)
|
||||
[Stephen Henson]
|
||||
|
||||
Changes between 0.9.8zf and 0.9.8zg [11 Jun 2015]
|
||||
|
||||
*) Malformed ECParameters causes infinite loop
|
||||
|
31
Makefile.org
31
Makefile.org
@@ -585,25 +585,28 @@ update: errors stacks util/libeay.num util/ssleay.num crypto/objects/obj_dat.h a
|
||||
# would occur. Therefore the list of files is temporarily stored into a file
|
||||
# and read directly, requiring GNU-Tar. Call "make TAR=gtar dist" if the normal
|
||||
# tar does not support the --files-from option.
|
||||
tar:
|
||||
TAR_COMMAND=$(TAR) $(TARFLAGS) --files-from ../$(TARFILE).list \
|
||||
--owner openssl:0 --group openssl:0 \
|
||||
--transform 's|^|openssl-$(VERSION)/|' \
|
||||
-cvf -
|
||||
|
||||
../$(TARFILE).list:
|
||||
find * \! -name STATUS \! -name TABLE \! -name '*.o' \! -name '*.a' \
|
||||
\! -name '*.so' \! -name '*.so.*' \! -name 'openssl' \
|
||||
\! -name '*test' \! -name '.#*' \! -name '*~' \
|
||||
| sort > ../$(TARFILE).list
|
||||
|
||||
tar: ../$(TARFILE).list
|
||||
find . -type d -print | xargs chmod 755
|
||||
find . -type f -print | xargs chmod a+r
|
||||
find . -type f -perm -0100 -print | xargs chmod a+x
|
||||
find * \! -path CVS/\* \! -path \*/CVS/\* \! -name CVS \! -name .cvsignore \! -name STATUS \! -name TABLE | sort > ../$(TARFILE).list; \
|
||||
$(TAR) $(TARFLAGS) --files-from ../$(TARFILE).list -cvf - | \
|
||||
tardy --user_number=0 --user_name=openssl \
|
||||
--group_number=0 --group_name=openssl \
|
||||
--prefix=openssl-$(VERSION) - |\
|
||||
gzip --best >../$(TARFILE).gz; \
|
||||
rm -f ../$(TARFILE).list; \
|
||||
$(TAR_COMMAND) | gzip --best >../$(TARFILE).gz
|
||||
rm -f ../$(TARFILE).list
|
||||
ls -l ../$(TARFILE).gz
|
||||
|
||||
tar-snap:
|
||||
@$(TAR) $(TARFLAGS) -cvf - \
|
||||
`find * \! -path CVS/\* \! -path \*/CVS/\* \! -name CVS \! -name .cvsignore \! -name STATUS \! -name TABLE \! -name '*.o' \! -name '*.a' \! -name '*.so' \! -name '*.so.*' \! -name 'openssl' \! -name '*test' \! -name '.#*' \! -name '*~' | sort` |\
|
||||
tardy --user_number=0 --user_name=openssl \
|
||||
--group_number=0 --group_name=openssl \
|
||||
--prefix=openssl-$(VERSION) - > ../$(TARFILE);\
|
||||
tar-snap: ../$(TARFILE).list
|
||||
$(TAR_COMMAND) > ../$(TARFILE)
|
||||
rm -f ../$(TARFILE).list
|
||||
ls -l ../$(TARFILE)
|
||||
|
||||
dist:
|
||||
|
8
NEWS
8
NEWS
@@ -5,6 +5,14 @@
|
||||
This file gives a brief overview of the major changes between each OpenSSL
|
||||
release. For more details please read the CHANGES file.
|
||||
|
||||
Major changes between OpenSSL 0.9.8zh and OpenSSL 0.9.8zi [under development]
|
||||
|
||||
o
|
||||
|
||||
Major changes between OpenSSL 0.9.8zg and OpenSSL 0.9.8zh [3 Dec 2015]
|
||||
|
||||
o X509_ATTRIBUTE memory leak (CVE-2015-3195)
|
||||
|
||||
Major changes between OpenSSL 0.9.8zf and OpenSSL 0.9.8zg [11 Jun 2015]
|
||||
|
||||
o Malformed ECParameters causes infinite loop (CVE-2015-1788)
|
||||
|
34
README
34
README
@@ -1,5 +1,5 @@
|
||||
|
||||
OpenSSL 0.9.8zg 11 Jun 2015
|
||||
OpenSSL 0.9.8zi-dev
|
||||
|
||||
Copyright (c) 1998-2011 The OpenSSL Project
|
||||
Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson
|
||||
@@ -164,16 +164,23 @@
|
||||
Report the bug to the OpenSSL project via the Request Tracker
|
||||
(http://www.openssl.org/support/rt.html) by mail to:
|
||||
|
||||
openssl-bugs@openssl.org
|
||||
rt@openssl.org
|
||||
|
||||
Note that the request tracker should NOT be used for general assistance
|
||||
or support queries. Just because something doesn't work the way you expect
|
||||
does not mean it is necessarily a bug in OpenSSL.
|
||||
In order to avoid spam, this is a moderated mailing list, and it might
|
||||
take a day for the ticket to show up. (We also scan posts to make sure
|
||||
that security disclosures aren't publically posted by mistake.) Mail to
|
||||
this address is recorded in the public RT (request tracker) database (see
|
||||
https://www.openssl.org/support/rt.html for details) and also forwarded
|
||||
the public openssl-dev mailing list. Confidential mail may be sent to
|
||||
openssl-security@openssl.org (PGP key available from the key servers).
|
||||
|
||||
Note that mail to openssl-bugs@openssl.org is recorded in the publicly
|
||||
readable request tracker database and is forwarded to a public
|
||||
mailing list. Confidential mail may be sent to openssl-security@openssl.org
|
||||
(PGP key available from the key servers).
|
||||
Please do NOT use this for general assistance or support queries.
|
||||
Just because something doesn't work the way you expect does not mean it
|
||||
is necessarily a bug in OpenSSL.
|
||||
|
||||
You can also make GitHub pull requests. If you do this, please also send
|
||||
mail to rt@openssl.org with a link to the PR so that we can more easily
|
||||
keep track of it.
|
||||
|
||||
HOW TO CONTRIBUTE TO OpenSSL
|
||||
----------------------------
|
||||
@@ -190,11 +197,10 @@
|
||||
reason as to why that feature isn't implemented.
|
||||
|
||||
Patches should be as up to date as possible, preferably relative to the
|
||||
current Git or the last snapshot. They should follow the coding style of
|
||||
OpenSSL and compile without warnings. Some of the core team developer targets
|
||||
can be used for testing purposes, (debug-steve64, debug-geoff etc). OpenSSL
|
||||
compiles on many varied platforms: try to ensure you only use portable
|
||||
features.
|
||||
current Git or the last snapshot. They should follow our coding style
|
||||
(see http://openssl.org/about/codingstyle.txt) and compile without
|
||||
warnings using the --strict-warnings flag. OpenSSL compiles on many
|
||||
varied platforms: try to ensure you only use portable features.
|
||||
|
||||
Note: For legal reasons, contributions from the US can be accepted only
|
||||
if a TSU notification and a copy of the patch are sent to crypt@bis.doc.gov
|
||||
|
@@ -313,9 +313,9 @@ int MAIN(int argc, char **argv)
|
||||
}
|
||||
typ = ASN1_TYPE_get(at);
|
||||
if ((typ == V_ASN1_OBJECT)
|
||||
|| (typ == V_ASN1_BOOLEAN)
|
||||
|| (typ == V_ASN1_NULL)) {
|
||||
BIO_printf(bio_err, "Can't parse %s type\n",
|
||||
typ == V_ASN1_NULL ? "NULL" : "OBJECT");
|
||||
BIO_printf(bio_err, "Can't parse %s type\n", ASN1_tag2str(typ));
|
||||
ERR_print_errors(bio_err);
|
||||
goto end;
|
||||
}
|
||||
|
@@ -62,6 +62,10 @@
|
||||
#include <openssl/objects.h>
|
||||
#include <openssl/asn1.h>
|
||||
|
||||
#ifndef ASN1_PARSE_MAXDEPTH
|
||||
#define ASN1_PARSE_MAXDEPTH 128
|
||||
#endif
|
||||
|
||||
static int asn1_print_info(BIO *bp, int tag, int xclass, int constructed,
|
||||
int indent);
|
||||
static int asn1_parse2(BIO *bp, const unsigned char **pp, long length,
|
||||
@@ -134,6 +138,12 @@ static int asn1_parse2(BIO *bp, const unsigned char **pp, long length,
|
||||
#else
|
||||
dump_indent = 6; /* Because we know BIO_dump_indent() */
|
||||
#endif
|
||||
|
||||
if (depth > ASN1_PARSE_MAXDEPTH) {
|
||||
BIO_puts(bp, "BAD RECURSION DEPTH\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
p = *pp;
|
||||
tot = p + length;
|
||||
op = p - 1;
|
||||
|
@@ -178,6 +178,8 @@ int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len,
|
||||
int otag;
|
||||
int ret = 0;
|
||||
ASN1_VALUE **pchptr, *ptmpval;
|
||||
int combine = aclass & ASN1_TFLG_COMBINE;
|
||||
aclass &= ~ASN1_TFLG_COMBINE;
|
||||
if (!pval)
|
||||
return 0;
|
||||
if (aux && aux->asn1_cb)
|
||||
@@ -498,7 +500,8 @@ int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len,
|
||||
auxerr:
|
||||
ASN1err(ASN1_F_ASN1_ITEM_EX_D2I, ASN1_R_AUX_ERROR);
|
||||
err:
|
||||
ASN1_item_ex_free(pval, it);
|
||||
if (combine == 0)
|
||||
ASN1_item_ex_free(pval, it);
|
||||
if (errtt)
|
||||
ERR_add_error_data(4, "Field=", errtt->field_name,
|
||||
", Type=", it->sname);
|
||||
@@ -687,7 +690,7 @@ static int asn1_template_noexp_d2i(ASN1_VALUE **val,
|
||||
} else {
|
||||
/* Nothing special */
|
||||
ret = ASN1_item_ex_d2i(val, &p, len, ASN1_ITEM_ptr(tt->item),
|
||||
-1, 0, opt, ctx);
|
||||
-1, tt->flags & ASN1_TFLG_COMBINE, opt, ctx);
|
||||
if (!ret) {
|
||||
ASN1err(ASN1_F_ASN1_TEMPLATE_NOEXP_D2I, ERR_R_NESTED_ASN1_ERROR);
|
||||
goto err;
|
||||
|
@@ -196,7 +196,7 @@ static int des_ede_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
|
||||
DES_cblock *deskey = (DES_cblock *)key;
|
||||
# ifdef EVP_CHECK_DES_KEY
|
||||
if (DES_set_key_checked(&deskey[0], &data(ctx)->ks1)
|
||||
! !DES_set_key_checked(&deskey[1], &data(ctx)->ks2))
|
||||
|| DES_set_key_checked(&deskey[1], &data(ctx)->ks2))
|
||||
return 0;
|
||||
# else
|
||||
DES_set_key_unchecked(&deskey[0], &data(ctx)->ks1);
|
||||
|
@@ -66,6 +66,10 @@ void OPENSSL_cleanse(void *ptr, size_t len)
|
||||
{
|
||||
unsigned char *p = ptr;
|
||||
size_t loop = len, ctr = cleanse_ctr;
|
||||
|
||||
if (ptr == NULL)
|
||||
return;
|
||||
|
||||
while (loop--) {
|
||||
*(p++) = (unsigned char)ctr;
|
||||
ctr += (17 + ((size_t)p & 0xF));
|
||||
|
@@ -26,11 +26,11 @@
|
||||
* (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for
|
||||
* major minor fix final patch/beta)
|
||||
*/
|
||||
# define OPENSSL_VERSION_NUMBER 0x0090820fL
|
||||
# define OPENSSL_VERSION_NUMBER 0x00908220L
|
||||
# ifdef OPENSSL_FIPS
|
||||
# define OPENSSL_VERSION_TEXT "OpenSSL 0.9.8zg-fips 11 Jun 2015"
|
||||
# define OPENSSL_VERSION_TEXT "OpenSSL 0.9.8zi-fips-dev xx XXX xxxx"
|
||||
# else
|
||||
# define OPENSSL_VERSION_TEXT "OpenSSL 0.9.8zg 11 Jun 2015"
|
||||
# define OPENSSL_VERSION_TEXT "OpenSSL 0.9.8zi-dev xx XXX xxxx"
|
||||
# endif
|
||||
# define OPENSSL_VERSION_PTEXT " part of " OPENSSL_VERSION_TEXT
|
||||
|
||||
|
@@ -29,6 +29,7 @@ and issuer names.
|
||||
X509_NAME_get_index_by_NID() and X509_NAME_get_index_by_OBJ() retrieve
|
||||
the next index matching B<nid> or B<obj> after B<lastpos>. B<lastpos>
|
||||
should initially be set to -1. If there are no more entries -1 is returned.
|
||||
If B<nid> is invalid (doesn't correspond to a valid OID) then -2 is returned.
|
||||
|
||||
X509_NAME_entry_count() returns the total number of entries in B<name>.
|
||||
|
||||
@@ -59,6 +60,10 @@ X509_NAME_get_index_by_OBJ() should be used followed by
|
||||
X509_NAME_get_entry() on any matching indices and then the
|
||||
various B<X509_NAME_ENTRY> utility functions on the result.
|
||||
|
||||
Applications which could pass invalid NIDs to X509_NAME_get_index_by_NID()
|
||||
should check for the return value of -2. Alternatively the NID validity
|
||||
can be determined first by checking OBJ_nid2obj(nid) is not NULL.
|
||||
|
||||
=head1 EXAMPLES
|
||||
|
||||
Process all entries:
|
||||
@@ -91,6 +96,8 @@ Process all commonName entries:
|
||||
|
||||
X509_NAME_get_index_by_NID() and X509_NAME_get_index_by_OBJ()
|
||||
return the index of the next matching entry or -1 if not found.
|
||||
X509_NAME_get_index_by_NID() can also return -2 if the supplied
|
||||
NID is invalid.
|
||||
|
||||
X509_NAME_entry_count() returns the total number of entries.
|
||||
|
||||
|
15
doc/dir-locals.example.el
Normal file
15
doc/dir-locals.example.el
Normal file
@@ -0,0 +1,15 @@
|
||||
;;; This is an example of what a .dir-locals.el suitable for OpenSSL
|
||||
;;; development could look like.
|
||||
;;;
|
||||
;;; Apart from setting the CC mode style to "OpenSSL-II", it also
|
||||
;;; makes sure that tabs are never used for indentation in any file,
|
||||
;;; and that the fill column is 78.
|
||||
;;;
|
||||
;;; For more information see (info "(emacs) Directory Variables")
|
||||
|
||||
((nil
|
||||
(indent-tabs-mode . nil)
|
||||
(fill-column . 78)
|
||||
)
|
||||
(c-mode
|
||||
(c-file-style . "OpenSSL-II")))
|
62
doc/openssl-c-indent.el
Normal file
62
doc/openssl-c-indent.el
Normal file
@@ -0,0 +1,62 @@
|
||||
;;; This Emacs Lisp file defines a C indentation style for OpenSSL.
|
||||
;;;
|
||||
;;; This definition is for the "CC mode" package, which is the default
|
||||
;;; mode for editing C source files in Emacs 20, not for the older
|
||||
;;; c-mode.el (which was the default in less recent releaes of Emacs 19).
|
||||
;;;
|
||||
;;; Recommended use is to add this line in your .emacs:
|
||||
;;;
|
||||
;;; (load (expand-file-name "~/PATH/TO/openssl-c-indent.el"))
|
||||
;;;
|
||||
;;; To activate this indentation style, visit a C file, type
|
||||
;;; M-x c-set-style <RET> (or C-c . for short), and enter "eay".
|
||||
;;; To toggle the auto-newline feature of CC mode, type C-c C-a.
|
||||
;;;
|
||||
;;; If you're a OpenSSL developer, you might find it more comfortable
|
||||
;;; to have this style be permanent in your OpenSSL development
|
||||
;;; directory. To have that, please perform this:
|
||||
;;;
|
||||
;;; M-x add-dir-local-variable <RET> c-mode <RET> c-file-style <RET>
|
||||
;;; "OpenSSL-II" <RET>
|
||||
;;;
|
||||
;;; A new buffer with .dir-locals.el will appear. Save it (C-x C-s).
|
||||
;;;
|
||||
;;; Alternatively, have a look at dir-locals.example.el
|
||||
|
||||
;;; For suggesting improvements, please send e-mail to levitte@openssl.org.
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; Note, it could be easy to inherit from the "gnu" style... however,
|
||||
;; one never knows if that style will change somewhere in the future,
|
||||
;; so I've chosen to copy the "gnu" style values explicitely instead
|
||||
;; and mark them with a comment. // RLevitte 2015-08-31
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
(c-add-style "OpenSSL-II"
|
||||
'((c-basic-offset . 4)
|
||||
(indent-tabs-mode . nil)
|
||||
(fill-column . 78)
|
||||
(comment-column . 33)
|
||||
(c-comment-only-line-offset 0 . 0) ; From "gnu" style
|
||||
(c-hanging-braces-alist ; From "gnu" style
|
||||
(substatement-open before after) ; From "gnu" style
|
||||
(arglist-cont-nonempty)) ; From "gnu" style
|
||||
(c-offsets-alist
|
||||
(statement-block-intro . +) ; From "gnu" style
|
||||
(knr-argdecl-intro . 0)
|
||||
(knr-argdecl . 0)
|
||||
(substatement-open . +) ; From "gnu" style
|
||||
(substatement-label . 0) ; From "gnu" style
|
||||
(label . 1)
|
||||
(statement-case-open . +) ; From "gnu" style
|
||||
(statement-cont . +) ; From "gnu" style
|
||||
(arglist-intro . c-lineup-arglist-intro-after-paren) ; From "gnu" style
|
||||
(arglist-close . c-lineup-arglist) ; From "gnu" style
|
||||
(inline-open . 0) ; From "gnu" style
|
||||
(brace-list-open . +) ; From "gnu" style
|
||||
(topmost-intro-cont first c-lineup-topmost-intro-cont
|
||||
c-lineup-gnu-DEFUN-intro-cont) ; From "gnu" style
|
||||
)
|
||||
(c-special-indent-hook . c-gnu-impose-minimum) ; From "gnu" style
|
||||
(c-block-comment-prefix . "* ")
|
||||
))
|
@@ -6,7 +6,7 @@ Release: 1
|
||||
|
||||
Summary: Secure Sockets Layer and cryptography libraries and tools
|
||||
Name: openssl
|
||||
Version: 0.9.8zg
|
||||
Version: 0.9.8zi
|
||||
Source0: ftp://ftp.openssl.org/source/%{name}-%{version}.tar.gz
|
||||
License: OpenSSL
|
||||
Group: System Environment/Libraries
|
||||
|
@@ -156,8 +156,8 @@ SSL_SESSION *ssl_session_dup(SSL_SESSION *src, int ticket)
|
||||
dest->ciphers = NULL;
|
||||
#ifndef OPENSSL_NO_TLSEXT
|
||||
dest->tlsext_hostname = NULL;
|
||||
#endif
|
||||
dest->tlsext_tick = NULL;
|
||||
#endif
|
||||
memset(&dest->ex_data, 0, sizeof(dest->ex_data));
|
||||
|
||||
/* We deliberately don't copy the prev and next pointers */
|
||||
@@ -190,7 +190,6 @@ SSL_SESSION *ssl_session_dup(SSL_SESSION *src, int ticket)
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (ticket != 0) {
|
||||
dest->tlsext_tick = BUF_memdup(src->tlsext_tick, src->tlsext_ticklen);
|
||||
@@ -200,6 +199,7 @@ SSL_SESSION *ssl_session_dup(SSL_SESSION *src, int ticket)
|
||||
dest->tlsext_tick_lifetime_hint = 0;
|
||||
dest->tlsext_ticklen = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
return dest;
|
||||
err:
|
||||
|
@@ -116,6 +116,7 @@
|
||||
|
||||
/* Or gethostname won't be declared properly on Linux and GNU platforms. */
|
||||
#define _BSD_SOURCE 1
|
||||
#define _DEFAULT_SOURCE 1
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
|
Reference in New Issue
Block a user