guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

02/04: http-client: Monkey-patch 'make-chunked-input-port' on Guile <= 2


From: Ludovic Courtès
Subject: 02/04: http-client: Monkey-patch 'make-chunked-input-port' on Guile <= 2.0.11.
Date: Tue, 03 Mar 2015 22:08:19 +0000

civodul pushed a commit to branch master
in repository guix.

commit 776463ba9fa73e7d3e147b74614ca25d7c9d8785
Author: Ludovic Courtès <address@hidden>
Date:   Tue Mar 3 22:26:52 2015 +0100

    http-client: Monkey-patch 'make-chunked-input-port' on Guile <= 2.0.11.
    
    Fixes <http://bugs.gnu.org/19976>.
    
    * guix/http-client.scm (when-guile<=2.0.5): Rename to...
      (when-guile<=2.0.5-or-otherwise-broken): ... this.
      (%web-http): New variable.
      Monkey-patch 'make-chunked-input-port' when %WEB-HTTP defines
      'read-chunk-body'.
---
 guix/http-client.scm |   12 ++++++++++--
 1 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/guix/http-client.scm b/guix/http-client.scm
index 6d6af56..051fcee 100644
--- a/guix/http-client.scm
+++ b/guix/http-client.scm
@@ -55,7 +55,7 @@
   (reason http-get-error-reason))                 ; string
 
 
-(define-syntax when-guile<=2.0.5
+(define-syntax when-guile<=2.0.5-or-otherwise-broken
   (lambda (s)
     (syntax-case s ()
       ((_ body ...)
@@ -64,12 +64,15 @@
        ;; when using "guix pull".
        #'(begin body ...)))))
 
-(when-guile<=2.0.5
+(when-guile<=2.0.5-or-otherwise-broken
  ;; Backport of Guile commits 312e79f8 ("Add HTTP Chunked Encoding support to
  ;; web modules.") and 00d3ecf2 ("http: Do not buffer HTTP chunks.")
 
  (use-modules (ice-9 rdelim))
 
+ (define %web-http
+   (resolve-module '(web http)))
+
  ;; Chunked Responses
  (define (read-chunk-header port)
    (let* ((str (read-line port))
@@ -127,6 +130,11 @@ closed it will also close PORT, unless the KEEP-ALIVE? is 
true."
 
    (make-custom-binary-input-port "chunked input port" read! #f #f close))
 
+ ;; Chunked encoding support in Guile <= 2.0.11 would load whole chunks in
+ ;; memory---see <http://bugs.gnu.org/19939>.
+ (when (module-variable %web-http 'read-chunk-body)
+   (module-set! %web-http 'make-chunked-input-port make-chunked-input-port))
+
  (define (read-response-body* r)
    "Reads the response body from @var{r}, as a bytevector.  Returns
  @code{#f} if there was no response body."



reply via email to

[Prev in Thread] Current Thread [Next in Thread]