summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/bplist.c2
-rw-r--r--tools/plistutil.c17
2 files changed, 18 insertions, 1 deletions
diff --git a/src/bplist.c b/src/bplist.c
index 254c0ff..8d50f2e 100644
--- a/src/bplist.c
+++ b/src/bplist.c
@@ -831,7 +831,7 @@ static plist_t parse_bin_node_at_index(struct bplist_data *bplist, uint32_t node
void *node_level = ptr_array_index(bplist->used_indexes, bplist->level);
if (node_i == node_level) {
PLIST_BIN_ERR("recursion detected in binary plist\n");
- bplist->err = PLIST_ERR_PARSE;
+ bplist->err = PLIST_ERR_CIRCULAR_REF;
return NULL;
}
}
diff --git a/tools/plistutil.c b/tools/plistutil.c
index 7e4eb67..c984da2 100644
--- a/tools/plistutil.c
+++ b/tools/plistutil.c
@@ -357,6 +357,14 @@ int main(int argc, char *argv[])
switch (output_res) {
case PLIST_ERR_SUCCESS:
break;
+ case PLIST_ERR_CIRCULAR_REF:
+ fprintf(stderr, "ERROR: Circular reference detected.\n");
+ ret = 5;
+ break;
+ case PLIST_ERR_MAX_NESTING:
+ fprintf(stderr, "ERROR: Output plist data exceeds maximum nesting depth.\n");
+ ret = 4;
+ break;
case PLIST_ERR_FORMAT:
fprintf(stderr, "ERROR: Input plist data is not compatible with output format.\n");
ret = 2;
@@ -364,6 +372,7 @@ int main(int argc, char *argv[])
default:
fprintf(stderr, "ERROR: Failed to convert plist data (%d)\n", output_res);
ret = 1;
+ break;
}
} else {
switch (input_res) {
@@ -375,6 +384,14 @@ int main(int argc, char *argv[])
}
ret = 3;
break;
+ case PLIST_ERR_CIRCULAR_REF:
+ fprintf(stderr, "ERROR: Circular reference detected in input plist data.\n");
+ ret = 5;
+ break;
+ case PLIST_ERR_MAX_NESTING:
+ fprintf(stderr, "ERROR: Input plist data exceeds maximum nesting depth.\n");
+ ret = 4;
+ break;
default:
fprintf(stderr, "ERROR: Could not parse plist data (%d)\n", input_res);
ret = 1;