Ensure correct message length while deserializing

Julien LepillerMon Feb 01 16:14:11+0100 2021

d18c55c

Ensure correct message length while deserializing

netlink/data.scm

2020
  #:use-module (srfi srfi-9)
2121
  #:export (make-nl-data
2222
            nl-data-data nl-data-size-proc nl-data-serialize-proc
23-
            data-size
23+
            data-size ensure-data-size
2424
            serialize deserialize
2525
            get-current-deserialize get-next-deserialize
2626
            define-data-type))

3838
(define (serialize data pos bv)
3939
  ((nl-data-serialize-proc data) (nl-data-data data) pos bv))
4040
41+
(define (ensure-data-size data size)
42+
  (make-nl-data
43+
    (nl-data-data data)
44+
    (const size)
45+
    (nl-data-serialize-proc data)))
46+
4147
(define (get-next-deserialize decoder current-type target-type)
4248
  (match (assoc-ref decoder current-type)
4349
    ((_ . type-alist)

netlink/message.scm

6464
        (bytevector-u32-ref bv (+ pos 8) (native-endianness))
6565
        (bytevector-u32-ref bv (+ pos 12) (native-endianness))
6666
        (if (< (data-size data) (- len 16))
67-
            (make-nl-data #f (const (- len 16)) (const (make-bytevector 0)))
67+
            (ensure-data-size data (- len 16))
6868
            data)))))
6969
7070
(define (deserialize-message-header decoder bv pos)

netlink/standard.scm

4343
(define (deserialize-error-message decoder bv pos)
4444
  (make-error-message
4545
    (bytevector-s32-ref bv pos (native-endianness))
46-
    (deserialize 'message-hdr decoder (pk 'error-mrg bv) (+ pos 4))))
46+
    (deserialize 'message-hdr decoder bv (+ pos 4))))
4747
4848
(define no-data
4949
  (make-nl-data