fix the metadata parsing to be more robust so drracket does not crash when opening a corrupt htdp teaching language file

closes PR 11332
This commit is contained in:
Robby Findler 2010-10-20 13:46:37 -05:00
parent dcd3f9a9aa
commit c34bd6c28d

View File

@ -662,7 +662,7 @@
(inherit default-settings)
(define/override (metadata->settings metadata)
(let* ([table (metadata->table metadata)] ;; extract the table
(let* ([table (massage-metadata (metadata->table metadata))] ;; extract the table
[ssv (assoc 'htdp-settings table)])
(if ssv
(let ([settings-list (vector->list (cadr ssv))])
@ -672,11 +672,18 @@
(default-settings)))
(default-settings))))
(define/private (massage-metadata md)
(if (and (list? md)
(andmap (λ (x) (and (pair? x) (symbol? (car x)))) md))
md
'()))
(define/private (metadata->table metadata)
(let ([p (open-input-string metadata)])
(regexp-match #rx"\n#reader" p) ;; skip to reader
(read p) ;; skip module
(read p)))
(with-handlers ((exn:fail:read? (λ (x) #f)))
(let ([p (open-input-string metadata)])
(regexp-match #rx"\n#reader" p) ;; skip to reader
(read p) ;; skip module
(read p))))
(define/override (get-metadata-lines) 3)