Fix deserializing empty attribute

Julien LepillerMon Feb 01 15:32:45+0100 2021

d8422be

Fix deserializing empty attribute

netlink/route/attrs.scm

150150
  (lambda (decoder bv pos)
151151
    (let* ((len (bytevector-u16-ref bv pos (native-endianness)))
152152
           (type (bytevector-u16-ref bv (+ pos 2) (native-endianness)))
153-
           (deserialize (get-next-deserialize decoder message-type type))
154-
           (data-bv (make-bytevector (- len 4))))
155-
      (bytevector-copy! bv (+ pos 4) data-bv 0 (- len 4))
156-
      (make-route-attr
157-
        type
158-
        (deserialize decoder data-bv 0)))))
153+
           (deserialize (get-next-deserialize decoder message-type type)))
154+
      (if (= len 0)
155+
          (let ((data-bv (make-bytevector 0)))
156+
            (make-route-attr type (deserialize decoder data-bv 0)))
157+
          (let ((data-bv (make-bytevector (- len 4))))
158+
            (bytevector-copy! bv (+ pos 4) data-bv 0 (- len 4))
159+
            (make-route-attr
160+
              type
161+
              (deserialize decoder data-bv 0)))))))
159162
160163
(define (deserialize-route-attr-data-string decoder bv pos)
161164
  (make-string-route-attr