[cl-plus-ssl-devel] Two LISTEN bugs

Ron Garret ron at flownet.com
Tue May 11 23:43:55 UTC 2010


On May 11, 2010, at 12:06 PM, Ron Garret wrote:

> 
> On May 11, 2010, at 11:58 AM, Anton Vodonosov wrote:
> 
>> Hello Ron, 
>> 
>> "Ron Garret" <ron at flownet.com>:
>>> Is anyone actually maintaining CL+SSL?  The list seems to be pretty inactive.  
>> 
>> David Lichteblau, the original author of cl+ssl, currently doesn't have time/need to work on cl+ssl (as he explained); but he sometimes suggests how investigate bugs, or commits patches submitted by users.
>> 
>> I also have commit acces to the repositoy. I asked for it when there were several ananswered patch suggestions in the list - just to help to commit the patches. I usually do not investigate problems for which I don't have an answer, because I do not know cl+ssl better than other users. 
>> 
>> What I do is reading the list and make sure that the efforts people made by creating patches do not get lost - i can review and commit a patch.
>> 
>>> I went ahead and fixed this problem, and I'm wondering if I should submit a patch (and who I should submit it to).
>> 
>> Could you please send the patch to the mailing list?
>> 
> 
> 
> NOTE: This has only been tested on CCL.
> 
> ; Bug fix: if you call LISTEN (or, presumably, peek-char) then read-char will return
> ; the same characer forever.  NOTE: input is not buffered, and :EOF is not handled
> ; properly.  Not sure if this is worth fixing.
> (defmethod stream-read-byte ((stream ssl-stream))
>  (or (prog1 (ssl-stream-peeked-byte stream) (setf (ssl-stream-peeked-byte stream) nil))
>      (let ((buf (ssl-stream-input-buffer stream)))
>        (handler-case
>            (with-pointer-to-vector-data (ptr buf)
>              (ensure-ssl-funcall stream
>                                  (ssl-stream-handle stream)
>                                  #'ssl-read
>                                  (ssl-stream-handle stream)
>                                  ptr
>                                  1)
>              (buffer-elt buf 0))
>          (ssl-error-zero-return ()     ;SSL_read returns 0 on end-of-file
>                                 :eof)))))
> 
> ; Bug fix: stream-listen used to hang rather than return nil when no input
> (defmethod stream-listen ((stream ssl-stream))
>  (or (ssl-stream-peeked-byte stream)
>      (setf (ssl-stream-peeked-byte stream)
>            (let ((buf (ssl-stream-input-buffer stream)))
>              (with-pointer-to-vector-data (ptr buf)
>                (let ((n (ssl-read (ssl-stream-handle stream) ptr 1)))
>                  (and (> n 1) (buffer-elt buf 0))))))))

Oops, should be (> n 0) in the last line.

rg





More information about the cl-plus-ssl-devel mailing list