GOOF----LE-8-2.05D]4h] gguile  gdefine-module*   gsystem grepl gserver  gfilenameS fsystem/repl/server.scm gimportsS    gice-9 gthreads   grdelim   gmatch   giconv   grnrs g bytevectors   gio !gports " ! #" $gsrfi %gsrfi-1 &$% '& (gsrfi-26 )$( *) +#'*  ,gexportsS -gmake-tcp-server-socket .gmake-unix-domain-server-socket /g run-server 0g spawn-server 1gstop-server-and-clients! 2-./01 3gset-current-module 43 53 6g*open-sockets* 7g make-mutex 8g sockets-lock 9g lock-mutex :9 ;9 < ?g assq-remove! @g close-port Ag close-socket! Bgadd-open-socket! Cgerror DC EC Ffno matching pattern GghostS HG  IgaddrS JI  KgportS LK  MHJL Ng inet-aton OgINADDR_LOOPBACK Pgsocket QgPF_INET Rg SOCK_STREAM Sg setsockopt Tg SOL_SOCKET Ug SO_REUSEADDR Vgbind WgAF_INET XgpathS YX  ZY [f/tmp/guile-socket \gPF_UNIX ]gAF_UNIX ^gdelete-duplicates _g filter-map `gand=> agmodule-variable bgthe-root-module cg variable-ref dgEINTR egEAGAIN fg EWOULDBLOCK gdef hg errs-to-retry ig run-server* jg serve-client kgcatch lgselect mgmemq ngaccept ogsystem-error-errno pgmemv qgwarn rfError accepting client sgsleep tgpipe ugfcntl vgF_SETFL wg O_NONBLOCK xgF_GETFL yg sigaction zgSIGPIPE {gSIG_IGN |gdisplay }g force-output ~glisten gcall-with-new-thread   g%thread-handler   gclose gcurrent-thread gset-thread-cleanup! g cancel-thread gguard-against-http-request gwith-continuation-barrier gcurrent-input-port gcurrent-output-port gcurrent-error-port gcurrent-warning-port g parameter?   g scm-error gwrong-type-arg f parameterize fNot a parameter: ~S g *repl-stack* g start-repl g port-closed? g port-encoding gset-port-encoding! gwith-temporary-port-encoding g port-line g port-column gset-port-line! gset-port-column! gwith-saved-port-line+column g char-ready? gget-bytevector-some g bytevector? gbytevector->string f ISO-8859-1 gstring-concatenate-reverse gsetvbuf g_IOFBF gdrain-input-and-close gucs-range->char-set g make-regexp g string-append f2^(OPTIONS|GET|HEAD|POST|PUT|DELETE|TRACE|CONNECT)  f[^ ]+  fHTTP/[0-9]+.[0-9]+$ g string-every g regexp-exec gpermissive-http-request-line? gread-delimited f  gpeek g eof-object? gdone g%make-void-port frw gcall-with-port g dup->port fw gformat f @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@ POSSIBLE BREAK-IN ATTEMPT ON THE REPL SERVER @@ @@ BY AN HTTP INTER-PROTOCOL EXPLOITATION ATTACK. See: @@ @@ @@ @@ Possible HTTP request received: ~S @@ The associated socket has been closed. @@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  g unread-string gcheck-for-http-request g%set-port-property! gguard-against-http-request? g%port-property gmaybe-check-for-http-request g add-hook! gbefore-read-hookC5h1]4    +,2545>"G6R47i58R8;hI]L6Agfilenamefsystem/repl/server.scm /    C>hI]L6Agfilenamefsystem/repl/server.scm /    C?6@hX] OO4O>"GV45 X4O>"G6gs  Tgx  Ngfilenamefsystem/repl/server.scm .  /  + 0  5 0  7 /  T 3   T gnameg close-socket!CAR8;hI]L6Agfilenamefsystem/repl/server.scm 7    C>hI]L6Agfilenamefsystem/repl/server.scm 7    C6hh] OO4O>"GV X4O>"GCX4O>"GFgs  cg force-close  cgx   cgfilenamefsystem/repl/server.scm 6  7  / 8  4 8  7 7   c gnamegadd-open-socket!CBR8;hI]L6Agfilenamefsystem/repl/server.scm <    C>hI]L6Agfilenamefsystem/repl/server.scm <    C6EF1 h](OO4O>"GV("T$?$ "4455"4455X4O>"G$4>"G6Cgx  gv , gw  F {gx  F {gx  T cgt gfilenamefsystem/repl/server.scm :  <  , =  ^ @ h =  <  ;  C D   gnamegstop-server-and-clients!C1RMNOPQRSTUVW h-/03##$ 45"# 4 54 >"G4  >"GCghost  gaddr  gport   gsock  R gfilenamefsystem/repl/server.scm F ( H ) H ) I J  R J  U K  l L   ghostS gaddrS gportS gnamegmake-tcp-server-socketC-RZ[P\RSTUV] h`-/03#4 54 >"G4  >"GCgpath  Ygsock ' Ygfilenamefsystem/repl/server.scm O  O 5  P  ' P  * Q  A R   Y gpathS gnamegmake-unix-domain-server-socketC.R4^i4_i`abchl]456dgname  gfilenamefsystem/repl/server.scm Y   Z   Z    Cg55hR-ijh(-.,3#456g server-socket !gfilenamefsystem/repl/server.scm ^  ^ / ! _  ! gnameg run-serverC/Rklmnh(]4M54M5$CL6g ready-ports #gfilenamefsystem/repl/server.scm s   t  t 8 t < t t  t   v   v # w   # CophqrshP-134545$L64>"G4 >"GL6gk-args Lgerr  Lgfilenamefsystem/repl/server.scm x  y   y   {  z # | $ ~ ( ~  / ~ 8 L  L Ch o]LLLOLO6ggfilenamefsystem/repl/server.scm q   r    gnamegaccept-new-clientCtuvwxyz{B|}h u]4!M>"GM6mgfilenamefsystem/repl/server.scm i   j   k    gnamegshutdown-serverC~hJ]LLL6Bgfilenamefsystem/repl/server.scm   Chq]BHHHHOQ45KJKJKJK445>"G4 >"G4  O>"G4  >"G"b$2 4  O>"G45"4J>"G4J>"G645"ig server-socket  g serve-client  gshutdown-pipes   gshutdown-read-pipe   gshutdown-write-pipe   gmonitored-ports   gaccept-new-client   gclient  g client-socket  g client-addr  gfilenamefsystem/repl/server.scm b % d  . e  3 f  < n  ?  H  Q V  _  s                     gnameg run-server*CiR-/hJ]L6Bgfilenamefsystem/repl/server.scm    Ch(-.,3#45O6g server-socket &gfilenamefsystem/repl/server.scm  1 &  & gnameg spawn-serverC0RAhS]L6Kgfilenamefsystem/repl/server.scm  +   CBhS]L6Kgfilenamefsystem/repl/server.scm   (   C h] 45$"4 >"G45$"4 >"G45$"4 >"G45$"4 >"G    4 L54 L54 L54 L5Y Y4 > Z"ZCZFgt-3d081069b-c3 gt-3d081069b-c4 gt-3d081069b-c5  gt-3d081069b-c6  gfilenamefsystem/repl/server.scm   #    C h`] 454O>"G4O>"G4>"GO6gclient  [gaddr  [gthread   >gfilenamefsystem/repl/server.scm      #  ?  [   [ gnameg serve-clientCjRh w]4L5$C4L5NLM6ogfilenamefsystem/repl/server.scm          Ch w]4L5$C4L5NLM6ogfilenamefsystem/repl/server.scm          Ch w]4L5$C4L5NLM6ogfilenamefsystem/repl/server.scm          Ch w]4L5$C4L5NLM6ogfilenamefsystem/repl/server.scm          Ch w]4L5$C4L5NLM6ogfilenamefsystem/repl/server.scm          ChxS] HHOO4O>"GV4>X4O>"GCX4O>"GFKgport  wgencoding  wgthunk   wgsaved-encoding   wgfilenamefsystem/repl/server.scm     w gnamegwith-temporary-port-encodingg documentationfaCall THUNK in a dynamic environment in which the encoding of PORT is temporarily set to ENCODING.CRh(]4L5$C4L5N4L5NCxgfilenamefsystem/repl/server.scm          !   # Ch0n]4L5$C4LM>"GLM6fgfilenamefsystem/repl/server.scm      +   + Ch(]4L5$C4L5N4L5NCxgfilenamefsystem/repl/server.scm          !   # Ch0n]4L5$C4LM>"GLM6fgfilenamefsystem/repl/server.scm      +   + Ch0n]4L5$C4LM>"GLM6fgfilenamefsystem/repl/server.scm      +   + Chxt]HHOO4O>"GV4>X4O>"GCX4O>"GFlgport  vgthunk  vg saved-line   vg saved-column   vgfilenamefsystem/repl/server.scm      v gnamegwith-saved-port-line+columng documentationfSave the line and column of PORT before entering THUNK, and restore their previous values upon normal or non-local exit from THUNK.CRhP]"<4L5$ 4L5"45$45"6"gchunks  Bgresult  Bgfilenamefsystem/repl/server.scm             * +  1 5 3  6  <  B  B  C  I   I ChS]L6Kgfilenamefsystem/repl/server.scm    C@hS]L6Kgfilenamefsystem/repl/server.scm      Chp2] OQOO4O>"GV4>X4O>"GCX4O>"GF*gsocket  igthunk igfilenamefsystem/repl/server.scm   i gnamegdrain-input-and-closeg documentationfDrain input from SOCKET using ISO-8859-1 encoding until it would block, and then close it. Return the drained input as a string.CR4i ~54i4i55h ]4L5$L6Cgline  gfilenamefsystem/repl/server.scm         g documentationfQReturn true if LINE might plausibly be an HTTP request-line, otherwise return #f.CORh]4LL56{gt-3d081069b-183  gfilenamefsystem/repl/server.scm -   - 5   -    ChQ]4L545$C45$s454 >"G4 >"G4 >"G4 >"G4 L54 5O6L6Igv g void-port / |g drained-input gfilenamefsystem/repl/server.scm       !  /      )   -  / /   /  2 !  D "  V #  h $  } ( " ( ,  , , ,  ,  ;   ChS]LLO6Kgfilenamefsystem/repl/server.scm        ChT]O6Lgsocket  gfilenamefsystem/repl/server.scm   '      gnamegcheck-for-http-requestg documentationfCheck for a possible HTTP request in the initial input from SOCKET. If one is found, close the socket and print a report to STDERR (fdes 2). Otherwise, put back the bytes.CRh ]6gsocket  gfilenamefsystem/repl/server.scm =  D  D   gnamegguard-against-http-requestg documentationf\Arrange for the Guile REPL to check for an HTTP request in the initial input from SOCKET, in which case the socket will be closed. This guards against HTTP inter-protocol exploitation attacks, a scenario whereby an attacker can, via an HTML page, cause a web browser to send data to TCP servers listening on a loopback interface or private network.CRhP-.,3#4545$(4>"G45$C6Cgsocket Pgfilenamefsystem/repl/server.scm F  G   K  K  " K  & K  ' L  9 M C M  K N " N N  P gnamegmaybe-check-for-http-requestg documentationfApply check-for-http-request to SOCKET if previously requested by guard-against-http-request. This procedure is intended to be added to before-read-hook.CRiii6gm  ,gcs 't (grx 't (gfilenamefsystem/repl/server.scm   - (  0 ( 1 *  : *  .  6  :  F O X  Y  \  Y  X  W g ^  b  N  #G 'U 'V 'a 'f 'l  'n  'p  'r 't 't  ( -w / = 1 F 1 Q &  1 C6