1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-20 11:40:18 +02:00

Invalid charset at EOF does not cause decoding error

* libguile/ports.c (peek_iconv_codepoint): If the input has no bytes,
there's little point in raising a decoding error here.  Therefore remove
the needless iconv acquisition, harmonising with suspendable-ports.
* test-suite/tests/ports.test ("port-encoding"): Update test to include
some input so that the exception gets raised.
This commit is contained in:
Andy Wingo 2021-03-03 16:05:07 +01:00
parent c802ed4832
commit 5ea8c69e91
2 changed files with 3 additions and 10 deletions

View file

@ -1,4 +1,4 @@
/* Copyright 1995-2001,2003-2004,2006-2019
/* Copyright 1995-2001,2003-2004,2006-2019,2021
Free Software Foundation, Inc.
This file is part of Guile.
@ -1948,14 +1948,7 @@ peek_iconv_codepoint (SCM port, SCM *buf, size_t *cur, size_t *len)
*len = input_size;
if (input_size == 0)
/* Normal EOF. */
{
/* Make sure iconv descriptors have been opened even if
there were no bytes, to be sure that a decoding error
is signalled if the encoding itself was invalid. */
scm_port_acquire_iconv_descriptors (port, NULL, NULL);
scm_port_release_iconv_descriptors (port);
return EOF;
}
return EOF;
/* EOF found in the middle of a multibyte character. */
if (scm_is_eq (SCM_PORT (port)->conversion_strategy,

View file

@ -1314,7 +1314,7 @@
(pass-if-exception "set-port-encoding!, wrong encoding"
exception:miscellaneous-error
(let ((p (open-input-string "")))
(let ((p (open-input-string "q")))
(set-port-encoding! p "does-not-exist")
(read p)))