From e50841e7b78c86fcdf45c984768c16eb9f34c668 Mon Sep 17 00:00:00 2001 From: Nikolay Orlyuk Date: Sat, 1 Mar 2014 00:31:18 +0200 Subject: [PATCH] added overflow scenario --- doc/json-loop-overflow.png | Bin 0 -> 37858 bytes doc/json-loop-overflow.txt | 48 +++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 doc/json-loop-overflow.png create mode 100644 doc/json-loop-overflow.txt diff --git a/doc/json-loop-overflow.png b/doc/json-loop-overflow.png new file mode 100644 index 0000000000000000000000000000000000000000..b95ae981cac9712278f6e424dbbff2c707adc628 GIT binary patch literal 37858 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 b*^zZyefvl+G`R`BB~g@DlPkD#=i&bWD)yuR literal 0 HcmV?d00001 diff --git a/doc/json-loop-overflow.txt b/doc/json-loop-overflow.txt new file mode 100644 index 0000000..070d855 --- /dev/null +++ b/doc/json-loop-overflow.txt @@ -0,0 +1,48 @@ +@startuml +title Overflow scenario + +actor client as "Client" +participant parser as "some : Parser" +participant buffer1 as "buffer1 : Buffer" +participant buffer2 as "buffer2 : Buffer" +participant chunk1 as "chunk1 : Buffer" +participant chunk2 as "chunk2 : Buffer" + +create buffer1 +client -> buffer1: allocate +client -> parser: initialize with buffer1 + +create chunk1 +client -> chunk1: read +client -> parser: feed chunk1 +client -> parser: pull n tokens +activate parser +client <-- parser: some token +client <-- parser: overflow +note right: second token didn't fit into buffer1 +deactivate parser + +create buffer2 +client -> buffer2: allocate +client -> parser: realloc with buffer2 +activate parser +note right of parser: some part of buffer1 may be copied to buffer2 +client <-- parser +deactivate parser +client -> buffer1: free +destroy buffer1 + +client -> parser: pull n tokens +activate parser +client <-- parser: starving +deactivate parser + +create chunk2 +client -> chunk2: read +client -> parser: feed chunk2 +client -> parser: pull n tokens +activate parser +client <-- parser: some token +client <-- parser: starving +deactivate parser +@enduml