Fix decoding messages going too far.

Julien LepillerSat Oct 10 23:52:02+0200 2020

cd59eb4

Fix decoding messages going too far.

netlink/message.scm

5252
(define (deserialize-message decoder bv pos)
5353
  (let* ((len (bytevector-u32-ref bv pos (native-endianness)))
5454
         (type (bytevector-u16-ref bv (+ pos 4) (native-endianness)))
55+
         (data (make-bytevector len))
5556
         (deserialize (get-next-deserialize decoder 'message type)))
56-
    (make-message
57-
      type
58-
      (bytevector-u16-ref bv (+ pos 6) (native-endianness))
59-
      (bytevector-u32-ref bv (+ pos 8) (native-endianness))
60-
      (bytevector-u32-ref bv (+ pos 12) (native-endianness))
61-
      (deserialize decoder bv (+ pos 16)))))
57+
    (bytevector-copy! bv pos data 0 len)
58+
    (let ((data (deserialize decoder data 16)))
59+
      (make-message
60+
        type
61+
        (bytevector-u16-ref bv (+ pos 6) (native-endianness))
62+
        (bytevector-u32-ref bv (+ pos 8) (native-endianness))
63+
        (bytevector-u32-ref bv (+ pos 12) (native-endianness))
64+
        (if (< (data-size data) (- len 16))
65+
            (make-nl-data #f (const (- len 16)) (const (make-bytevector 0)))
66+
            data)))))