From bf3ecb4d485d8d5d4abd36fb4c5ebab9de48549c Mon Sep 17 00:00:00 2001
From: Andre Maroneze <andre.oliveiramaroneze@cea.fr>
Date: Fri, 28 Jun 2019 18:39:58 +0200
Subject: [PATCH] [Unmarshal] fix for OCaml 4.08

---
 src/libraries/datatype/unmarshal.ml | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/src/libraries/datatype/unmarshal.ml b/src/libraries/datatype/unmarshal.ml
index 888573ad325..df6726ec62c 100644
--- a/src/libraries/datatype/unmarshal.ml
+++ b/src/libraries/datatype/unmarshal.ml
@@ -472,13 +472,25 @@ let input_val ch t =
           let clos = intern_rec [] t in
           return stk (Obj.add_offset (Obj.repr clos) ofs)
 
-      | 0x12 (* CODE_CUSTOM *) ->
+      | 0x12 | 0x19 (* CODE_CUSTOM (deprecated) or CODE_CUSTOM_FIXED *) ->
           let id = read_customident ch in
           let v = read_custom ch id in
           let dest = !ctr in
           ctr := dest + 1;
           return_block stk t v dest
 
+      | 0x18 (* CODE_CUSTOM_LEN *) ->
+        let id = read_customident ch in
+        (* Note: CODE_CUSTOM_FIXED and CODE_CUSTOM_LEN has the length of the
+           payload statically computable, but contrary to the C code,
+           we don't check that the size matches. *)
+        let _sz_32 = read32u ch in
+        let _sz_64 = read64u ch in
+        let v = read_custom ch id in
+        let dest = !ctr in
+        ctr := dest + 1;
+        return_block stk t v dest
+
       | _ when code >= 0x80 (* PREFIX_SMALL_BLOCK *) ->
           let tag = code land 0xF in
           let size = (code lsr 4) land 0x7 in
-- 
GitLab