diff options
author | Ludovic Courtès <ludo@gnu.org> | 2017-09-19 21:24:31 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2017-09-19 23:58:25 +0200 |
commit | f1b65d0dd964e4c457e660b9289a357447939d93 (patch) | |
tree | 14ba5e3afd4ddbe9e86aaf6e06ff31ff6ee940ca /guix | |
parent | 6ab63268e4a100340995fc16cb4afc34c0edae09 (diff) |
cve: Disable position recording while reading the CVE list.
* guix/cve.scm (fetch-vulnerabilities)[read*]: New procedure.
Use it in lieu of 'read'.
Diffstat (limited to 'guix')
-rw-r--r-- | guix/cve.scm | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/guix/cve.scm b/guix/cve.scm index 088e39837a..38e59944c8 100644 --- a/guix/cve.scm +++ b/guix/cve.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2015, 2016 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -229,11 +229,24 @@ the given TTL (fetch from the NIST web site when TTL has expired)." (now (current-time time-utc))) (< (+ (stat:mtime s) ttl) (time-second now)))) + (define (read* port) + ;; Disable read options to avoid populating the source property weak + ;; table, which speeds things up, saves memory, and works around + ;; <https://lists.gnu.org/archive/html/guile-devel/2017-09/msg00031.html>. + (let ((options (read-options))) + (dynamic-wind + (lambda () + (read-disable 'positions)) + (lambda () + (read port)) + (lambda () + (read-options options))))) + (catch 'system-error (lambda () (if (old? cache) (update-cache) - (match (call-with-input-file cache read) + (match (call-with-input-file cache read*) (('vulnerabilities 1 vulns) (map sexp->vulnerability vulns)) (x |