From b0f70fbd4e2183c2fe096028b9e4be9f1b371f41 Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Thu, 29 Aug 2013 23:23:41 +0200 Subject: [PATCH] more paranoid decoder, with bugfix --- bencode.ml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/bencode.ml b/bencode.ml index dc644223..bbc9e750 100644 --- a/bencode.ml +++ b/bencode.ml @@ -290,17 +290,17 @@ let parse dec s i len = (* add the input to [dec] *) if dec.len = 0 then begin - dec.buf <- s; + dec.buf <- String.copy s; dec.i <- i; dec.len <- len; end else begin (* use a buffer to merge the stored input and the new input *) - let b = Buffer.create (dec.len + len) in - Buffer.add_substring b dec.buf dec.i dec.len; - Buffer.add_substring b s i len; - dec.buf <- Buffer.contents b; + let buf' = String.create (dec.len + len - dec.i) in + String.blit dec.buf dec.i buf' 0 dec.len; + String.blit s i buf' dec.len len; + dec.buf <- buf'; dec.i <- 0; - dec.len <- dec.len + len; + dec.len <- dec.len + len - dec.i; end; (* state machine *) parse_rec dec