Skip to content

Commit e99289b

Browse files
committedJan 5, 2019
relicense
2 parents a2dae40 + d33207c commit e99289b

File tree

8 files changed

+58
-19
lines changed

8 files changed

+58
-19
lines changed
 

‎LICENSE

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Copyright (c) 2012 Lyon Bros. Enterprises, LLC
1+
Copyright (c) 2012 Lyon Bros LLC
22

33
Permission is hereby granted, free of charge, to any person obtaining a copy
44
of this software and associated documentation files (the "Software"), to deal

‎src/async-stream.lisp

+4-5
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@
6969
(defmethod stream-write-byte ((stream async-output-stream) byte)
7070
"Write one byte to the underlying streamish."
7171
(stream-write-sequence stream (make-array 1 :element-type 'octet
72-
:initial-element byte) 0 1))
72+
:initial-element byte) 0 1))
7373

7474
(defmethod send-buffered-data ((stream async-output-stream))
7575
"Take data we've buffered between initial sending and actual streamish
@@ -98,11 +98,10 @@
9898
(defmethod stream-read-sequence ((stream async-input-stream) sequence start end &key)
9999
"Attempt to read a sequence of bytes from the underlying streamish."
100100
(let* ((buffer (buffer-output (stream-buffer stream)))
101-
(numbytes (min (length buffer) (- end start)))
102-
(bytes (subseq buffer start (min (length buffer) numbytes))))
101+
(numbytes (min (length buffer) (- end start))))
103102
(setf (stream-buffer stream) (make-buffer (subseq buffer numbytes)))
104-
(replace sequence bytes)
105-
(length bytes)))
103+
(replace sequence buffer :start1 start :end1 end)
104+
numbytes))
106105

107106
;;;; compatibility
108107

‎src/dns.lisp

+3-1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
;; error, signal
2626
(run-event-cb 'event-handler status event-cb))
2727
(uv:free-req req)
28+
(free-pointer-data req :preserve-pointer t)
2829
(uv:uv-freeaddrinfo addrinfo))))
2930

3031
(defun dns-lookup (host resolve-cb &key event-cb (family +af-inet+))
@@ -58,7 +59,8 @@
5859
(if (zerop status)
5960
(funcall resolve-cb hostname service)
6061
(run-event-cb 'event-handler status event-cb))
61-
(uv:free-req req))))
62+
(uv:free-req req)
63+
(free-pointer-data req :preserve-pointer t))))
6264

6365
(defun reverse-dns-lookup (ip resolve-cb &key event-cb)
6466
"Perform reverse DNS lookup on IP specifier as string. Call RESOLVE-CB with

‎src/socket.lisp

+4
Original file line numberDiff line numberDiff line change
@@ -240,10 +240,14 @@
240240
(progn
241241
(attach-data-to-pointer uvstream (list :streamish socket :stream stream))
242242
(save-callbacks uvstream (list :read-cb read-cb :event-cb event-cb))
243+
<<<<<<< HEAD
243244
;; TODO: uv_tcp_getpeername
244245
;(case (uv:handle-type socket)
245246
; (:tcp t))
246247
(when connect-cb (funcall connect-cb socket))
248+
=======
249+
(when connect-cb (funcall connect-cb (or stream socket)))
250+
>>>>>>> d33207c6f2ef698547e862e0c258b7453834080b
247251
(uv:uv-read-start uvstream
248252
(cffi:callback streamish-alloc-cb)
249253
(cffi:callback streamish-read-cb)))

‎src/ssl/package.lisp

+5-7
Original file line numberDiff line numberDiff line change
@@ -51,20 +51,18 @@
5151
;; NOTE: the loading code is verbatim from cl+ssl
5252

5353
(eval-when (:compile-toplevel :load-toplevel)
54-
;; OpenBSD needs to load libcrypto before libssl
55-
#+openbsd
54+
#+(or openbsd linux)
5655
(progn
5756
(cffi:define-foreign-library libcrypto
58-
(:openbsd (:or "libcrypto.so.20.1"
59-
"libcrypto.so.19.0"
60-
"libcrypto.so.18.0")))
57+
(:openbsd "libcrypto.so")
58+
(:linux (:or "libcrypto.so.1.1"
59+
"libcrypto.so.1.0.2")))
6160
(cffi:use-foreign-library libcrypto))
6261

6362
(cffi:define-foreign-library libssl
6463
(:windows "libssl32.dll")
6564
(:darwin "libssl.dylib")
66-
(:openbsd (:or "libssl.so.18.0" "libssl.so.17.1"
67-
"libssl.so.16.0" "libssl.so.15.1"))
65+
(:openbsd "libssl.so")
6866
(:solaris (:or "/lib/64/libssl.so"
6967
"libssl.so.0.9.8" "libssl.so" "libssl.so.4"))
7068
(:unix (:or "libssl.so.1.0.0" "libssl.so.0.9.8" "libssl.so" "libssl.so.4"))

‎src/ssl/tcp.lisp

+9-5
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,12 @@
2929

3030
(defun ensure-init (&key from-load)
3131
(unless *ssl-init*
32-
(cffi:foreign-funcall ("SSL_library_init") :void)
33-
(cffi:foreign-funcall ("SSL_load_error_strings") :void)
34-
(cffi:foreign-funcall ("ERR_load_BIO_strings") :void)
32+
(if (cffi:foreign-symbol-pointer "SSL_library_init" )
33+
(cffi:foreign-funcall "SSL_library_init" :void)
34+
(cffi:foreign-funcall "OPENSSL_init_ssl" :int 0 :int 0))
35+
(when (cffi:foreign-symbol-pointer "SSL_load_error_strings")
36+
(cffi:foreign-funcall "SSL_load_error_strings" :void))
37+
(cffi:foreign-funcall "ERR_load_BIO_strings" :void)
3538
(unless from-load
3639
(setf *ssl-init* t)))))
3740

@@ -322,7 +325,7 @@
322325
(stream-socket socket/stream)
323326
socket/stream))
324327
(ctx (or ssl-ctx
325-
(let ((ctx (create-ssl-ctx :method :tlsv1-client :options ssl-options)))
328+
(let ((ctx (create-ssl-ctx :options ssl-options)))
326329
(ssl-ctx-set-default-verify-paths ctx)
327330
;; TODO better verify support
328331
(ssl-ctx-set-verify ctx +ssl-verify-none+ (cffi:null-pointer))
@@ -340,6 +343,7 @@
340343
(funcall connect-cb sock/stream))))
341344
(lambda (ssl)
342345
(ssl-set-connect-state ssl))
346+
:store-ctx (not ssl-ctx)
343347
:ciphers ciphers)
344348
;; now that the 'socket class was replaced with 'ssl-socket, we can safely
345349
;; write out our data and it will be buffered properly.
@@ -377,7 +381,7 @@
377381
(:pem +ssl-filetype-pem+)
378382
(:asn1 +ssl-filetype-asn1+)
379383
(t +ssl-x509-filetype-default+)))
380-
(res (ssl-ctx-use-privatekey-file ctx (namestring certificate) type)))
384+
(res (ssl-ctx-use-privatekey-file ctx (namestring key) type)))
381385
(when (<= res 0)
382386
(let* ((code (ssl-err-get-error))
383387
(msg (ssl-err-error-string code (cffi:null-pointer))))

‎src/streamish.lisp

+1
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@
157157
(declare (ignore status))
158158
(uv:free-req req)
159159
(let ((uvstream (car (deref-data-from-pointer req))))
160+
(free-pointer-data req :preserve-pointer t)
160161
(when (zerop (uv:uv-is-closing uvstream))
161162
(uv:uv-close uvstream (cffi:callback streamish-close-cb)))))
162163

‎test/dns.lisp

+31
Original file line numberDiff line numberDiff line change
@@ -99,3 +99,34 @@
9999
:event-cb (lambda (ev) (error ev))))
100100
(error (e) (format nil "(~a) ~a" (as:event-errcode e) (as:event-errmsg e))))
101101
(is (string= host "google-public-dns-a.google.com"))))
102+
103+
(test dns-lookup-mem-leak
104+
"Test dns-lookup memory leaks"
105+
(is (async-let ((counts-equal nil))
106+
(test-timeout 3)
107+
(let ((old-count (hash-table-count cl-async-base:*function-registry*)))
108+
(as:dns-lookup "localhost"
109+
(lambda (addr fam)
110+
(declare (ignore addr fam))
111+
(as:delay
112+
(lambda ()
113+
(setf counts-equal
114+
(= old-count
115+
(hash-table-count cl-async-base:*function-registry*))))))
116+
:event-cb (lambda (ev) (error ev))
117+
:family as:+af-inet+)))))
118+
119+
(test reverse-dns-lookup-mem-leak
120+
"Test reverse-dns-lookup memory leaks"
121+
(is (async-let ((counts-equal nil))
122+
(test-timeout 3)
123+
(let ((old-count (hash-table-count cl-async-base:*function-registry*)))
124+
(as:reverse-dns-lookup "8.8.8.8"
125+
(lambda (host service)
126+
(declare (ignore host service))
127+
(as:delay
128+
(lambda ()
129+
(setf counts-equal
130+
(= old-count
131+
(hash-table-count cl-async-base:*function-registry*))))))
132+
:event-cb (lambda (ev) (error ev)))))))

0 commit comments

Comments
 (0)