]> gitweb.factorcode.org Git - factor.git/commitdiff
mime.multipart: Simplify the code a bit.
authorDoug Coleman <doug.coleman@gmail.com>
Mon, 21 Jan 2019 21:08:07 +0000 (15:08 -0600)
committerDoug Coleman <doug.coleman@gmail.com>
Mon, 21 Jan 2019 21:08:07 +0000 (15:08 -0600)
Fixes #2107

basis/mime/multipart/multipart-tests.factor
basis/mime/multipart/multipart.factor

index febb21af11815b1ce12d5070c92d51b97cff7ec5..2bf79e9b8e9b0895a2593e2e5f366d797fc8062d 100644 (file)
@@ -77,3 +77,10 @@ SYMBOL: mime-test-server
     [
     ] with-test-server
 ] unit-test
+
+[
+    "--\r\n\r\n" <string-reader> [
+        "\r\n\r\n" <multipart>
+        "\r\n\r\n" parse-multipart
+    ] with-input-stream
+] [ mime-decoding-ran-out-of-bytes? ] must-fail-with
\ No newline at end of file
index 2072b7cbd4cfb9c17998ad90c8ecec334b0561c0..6ffcd2afc6615152d0e792b1dd801b579c2a7d70 100644 (file)
@@ -40,20 +40,19 @@ C: <mime-variable> mime-variable
     [ '[ _ B{ } append-as ] change-bytes ]
     [ t >>end-of-stream? ] if* ;
 
-: split-bytes ( bytes separator -- leftover-bytes safe-to-dump )
-    dupd [ length ] bi@ 1 - - short cut-slice swap ;
-
+ERROR: mime-decoding-ran-out-of-bytes ;
 : dump-until-separator ( multipart -- multipart )
-    dup
-    [ current-separator>> ] [ bytes>> ] bi
-    [ nip ] [ subseq-start ] 2bi [
+    [ ] [ current-separator>> ] [ bytes>> ] tri
+    dup [ mime-decoding-ran-out-of-bytes ] unless
+    2dup subseq-start [
         cut-slice
         [ mime-write ]
-        [ over current-separator>> length short tail-slice >>bytes ] bi*
+        [ swap length tail-slice >>bytes ] bi*
     ] [
-        drop
-        dup [ bytes>> ] [ current-separator>> ] bi split-bytes mime-write
-        >>bytes fill-bytes dup end-of-stream?>> [ dump-until-separator ] unless
+        tuck [ length ] bi@ - 1 - cut-slice
+        [ mime-write ]
+        [ >>bytes ] bi* fill-bytes
+        dup end-of-stream?>> [ dump-until-separator ] unless
     ] if* ;
 
 : dump-string ( multipart separator -- multipart string )