Use decode_string_utf_8 in emacs-module.c.
Now that decode_string_utf_8 is available, we can use it to signal errors on invalid input. * src/coding.c (syms_of_coding): Move Qutf_8_string_p from json.c since it’s now used outside json.c. * src/emacs-module.c (module_decode_utf_8): New helper function. (module_make_function, module_copy_string_contents): Use it.
This commit is contained in:
parent
41d9d51cf5
commit
3252f31496
3 changed files with 24 additions and 3 deletions
|
@ -11745,6 +11745,8 @@ syms_of_coding (void)
|
|||
|
||||
DEFSYM (Qignored, "ignored");
|
||||
|
||||
DEFSYM (Qutf_8_string_p, "utf-8-string-p");
|
||||
|
||||
defsubr (&Scoding_system_p);
|
||||
defsubr (&Sread_coding_system);
|
||||
defsubr (&Sread_non_nil_coding_system);
|
||||
|
|
|
@ -212,6 +212,25 @@ static bool value_storage_contains_p (const struct emacs_value_storage *,
|
|||
emacs_value, ptrdiff_t *);
|
||||
|
||||
static bool module_assertions = false;
|
||||
|
||||
|
||||
/* Small helper functions. */
|
||||
|
||||
/* Interprets the string at STR with length LEN as UTF-8 string.
|
||||
Signals an error if it's not a valid UTF-8 string. */
|
||||
|
||||
static Lisp_Object
|
||||
module_decode_utf_8 (const char *str, ptrdiff_t len)
|
||||
{
|
||||
/* We set HANDLE-8-BIT and HANDLE-OVER-UNI to nil to signal an error
|
||||
if the argument is not a valid UTF-8 string. While it isn't
|
||||
documented how make_string and make_function behave in this case,
|
||||
signaling an error is the most defensive and obvious reaction. */
|
||||
Lisp_Object s = decode_string_utf_8 (Qnil, str, len, Qnil, false, Qnil, Qnil);
|
||||
CHECK_TYPE (!NILP (s), Qutf_8_string_p, make_string_from_utf8 (str, len));
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
/* Convenience macros for non-local exit handling. */
|
||||
|
||||
|
@ -521,7 +540,8 @@ module_make_function (emacs_env *env, ptrdiff_t min_arity, ptrdiff_t max_arity,
|
|||
function->finalizer = NULL;
|
||||
|
||||
if (docstring)
|
||||
function->documentation = build_string_from_utf8 (docstring);
|
||||
function->documentation
|
||||
= module_decode_utf_8 (docstring, strlen (docstring));
|
||||
|
||||
Lisp_Object result;
|
||||
XSET_MODULE_FUNCTION (result, function);
|
||||
|
@ -694,7 +714,7 @@ module_make_string (emacs_env *env, const char *str, ptrdiff_t len)
|
|||
MODULE_FUNCTION_BEGIN (NULL);
|
||||
if (! (0 <= len && len <= STRING_BYTES_BOUND))
|
||||
overflow_error ();
|
||||
Lisp_Object lstr = make_string_from_utf8 (str, len);
|
||||
Lisp_Object lstr = module_decode_utf_8 (str, len);
|
||||
return lisp_to_value (env, lstr);
|
||||
}
|
||||
|
||||
|
|
|
@ -1121,7 +1121,6 @@ syms_of_json (void)
|
|||
|
||||
DEFSYM (Qstring_without_embedded_nulls_p, "string-without-embedded-nulls-p");
|
||||
DEFSYM (Qjson_value_p, "json-value-p");
|
||||
DEFSYM (Qutf_8_string_p, "utf-8-string-p");
|
||||
|
||||
DEFSYM (Qjson_error, "json-error");
|
||||
DEFSYM (Qjson_out_of_memory, "json-out-of-memory");
|
||||
|
|
Loading…
Add table
Reference in a new issue