paparazzi-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[paparazzi-commits] [4339] add a length check on binary message parsing


From: Pascal Brisset
Subject: [paparazzi-commits] [4339] add a length check on binary message parsing
Date: Thu, 19 Nov 2009 17:47:18 +0000

Revision: 4339
          http://svn.sv.gnu.org/viewvc/?view=rev&root=paparazzi&revision=4339
Author:   hecto
Date:     2009-11-19 17:47:18 +0000 (Thu, 19 Nov 2009)
Log Message:
-----------
 add a length check on binary message parsing

Modified Paths:
--------------
    paparazzi3/trunk/sw/lib/ocaml/pprz.ml

Modified: paparazzi3/trunk/sw/lib/ocaml/pprz.ml
===================================================================
--- paparazzi3/trunk/sw/lib/ocaml/pprz.ml       2009-11-16 17:30:04 UTC (rev 
4338)
+++ paparazzi3/trunk/sw/lib/ocaml/pprz.ml       2009-11-19 17:47:18 UTC (rev 
4339)
@@ -450,7 +450,11 @@
       Debug.call 'T' (fun f -> fprintf f "Pprz.values id=%d\n" id);
       let rec loop = fun index fields ->
        match fields with
-         [] -> []
+         [] ->
+           if index = String.length buffer then
+             []
+           else
+             failwith (sprintf "Pprz.values_of_payload, too many bytes: %s" 
(Debug.xprint buffer))
        | (field_name, field_descr)::fs -> 
            let (value, n) = value_field buffer index field_descr in
            (field_name, value) :: loop (index+n) fs in
@@ -520,7 +524,12 @@
   let message_send = fun sender msg_name values ->
     let m = snd (message_of_name msg_name) in
     let s = string_of_message m values in
-    Ivy.send (sprintf "%s %s" sender s)
+    let msg = sprintf "%s %s" sender s in
+    let n = String.length msg in
+    if n > 1000 then (** FIXME: to prevent Ivy bug on long message *)
+      fprintf stderr "Discarding long ivy message (%d bytes)\n%!" n
+    else
+      Ivy.send msg
 
   let message_bind = fun ?sender msg_name cb ->
     match sender with





reply via email to

[Prev in Thread] Current Thread [Next in Thread]