summaryrefslogtreecommitdiff
path: root/guix/scripts/publish.scm
diff options
context:
space:
mode:
authorMarius Bakke <mbakke@fastmail.com>2019-06-29 23:23:59 +0200
committerMarius Bakke <mbakke@fastmail.com>2019-06-29 23:23:59 +0200
commit6e1f8d552b73e508bba47dedb5676ce5ccdcc398 (patch)
tree952a8fa2652ad26946100707311824b8c7a88768 /guix/scripts/publish.scm
parentc24b896365ebf0c783140e53e000305e682d18c5 (diff)
parent8e92d5465fc154fed5d06f7e4a64d7dcccded74d (diff)
Merge branch 'master' into staging
Diffstat (limited to 'guix/scripts/publish.scm')
-rw-r--r--guix/scripts/publish.scm26
1 files changed, 26 insertions, 0 deletions
diff --git a/guix/scripts/publish.scm b/guix/scripts/publish.scm
index b4334b3f16..c716998a5b 100644
--- a/guix/scripts/publish.scm
+++ b/guix/scripts/publish.scm
@@ -724,6 +724,32 @@ example: \"/foo/bar\" yields '(\"foo\" \"bar\")."
(define %http-write
(@@ (web server http) http-write))
+(match (list (major-version) (minor-version) (micro-version))
+ (("2" "2" "5") ;Guile 2.2.5
+ (let ()
+ (define %read-line (@ (ice-9 rdelim) %read-line))
+ (define bad-header (@@ (web http) bad-header))
+
+ ;; XXX: Work around <https://bugs.gnu.org/36350> by reverting to the
+ ;; definition of 'read-header-line' as found in 2.2.4 and earlier.
+ (define (read-header-line port)
+ "Read an HTTP header line and return it without its final CRLF or LF.
+Raise a 'bad-header' exception if the line does not end in CRLF or LF,
+or if EOF is reached."
+ (match (%read-line port)
+ (((? string? line) . #\newline)
+ ;; '%read-line' does not consider #\return a delimiter; so if it's
+ ;; there, remove it. We are more tolerant than the RFC in that we
+ ;; tolerate LF-only endings.
+ (if (string-suffix? "\r" line)
+ (string-drop-right line 1)
+ line))
+ ((line . _) ;EOF or missing delimiter
+ (bad-header 'read-header-line line))))
+
+ (set! (@@ (web http) read-header-line) read-header-line)))
+ (_ #t))
+
(define (strip-headers response)
"Return RESPONSE's headers minus 'Content-Length' and our internal headers."
(fold alist-delete