diff options
author | Ryan Moeller <[email protected]> | 2021-06-04 15:53:44 -0400 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2021-06-09 13:05:34 -0700 |
commit | e298695809646fc455e5434261f8e09e3c62895f (patch) | |
tree | b99ab1d9e65885f376642a07c99781439fc40442 | |
parent | c650ceb64d59331845d64f40961b5171bd2ab5d2 (diff) |
Fix error check in nvlist_print_json_string
Move check for errors from mbrtowc() into the loop. The error values
are not actually negative, so we don't break out of the loop when they
are encountered.
Reviewed-by: Tony Nguyen <[email protected]>
Reviewed-by: John Kennedy <[email protected]>
Signed-off-by: Ryan Moeller <[email protected]>
Closes #12175
Closes #12176
-rw-r--r-- | lib/libnvpair/libnvpair_json.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/lib/libnvpair/libnvpair_json.c b/lib/libnvpair/libnvpair_json.c index 37a392391..15b6f4afa 100644 --- a/lib/libnvpair/libnvpair_json.c +++ b/lib/libnvpair/libnvpair_json.c @@ -54,6 +54,13 @@ nvlist_print_json_string(FILE *fp, const char *input) FPRINTF(fp, "\""); while ((sz = mbrtowc(&c, input, MB_CUR_MAX, &mbr)) > 0) { + if (sz == (size_t)-1 || sz == (size_t)-2) { + /* + * We last read an invalid multibyte character sequence, + * so return an error. + */ + return (-1); + } switch (c) { case '"': FPRINTF(fp, "\\\""); @@ -97,14 +104,6 @@ nvlist_print_json_string(FILE *fp, const char *input) input += sz; } - if (sz == (size_t)-1 || sz == (size_t)-2) { - /* - * We last read an invalid multibyte character sequence, - * so return an error. - */ - return (-1); - } - FPRINTF(fp, "\""); return (0); } |