Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] Cryptokit.Zlib uncompressing fails to terminate (fwd)
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: malc <malc@p...>
Subject: Re: [Caml-list] Cryptokit.Zlib uncompressing fails to terminate (fwd) (Another Patch)
Hello,

Previous patch for Cryptokit's Zlib was flawed (it did fix the original
problem while, on the other hand introducing another and much bigger one)

Here is another attempt (also thanks to David MENTRE for noticing a nasty
typo in comments):

diff -ur cryptokit-1.2-orig/cryptokit.ml cryptokit-1.2/cryptokit.ml
--- cryptokit-1.2-orig/cryptokit.ml     Thu Jul 10 17:37:38 2003
+++ cryptokit-1.2/cryptokit.ml  Tue Nov 16 12:35:16 2004
@@ -33,6 +33,7 @@
    | No_entropy_source
    | Entropy_source_closed
    | Compression_not_supported
+  | Input_buffer_to_big

  exception Error of error

@@ -2029,12 +2030,14 @@
      method put_substring src ofs len =
        if len > 0 then begin
          self#ensure_capacity 64;
-        let (_, used_in, used_out) =
+        let (finished, used_in, used_out) =
            inflate zs
                    src ofs len
                    obuf oend (String.length obuf - oend)
                    Z_SYNC_FLUSH in
          oend <- oend + used_out;
+        if finished && not (used_in = len)
+        then raise (Error Input_buffer_to_big);
          if used_in < len
          then self#put_substring src (ofs + used_in) (len - used_in)
        end
diff -ur cryptokit-1.2-orig/cryptokit.mli cryptokit-1.2/cryptokit.mli
--- cryptokit-1.2-orig/cryptokit.mli    Thu Jul 10 17:37:38 2003
+++ cryptokit-1.2/cryptokit.mli Tue Nov 16 13:13:26 2004
@@ -922,6 +922,9 @@
        (** End of file on a device or EGD entropy source. *)
    | Compression_not_supported
        (** The data compression functions are not available. *)
+  | Input_buffer_to_big
+      (** More data has been passed to a function than it can
+          gracefully handle *)

  exception Error of error
    (** Exception raised by functions in this library


-- 
mailto:malc@pulsesoft.com