Skip to content

Commit 9759a4c

Browse files
authored
Warn when attempting to resolve a schema without identifiers (#311)
Signed-off-by: Juan Cruz Viotti <[email protected]>
1 parent b800283 commit 9759a4c

File tree

6 files changed

+62
-6
lines changed

6 files changed

+62
-6
lines changed

DEPENDENCIES

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
vendorpull https://github.com/sourcemeta/vendorpull dea311b5bfb53b6926a4140267959ae334d3ecf4
2-
core https://github.com/sourcemeta/core dfc6083428219aa07f5b05da377ddd910d0518b0
2+
core https://github.com/sourcemeta/core ca03804875d4f7485fcf9ac04846cf382136b919
33
hydra https://github.com/sourcemeta/hydra a67b879df800e834ed8a2d056f98398f7211d870
44
jsonbinpack https://github.com/sourcemeta/jsonbinpack 7028964423b96755c4ea6869aa7bc439650ceecd
55
blaze https://github.com/sourcemeta/blaze b35d9b34806ae6dcc7b58c1d4b943b0877f8afa7

src/utils.cc

+14-2
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,13 @@ auto resolver(const std::map<std::string, std::vector<std::string>> &options,
328328
parse_extensions(options))) {
329329
log_verbose(options) << "Importing schema into the resolution context: "
330330
<< entry.first.string() << "\n";
331-
dynamic_resolver.add(entry.second, default_dialect);
331+
const auto result = dynamic_resolver.add(entry.second, default_dialect);
332+
if (!result) {
333+
std::cerr
334+
<< "warning: No schema resources were imported from this file\n";
335+
std::cerr << " at " << entry.first.string() << "\n";
336+
std::cerr << "Are you sure this schema sets any identifiers?\n";
337+
}
332338
}
333339
}
334340

@@ -338,7 +344,13 @@ auto resolver(const std::map<std::string, std::vector<std::string>> &options,
338344
parse_extensions(options))) {
339345
log_verbose(options) << "Importing schema into the resolution context: "
340346
<< entry.first.string() << "\n";
341-
dynamic_resolver.add(entry.second, default_dialect);
347+
const auto result = dynamic_resolver.add(entry.second, default_dialect);
348+
if (!result) {
349+
std::cerr
350+
<< "warning: No schema resources were imported from this file\n";
351+
std::cerr << " at " << entry.first.string() << "\n";
352+
std::cerr << "Are you sure this schema sets any identifiers?\n";
353+
}
342354
}
343355
}
344356

test/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ add_jsonschema_test_unix(validate/pass_trace)
5555
add_jsonschema_test_unix(validate/pass_trace_fast)
5656
add_jsonschema_test_unix(validate/pass_resolve)
5757
add_jsonschema_test_unix(validate/pass_resolve_custom_extension)
58+
add_jsonschema_test_unix(validate/pass_resolve_without_identifier)
5859
add_jsonschema_test_unix(validate/pass_resolve_verbose)
5960
add_jsonschema_test_unix(validate/pass_verbose)
6061
add_jsonschema_test_unix(validate/pass_draft4)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
#!/bin/sh
2+
3+
set -o errexit
4+
set -o nounset
5+
6+
TMP="$(mktemp -d)"
7+
clean() { rm -rf "$TMP"; }
8+
trap clean EXIT
9+
10+
cat << 'EOF' > "$TMP/schema.json"
11+
{
12+
"$schema": "http://json-schema.org/draft-04/schema#",
13+
"type": "string"
14+
}
15+
EOF
16+
17+
cat << 'EOF' > "$TMP/instance.json"
18+
"foo"
19+
EOF
20+
21+
cat << 'EOF' > "$TMP/no-id.json"
22+
{
23+
"$schema": "http://json-schema.org/draft-04/schema#",
24+
"type": "boolean"
25+
}
26+
EOF
27+
28+
"$1" validate "$TMP/schema.json" "$TMP/instance.json" \
29+
--resolve "$TMP/no-id.json" 2>"$TMP/stderr.txt"
30+
31+
cat << EOF > "$TMP/expected.txt"
32+
warning: No schema resources were imported from this file
33+
at $(realpath "$TMP")/no-id.json
34+
Are you sure this schema sets any identifiers?
35+
EOF
36+
37+
diff "$TMP/stderr.txt" "$TMP/expected.txt"

vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_resolver.h

+3-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/core/src/core/jsonschema/resolver.cc

+6-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)