Permalink
Browse files

make SOCKET-RECEIVE work correctly when receiving overly-long UDP pac…

…kets

Only copy as much data as the provided buffer can hold.  Continue to return
the length provided from recvfrom as per documentation.

Fixes lp#1023438.  Thanks to Robert Uhl for the fix.
  • Loading branch information...
froydnj committed Sep 5, 2012
1 parent c8ef1a3 commit 9d17f7daef6d930a229ae6c0339c9eefc3dd71e6
Showing with 4 additions and 1 deletion.
  1. +3 −0 NEWS
  2. +1 −1 contrib/sb-bsd-sockets/sockets.lisp
View
3 NEWS
@@ -6,6 +6,9 @@ changes relative to sbcl-1.0.58:
comparisons, particularly on almost-sorted inputs.
* bug fix: Reading floats with large exponents no longer takes too much time
before reporting that the exponent is too large.
+ * bug fix: SB-BSD-SOCKETS:SOCKET-RECEIVE with a UDP socket now works
+ correctly when the received datagram is larger than the provided buffer.
+ (lp#1023438, thanks to Robert Uhl)
* documentation: a section on random number generation has been added to the
manual. (lp#656839)
@@ -229,7 +229,7 @@ buffer was too small."))
(list sockint::EAGAIN sockint::EINTR)))
nil)
((= len -1) (socket-error "recvfrom"))
- (t (loop for i from 0 below len
+ (t (loop for i from 0 below (min len length)
do (setf (elt buffer i)
(cond
((or (eql element-type 'character) (eql element-type 'base-char))

0 comments on commit 9d17f7d

Please sign in to comment.