Skip to content

Commit c8b5efc

Browse files
authored
Merge branch 'master' into feat/reading_writing_20250527
2 parents fe2c15d + b511d9e commit c8b5efc

File tree

12 files changed

+140
-35
lines changed

12 files changed

+140
-35
lines changed

.clang-tidy

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
Checks: 'google-readability-casting,modernize-deprecated-headers,modernize-loop-convert,modernize-use-auto,modernize-use-default-member-init,modernize-use-using,readability-else-after-return,readability-redundant-member-init,readability-redundant-string-cstr'
33
WarningsAsErrors: ''
44
HeaderFilterRegex: ''
5-
AnalyzeTemporaryDtors: false
65
FormatStyle: none
76
CheckOptions:
87
- key: modernize-use-using.IgnoreMacros

BUILD.bazel

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,29 @@
11
licenses(["unencumbered"]) # Public Domain or MIT
22

3+
load("@bazel_skylib//rules:common_settings.bzl", "bool_flag")
4+
35
exports_files(["LICENSE"])
46

7+
bool_flag(
8+
name = "use_exception",
9+
build_setting_default = False,
10+
)
11+
12+
config_setting(
13+
name = "use_exception_cfg",
14+
flag_values = {":use_exception": "true"},
15+
)
16+
17+
bool_flag(
18+
name = "has_int64",
19+
build_setting_default = True,
20+
)
21+
22+
config_setting(
23+
name = "has_int64_cfg",
24+
flag_values = {":has_int64": "true"},
25+
)
26+
527
cc_library(
628
name = "jsoncpp",
729
srcs = [
@@ -22,10 +44,13 @@ cc_library(
2244
"include/json/version.h",
2345
"include/json/writer.h",
2446
],
25-
copts = [
26-
"-DJSON_USE_EXCEPTION=0",
27-
"-DJSON_HAS_INT64",
28-
],
47+
defines = select({
48+
":use_exception_cfg": ["JSON_USE_EXCEPTION=1"],
49+
"//conditions:default": ["JSON_USE_EXCEPTION=0"],
50+
}) + select({
51+
":has_int64_cfg": ["JSON_HAS_INT64"],
52+
"//conditions:default": [],
53+
}),
2954
includes = ["include"],
3055
visibility = ["//visibility:public"],
3156
deps = [":private"],

MODULE.bazel

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,8 @@ module(
1212
version = "1.9.7",
1313
compatibility_level = 1,
1414
)
15+
16+
bazel_dep(
17+
name = "bazel_skylib",
18+
version = "1.7.1",
19+
)

README.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# JsonCpp
22

3-
[![badge](https://img.shields.io/badge/conan.io-jsoncpp%2F1.8.0-green.svg?logo=data:image/png;base64%2CiVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAMAAAAolt3jAAAA1VBMVEUAAABhlctjlstkl8tlmMtlmMxlmcxmmcxnmsxpnMxpnM1qnc1sn85voM91oM11oc1xotB2oc56pNF6pNJ2ptJ8ptJ8ptN9ptN8p9N5qNJ9p9N9p9R8qtOBqdSAqtOAqtR%2BrNSCrNJ/rdWDrNWCsNWCsNaJs9eLs9iRvNuVvdyVv9yXwd2Zwt6axN6dxt%2Bfx%2BChyeGiyuGjyuCjyuGly%2BGlzOKmzOGozuKoz%2BKqz%2BOq0OOv1OWw1OWw1eWx1eWy1uay1%2Baz1%2Baz1%2Bez2Oe02Oe12ee22ujUGwH3AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfgBQkREyOxFIh/AAAAiklEQVQI12NgAAMbOwY4sLZ2NtQ1coVKWNvoc/Eq8XDr2wB5Ig62ekza9vaOqpK2TpoMzOxaFtwqZua2Bm4makIM7OzMAjoaCqYuxooSUqJALjs7o4yVpbowvzSUy87KqSwmxQfnsrPISyFzWeWAXCkpMaBVIC4bmCsOdgiUKwh3JojLgAQ4ZCE0AMm2D29tZwe6AAAAAElFTkSuQmCC)](https://bintray.com/theirix/conan-repo/jsoncpp%3Atheirix)
3+
[![Conan Center](https://img.shields.io/conan/v/jsoncpp)](https://conan.io/center/recipes/jsoncpp)
44
[![badge](https://img.shields.io/badge/license-MIT-blue)](https://github.com/open-source-parsers/jsoncpp/blob/master/LICENSE)
55
[![badge](https://img.shields.io/badge/document-doxygen-brightgreen)](http://open-source-parsers.github.io/jsoncpp-docs/doxygen/index.html)
66
[![Coverage Status](https://coveralls.io/repos/github/open-source-parsers/jsoncpp/badge.svg?branch=master)](https://coveralls.io/github/open-source-parsers/jsoncpp?branch=master)
@@ -52,6 +52,14 @@ You can download and install JsonCpp using the [vcpkg](https://github.com/Micros
5252

5353
The JsonCpp port in vcpkg is kept up to date by Microsoft team members and community contributors. If the version is out of date, please [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg repository.
5454

55+
### Conan package manager
56+
57+
You can download and install JsonCpp using the [Conan](https://conan.io/) package manager:
58+
59+
conan install -r conancenter --requires="jsoncpp/[*]" --build=missing
60+
61+
The JsonCpp package in Conan Center is kept up to date by [ConanCenterIndex](https://github.com/conan-io/conan-center-index) contributors. If the version is out of date, please create an issue or pull request on the Conan Center Index repository.
62+
5563
### Amalgamated source
5664
https://github.com/open-source-parsers/jsoncpp/wiki/Amalgamated-(Possibly-outdated)
5765

src/jsontestrunner/BUILD.bazel

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
cc_binary(
2+
name = "jsontestrunner",
3+
srcs = ["main.cpp"],
4+
deps = ["//:jsoncpp"],
5+
visibility = ["//test:__pkg__"],
6+
)

src/lib_json/json_reader.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include <cstring>
1717
#include <iostream>
1818
#include <istream>
19+
#include <iterator>
1920
#include <limits>
2021
#include <memory>
2122
#include <set>
@@ -143,7 +144,12 @@ bool Reader::readValue() {
143144
// after calling readValue(). parse() executes one nodes_.push(), so > instead
144145
// of >=.
145146
if (nodes_.size() > stackLimit_g)
147+
#if JSON_USE_EXCEPTION
146148
throwRuntimeError("Exceeded stackLimit in readValue().");
149+
#else
150+
// throwRuntimeError aborts. Don't abort here.
151+
return false;
152+
#endif
147153

148154
Token token;
149155
readTokenSkippingComments(token);

src/test_lib_json/BUILD.bazel

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
cc_test(
2+
name = "jsoncpp_test",
3+
srcs = [
4+
"jsontest.cpp",
5+
"jsontest.h",
6+
"main.cpp",
7+
"fuzz.h",
8+
"fuzz.cpp",
9+
],
10+
deps = ["//:jsoncpp"],
11+
)

src/test_lib_json/fuzz.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,6 @@
1111
#include <memory>
1212
#include <string>
1313

14-
namespace Json {
15-
class Exception;
16-
}
17-
1814
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
1915
Json::CharReaderBuilder builder;
2016

@@ -45,10 +41,14 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
4541

4642
Json::Value root;
4743
const auto data_str = reinterpret_cast<const char*>(data);
44+
#if JSON_USE_EXCEPTION
4845
try {
46+
#endif // JSON_USE_EXCEPTION
4947
reader->parse(data_str, data_str + size, &root, nullptr);
48+
#if JSON_USE_EXCEPTION
5049
} catch (Json::Exception const&) {
5150
}
51+
#endif // JSON_USE_EXCEPTION
5252
// Whether it succeeded or not doesn't matter.
5353
return 0;
5454
}

src/test_lib_json/jsontest.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,8 @@ TestResult& checkStringEqual(TestResult& result, const Json::String& expected,
228228
JsonTest::ToJsonString(actual), __FILE__, \
229229
__LINE__, #expected " == " #actual)
230230

231+
#if JSON_USE_EXCEPTION
232+
231233
/// \brief Asserts that a given expression throws an exception
232234
#define JSONTEST_ASSERT_THROWS(expr) \
233235
do { \
@@ -242,6 +244,8 @@ TestResult& checkStringEqual(TestResult& result, const Json::String& expected,
242244
"expected exception thrown: " #expr); \
243245
} while (0)
244246

247+
#endif // JSON_USE_EXCEPTION
248+
245249
/// \brief Begin a fixture test case.
246250
#define JSONTEST_FIXTURE(FixtureType, name) \
247251
class Test##FixtureType##name : public FixtureType { \

src/test_lib_json/main.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1888,7 +1888,7 @@ JSONTEST_FIXTURE_LOCAL(ValueTest, typeChecksThrowExceptions) {
18881888
JSONTEST_ASSERT_THROWS(objVal.asBool());
18891889
JSONTEST_ASSERT_THROWS(arrVal.asBool());
18901890

1891-
#endif
1891+
#endif // JSON_USE_EXCEPTION
18921892
}
18931893

18941894
JSONTEST_FIXTURE_LOCAL(ValueTest, offsetAccessors) {
@@ -3323,6 +3323,8 @@ JSONTEST_FIXTURE_LOCAL(CharReaderTest, parseWithDetailError) {
33233323
}
33243324

33253325
JSONTEST_FIXTURE_LOCAL(CharReaderTest, parseWithStackLimit) {
3326+
#if JSON_USE_EXCEPTION
3327+
33263328
Json::CharReaderBuilder b;
33273329
Json::Value root;
33283330
char const doc[] = R"({ "property" : "value" })";
@@ -3342,6 +3344,8 @@ JSONTEST_FIXTURE_LOCAL(CharReaderTest, parseWithStackLimit) {
33423344
JSONTEST_ASSERT_THROWS(
33433345
reader->parse(doc, doc + std::strlen(doc), &root, &errs));
33443346
}
3347+
3348+
#endif // JSON_USE_EXCEPTION
33453349
}
33463350

33473351
JSONTEST_FIXTURE_LOCAL(CharReaderTest, testOperator) {
@@ -3961,6 +3965,8 @@ JSONTEST_FIXTURE_LOCAL(IteratorTest, indexes) {
39613965
}
39623966

39633967
JSONTEST_FIXTURE_LOCAL(IteratorTest, constness) {
3968+
#if JSON_USE_EXCEPTION
3969+
39643970
Json::Value const v;
39653971
JSONTEST_ASSERT_THROWS(
39663972
Json::Value::iterator it(v.begin())); // Compile, but throw.
@@ -3982,6 +3988,8 @@ JSONTEST_FIXTURE_LOCAL(IteratorTest, constness) {
39823988
}
39833989
Json::String expected = R"(" 9","10","11",)";
39843990
JSONTEST_ASSERT_STRING_EQUAL(expected, out.str());
3991+
3992+
#endif // JSON_USE_EXCEPTION
39853993
}
39863994

39873995
struct RValueTest : JsonTest::TestCase {};

0 commit comments

Comments
 (0)