diff options
| -rw-r--r-- | src/bplist.c | 2 | ||||
| -rw-r--r-- | tools/plistutil.c | 17 |
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; |
