branch: externals/sly commit 1188cfc9923155c70ab03b7f5546ad5a14bb23c3 Author: Stas Boukarev <stass...@gmail.com> Commit: João Távora <joaotav...@gmail.com>
Ignore utf-8 encoding errors * slynk/backend/sbcl.lisp (string-to-utf8, utf8-to-string): Rework. * slynk/slynk-backend.lisp (utf8-decode-aux, utf8-decode): Rework. Cherry-picked-from: SLIME commit f851763d96fe8aa7f563ad4e00ba06d275316210 Co-authored-by: João Távora <joaotav...@gmail.com> --- slynk/backend/sbcl.lisp | 8 ++++++-- slynk/slynk-backend.lisp | 12 +++++------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/slynk/backend/sbcl.lisp b/slynk/backend/sbcl.lisp index 487ef93..aeb2ea7 100644 --- a/slynk/backend/sbcl.lisp +++ b/slynk/backend/sbcl.lisp @@ -85,10 +85,14 @@ ;;; UTF8 (defimplementation string-to-utf8 (string) - (sb-ext:string-to-octets string :external-format :utf8)) + (sb-ext:string-to-octets string :external-format '(:utf8 :replacement + #+sb-unicode #\Replacement_Character + #-sb-unicode #\? ))) (defimplementation utf8-to-string (octets) - (sb-ext:octets-to-string octets :external-format :utf8)) + (sb-ext:octets-to-string octets :external-format '(:utf8 :replacement + #+sb-unicode #\Replacement_Character + #-sb-unicode #\? ))) ;;; TCP Server diff --git a/slynk/slynk-backend.lisp b/slynk/slynk-backend.lisp index 8c5f892..0bb27e1 100644 --- a/slynk/slynk-backend.lisp +++ b/slynk/slynk-backend.lisp @@ -291,18 +291,15 @@ form suitable for testing with #+." (cond ((= (ldb (byte 2 6) byte) #b10) (+ (ash code 6) (ldb (byte 6 0) byte))) (t - (error "Invalid encoding")))))) + #xFFFD))))) ;; Replacement_Character ((= i n) (values (cond ((<= code #xff) (code-char code)) ((<= #xd800 code #xdfff) - (error "Invalid Unicode code point: #x~x" code)) + (code-char #xFFFD)) ;; Replacement_Character ((and (< code char-code-limit) (code-char code))) (t - (error - "Can't represent code point: #x~x ~ - (char-code-limit is #x~x)" - code char-code-limit))) + (code-char #xFFFD))) ;; Replacement_Character (+ index n)))))) ;; Decode one character in BUFFER starting at INDEX. @@ -392,7 +389,8 @@ form suitable for testing with #+." (t start))) ((<= code #x7ff) (utf8-encode-aux code buffer start end 2)) ((<= #xd800 code #xdfff) - (error "Invalid Unicode code point (surrogate): #x~x" code)) + (%utf8-encode (code-char #xFFFD) ;; Replacement_Character + buffer start end)) ((<= code #xffff) (utf8-encode-aux code buffer start end 3)) ((<= code #x1fffff) (utf8-encode-aux code buffer start end 4)) ((<= code #x3ffffff) (utf8-encode-aux code buffer start end 5))