2
0
mirror of https://github.com/boostorg/json.git synced 2026-02-09 11:12:37 +00:00
Commit Graph

633 Commits

Author SHA1 Message Date
Dmitry Arkhipov
36552f0c94 remove namespace macros 2023-01-02 18:41:01 +03:00
Dmitry Arkhipov
8659e7d694 value_to supports missing elements for std::optional 2023-01-02 14:09:40 +03:00
Dmitry Arkhipov
a210032263 set_at_pointer 2023-01-02 13:22:28 +03:00
Dmitry Arkhipov
c6508328c8 implement std::hash support via boost::hash 2023-01-02 12:37:41 +03:00
Dmitry Arkhipov
73946424a3 add boost::hash support 2023-01-02 12:37:41 +03:00
Max Kellermann
0f987f07d7 basic_parser: make sentinel() return a unique pointer
Right now, sentinel() casts the `basic_parser` pointer (`this`) to
`const char *`, but that pointer is not unique if the input buffer
happens to be placed right before the `basic_parser_impl` instance -
the end of that buffer then has the same address as `basic_parser`.

Example code:

```
  struct {
    char buffer[8]{"{\"12345\""};
    boost::json::stream_parser p;
  } s;
  s.p.write(s.buffer, sizeof(s.buffer));
  s.p.write(":0}", 3);
```

This stops parsing at the end of the buffer, and then the
`incomplete()` check in `parse_string()` will return true; the second
`write()` call will crash with assertion failure:

> boost/json/basic_parser_impl.hpp:1016: const char* boost::json::basic_parser<Handler>::parse_unescaped(const char*, std::integral_constant<bool, StackEmpty_>, std::integral_constant<bool, AllowComments_>, bool) [with bool StackEmpty_ = true; bool IsKey_ = true; Handler = boost::json::detail::handler]: Assertion `*cs == '\x22'' failed.

This changes `sentinel()` by adding 1 to guaranteed that the sentinel
pointer is unique even if the input buffers borders on this object.
2022-12-30 15:18:00 +01:00
Dmitry Arkhipov
6af3a5e05c guard std::min from windows.h 2022-12-19 22:58:47 +03:00
Dmitry Arkhipov
893df142b6 fix value_from support for proxy iterators 2022-11-20 19:25:35 +03:00
Dmitry Arkhipov
f993635f4d fix pedantic warnings 2022-11-16 22:05:16 +03:00
Dmitry Arkhipov
719aabd087 fix conversion warning on 32 bit platforms 2022-11-11 23:47:48 +03:00
Dmitry Arkhipov
f2b64102cf use another template parameter names
Avoids clash with an X11 define
2022-11-11 23:14:06 +03:00
Dmitry Arkhipov
a708e9f25c pointer_token::iterator is actually an Iterator 2022-11-11 17:48:35 +03:00
Dmitry Arkhipov
4d224096ce refactor operator>>(istream&, value&) 2022-11-06 12:21:56 +03:00
Dmitry Arkhipov
ea45843a3e refactor parse(istream&, ec&) 2022-11-05 19:07:55 +03:00
Dmitry Arkhipov
340442779f parse overload for std::istream 2022-11-05 16:38:29 +03:00
Dmitry Arkhipov
9f20452e05 operator>> for value 2022-11-05 16:37:27 +03:00
Dmitry Arkhipov
77c05d2031 silence msvc-14.0 warning 2022-11-02 17:23:33 +03:00
Dmitry Arkhipov
7d4b9cdefa move operator<< overloads to corresponding headers 2022-10-24 15:48:22 +03:00
Dmitry Arkhipov
77c94f5cd2 rvalue-ref accessors 2022-10-24 14:57:09 +03:00
Dmitry Arkhipov
213726054b fix duplicate word in value docs 2022-10-24 14:56:55 +03:00
Dmitry Arkhipov
69bf0bbb49 replace C fp constants with C++ equivalents 2022-10-22 16:48:59 +03:00
Dmitry Arkhipov
c130202491 add handling for missing error codes 2022-10-21 13:26:23 +03:00
Dmitry Arkhipov
307413405a add forward declarations 2022-10-20 22:57:17 +03:00
Dmitry Arkhipov
76e1dba8ba value_to/from supports described enums 2022-10-20 21:02:48 +03:00
Dmitry Arkhipov
ce2b5f82ac value_to/from supports described structs 2022-10-20 21:02:48 +03:00
Dmitry Arkhipov
fde4e87877 remove generic_category alias 2022-10-19 17:43:19 +03:00
Dmitry Arkhipov
d1ecadde2b error condition for generic library errors 2022-10-19 17:28:32 +03:00
Dmitry Arkhipov
74bac2c749 remove condition::assign_error 2022-10-19 17:28:32 +03:00
Dmitry Arkhipov
413c6725e7 move merge value_traits.hpp into impl/conversion.hpp 2022-10-19 17:25:35 +03:00
Dmitry Arkhipov
33d243e419 move conversion trait implementation into impl 2022-10-19 17:09:42 +03:00
Dmitry Arkhipov
c70369d8a7 include conversion.hpp in json.hpp 2022-10-19 17:07:04 +03:00
Dmitry Arkhipov
f4031f3ef5 use iterator_traits::value_type 2022-10-19 13:45:47 +03:00
Dmitry Arkhipov
6ff132c64c value_to/from supports std::variant 2022-10-18 15:58:30 +03:00
Dmitry Arkhipov
8daa656b5e remove extra parameter from traits 2022-10-18 13:45:06 +03:00
Dmitry Arkhipov
8033159b71 value_to/from supports std::optional 2022-10-16 10:31:59 +03:00
Dmitry Arkhipov
db3675d8c4 result_from_errno 2022-10-15 15:18:50 +03:00
Dmitry Arkhipov
0d8a14c3a1 non-throwing conversions 2022-10-14 17:22:23 +03:00
Dmitry Arkhipov
e14839caf2 fix detail::inserter return type 2022-10-14 17:02:26 +03:00
Dmitry Arkhipov
ce659d1666 don't include value_from.hpp from impl/value_ref.hpp 2022-10-14 17:02:26 +03:00
Dmitry Arkhipov
76de28556a remove standalone source_location macros 2022-10-14 15:13:24 +03:00
Dmitry Arkhipov
9e56532169 support unreachable on older GCC 2022-10-11 12:56:08 +03:00
Dmitry Arkhipov
ce83fcba4d tightening is_sequence_like 2022-09-26 18:22:30 +03:00
Dmitry Arkhipov
d5cb8c38a5 tightening is_map_like 2022-09-26 12:10:00 +03:00
Dmitry Arkhipov
7f10decb61 opt-in null-like conversion 2022-09-26 12:10:00 +03:00
Dmitry Arkhipov
6d4b6dd23e user-facing conversion traits 2022-09-26 12:10:00 +03:00
Dmitry Arkhipov
4d16a31985 same requirements for value_to and value_from 2022-09-26 12:10:00 +03:00
Dmitry Arkhipov
59273f4e90 check for round-trip 2022-09-26 12:10:00 +03:00
Dmitry Arkhipov
2661972661 remove conversion from value_ref 2022-09-26 12:10:00 +03:00
Dmitry Arkhipov
3ccb526ee7 conversion to nullptr_t 2022-09-26 12:10:00 +03:00
Dmitry Arkhipov
b2d5b864ff refactor conversion
* take advantage of mp11
* split container_traits into several traits and helpers
* split map_traits into several traits
* use value_type more consistently
* refactor detail::inserter
* use detail::inserter with map-like types
* refactor conversion of tuple-like to array
* require unique keys for ToMapLike types (without it multimaps don't
  round-trip)
2022-09-26 12:10:00 +03:00