branch: externals/sly
commit 1188cfc9923155c70ab03b7f5546ad5a14bb23c3
Author: Stas Boukarev <[email protected]>
Commit: João Távora <[email protected]>
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 <[email protected]>
---
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))