mirror of
https://github.com/neovim/neovim.git
synced 2025-09-10 21:38:19 +00:00
@@ -7,6 +7,7 @@
|
|||||||
#include <msgpack.h>
|
#include <msgpack.h>
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
#include "nvim/eval/encode.h"
|
#include "nvim/eval/encode.h"
|
||||||
#include "nvim/buffer_defs.h" // vimconv_T
|
#include "nvim/buffer_defs.h" // vimconv_T
|
||||||
@@ -827,9 +828,23 @@ DEFINE_VIML_CONV_FUNCTIONS(, echo, garray_T *const, gap)
|
|||||||
#undef CONV_FLOAT
|
#undef CONV_FLOAT
|
||||||
#define CONV_FLOAT(flt) \
|
#define CONV_FLOAT(flt) \
|
||||||
do { \
|
do { \
|
||||||
char numbuf[NUMBUFLEN]; \
|
const float_T flt_ = (flt); \
|
||||||
vim_snprintf(numbuf, NUMBUFLEN - 1, "%g", (flt)); \
|
switch (fpclassify(flt_)) { \
|
||||||
ga_concat(gap, numbuf); \
|
case FP_NAN: { \
|
||||||
|
EMSG(_("E474: Unable to represent NaN value in JSON")); \
|
||||||
|
return FAIL; \
|
||||||
|
} \
|
||||||
|
case FP_INFINITE: { \
|
||||||
|
EMSG(_("E474: Unable to represent infinity in JSON")); \
|
||||||
|
return FAIL; \
|
||||||
|
} \
|
||||||
|
default: { \
|
||||||
|
char numbuf[NUMBUFLEN]; \
|
||||||
|
vim_snprintf(numbuf, NUMBUFLEN - 1, "%g", flt_); \
|
||||||
|
ga_concat(gap, (char_u *) numbuf); \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
/// Last used p_enc value
|
/// Last used p_enc value
|
||||||
|
@@ -472,6 +472,15 @@ describe('json_encode() function', function()
|
|||||||
eq('1.0e50', eval('json_encode(1.0e50)'))
|
eq('1.0e50', eval('json_encode(1.0e50)'))
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it('fails to dump NaN and infinite values', function()
|
||||||
|
eq('Vim(call):E474: Unable to represent NaN value in JSON',
|
||||||
|
exc_exec('call json_encode(str2float("nan"))'))
|
||||||
|
eq('Vim(call):E474: Unable to represent infinity in JSON',
|
||||||
|
exc_exec('call json_encode(str2float("inf"))'))
|
||||||
|
eq('Vim(call):E474: Unable to represent infinity in JSON',
|
||||||
|
exc_exec('call json_encode(-str2float("inf"))'))
|
||||||
|
end)
|
||||||
|
|
||||||
it('dumps lists', function()
|
it('dumps lists', function()
|
||||||
eq('[]', funcs.json_encode({}))
|
eq('[]', funcs.json_encode({}))
|
||||||
eq('[[]]', funcs.json_encode({{}}))
|
eq('[[]]', funcs.json_encode({{}}))
|
||||||
|
Reference in New Issue
Block a user