From afdbc6f1d9812576e4411262d37e38edc81dda82 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 26 Jan 2009 17:29:50 -0600 Subject: [PATCH] process form names for the developer --- basis/mime/multipart/multipart-tests.factor | 11 ++++++++--- basis/mime/multipart/multipart.factor | 17 +++++++++++++++-- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/basis/mime/multipart/multipart-tests.factor b/basis/mime/multipart/multipart-tests.factor index b6d76c328a..d91e31cca2 100644 --- a/basis/mime/multipart/multipart-tests.factor +++ b/basis/mime/multipart/multipart-tests.factor @@ -2,7 +2,7 @@ ! See http://factorcode.org/license.txt for BSD license. USING: io.encodings.ascii io.files io.files.unique kernel mime.multipart tools.test io.streams.duplex io multiline -assocs ; +assocs accessors ; IN: mime.multipart.tests : upload-separator ( -- seq ) @@ -20,11 +20,16 @@ IN: mime.multipart.tests [ t ] [ mime-test-stream [ upload-separator parse-multipart ] with-input-stream - "\"file1\"" swap key? + "file1" swap key? ] unit-test [ t ] [ mime-test-stream [ upload-separator parse-multipart ] with-input-stream - "\"text1\"" swap key? + "file1" swap key? +] unit-test + +[ t ] [ + mime-test-stream [ upload-separator parse-multipart ] with-input-stream + "file1" swap at filename>> "up.txt" = ] unit-test diff --git a/basis/mime/multipart/multipart.factor b/basis/mime/multipart/multipart.factor index 03a7833a54..e8ba2b8cf4 100755 --- a/basis/mime/multipart/multipart.factor +++ b/basis/mime/multipart/multipart.factor @@ -74,12 +74,24 @@ ERROR: end-of-stream multipart ; : empty-name? ( string -- ? ) { "''" "\"\"" "" f } member? ; +: quote? ( ch -- ? ) "'\"" member? ; + +: quoted? ( str -- ? ) + { + [ length 1 > ] + [ first quote? ] + [ [ first ] [ peek ] bi = ] + } 1&& ; + +: unquote ( str -- newstr ) + dup quoted? [ but-last-slice rest-slice >string ] when ; + : save-uploaded-file ( multipart -- ) dup filename>> empty-name? [ drop ] [ [ [ header>> ] [ filename>> ] [ temp-file>> ] tri mime-file boa ] - [ content-disposition>> "name" swap at ] + [ content-disposition>> "name" swap at unquote ] [ mime-parts>> set-at ] tri ] if ; @@ -88,7 +100,7 @@ ERROR: end-of-stream multipart ; drop ] [ [ [ header>> ] [ name>> ] [ name-content>> ] tri mime-variable boa ] - [ name>> ] + [ name>> unquote ] [ mime-parts>> set-at ] tri ] if ; @@ -112,6 +124,7 @@ ERROR: unknown-content-disposition multipart ; : parse-form-data ( multipart -- multipart ) "filename" lookup-disposition [ + unquote >>filename [ dump-file ] [ save-uploaded-file ] bi ] [