From 77f0865689db131ed95aa9045e5cccd0e966a41f Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Wed, 2 Nov 2016 11:11:53 -0700 Subject: [PATCH] gopher: use url encoding and decoding to work with weird filenames. --- extra/gopher/gopher.factor | 2 +- extra/gopher/server/server.factor | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/extra/gopher/gopher.factor b/extra/gopher/gopher.factor index 18d7a65b96..5820c784f7 100644 --- a/extra/gopher/gopher.factor +++ b/extra/gopher/gopher.factor @@ -52,7 +52,7 @@ ERROR: not-a-gopher-url url ; >url dup protocol>> "gopher" = [ not-a-gopher-url ] unless { [ host>> ] [ port>> 70 or binary ] - [ path>> rest [ "1/" ] when-empty ] + [ path>> rest url-encode [ "1/" ] when-empty ] [ query>> [ assoc>query url-decode "?" glue ] when* ] } cleave '[ 1 minutes input-stream get set-timeout diff --git a/extra/gopher/server/server.factor b/extra/gopher/server/server.factor index d48aa31e15..1042fa3648 100644 --- a/extra/gopher/server/server.factor +++ b/extra/gopher/server/server.factor @@ -5,7 +5,7 @@ USING: accessors calendar combinators combinators.short-circuit formatting fry io io.directories io.encodings.binary io.encodings.string io.encodings.utf8 io.files io.files.info io.files.types io.pathnames io.servers kernel locals math -mime.types sequences splitting strings ; +mime.types sequences splitting strings urls.encoding ; IN: gopher.server @@ -72,6 +72,7 @@ TUPLE: gopher-server < threaded-server ] [ path prepend-path server serving-directory>> ?head drop + url-encode ] bi server serving-hostname>> server insecure>> @@ -91,7 +92,7 @@ TUPLE: gopher-server < threaded-server : read-gopher-path ( -- path ) readln dup [ "\t\r\n" member? ] find drop [ head ] when* - trim-tail-separators ; + trim-tail-separators url-decode ; M: gopher-server handle-client* dup serving-directory>> read-gopher-path append-path