summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKirill Simonov <xi@resolvent.net>2016-06-26 22:28:25 -0500
committerKirill Simonov <xi@resolvent.net>2016-06-26 22:28:25 -0500
commite4e25e557198bcf5a1976b667fb9e6f999196114 (patch)
treebdefda5af9f460625dee057b14bb93b9dd729b71
parent90b3c57b68afa50346cd2142cc9ad8bedb57270d (diff)
downloadlibyaml-hg-e4e25e557198bcf5a1976b667fb9e6f999196114.tar.gz
Examples: prevent crashes on some input files (thank to Mathias Svensson).
-rw-r--r--tests/run-dumper.c15
-rw-r--r--tests/run-emitter.c4
2 files changed, 10 insertions, 9 deletions
diff --git a/tests/run-dumper.c b/tests/run-dumper.c
index 41bead4..390d982 100644
--- a/tests/run-dumper.c
+++ b/tests/run-dumper.c
@@ -77,8 +77,9 @@ error:
}
int compare_nodes(yaml_document_t *document1, int index1,
- yaml_document_t *document2, int index2)
+ yaml_document_t *document2, int index2, int level)
{
+ if (level++ > 1000) return 0;
yaml_node_t *node1 = yaml_document_get_node(document1, index1);
yaml_node_t *node2 = yaml_document_get_node(document2, index2);
int k;
@@ -104,7 +105,7 @@ int compare_nodes(yaml_document_t *document1, int index1,
return 0;
for (k = 0; k < (node1->data.sequence.items.top - node1->data.sequence.items.start); k ++) {
if (!compare_nodes(document1, node1->data.sequence.items.start[k],
- document2, node2->data.sequence.items.start[k])) return 0;
+ document2, node2->data.sequence.items.start[k], level)) return 0;
}
break;
case YAML_MAPPING_NODE:
@@ -113,9 +114,9 @@ int compare_nodes(yaml_document_t *document1, int index1,
return 0;
for (k = 0; k < (node1->data.mapping.pairs.top - node1->data.mapping.pairs.start); k ++) {
if (!compare_nodes(document1, node1->data.mapping.pairs.start[k].key,
- document2, node2->data.mapping.pairs.start[k].key)) return 0;
+ document2, node2->data.mapping.pairs.start[k].key, level)) return 0;
if (!compare_nodes(document1, node1->data.mapping.pairs.start[k].value,
- document2, node2->data.mapping.pairs.start[k].value)) return 0;
+ document2, node2->data.mapping.pairs.start[k].value, level)) return 0;
}
break;
default:
@@ -152,7 +153,7 @@ int compare_documents(yaml_document_t *document1, yaml_document_t *document2)
return 0;
if (document1->nodes.top != document1->nodes.start) {
- if (!compare_nodes(document1, 1, document2, 1))
+ if (!compare_nodes(document1, 1, document2, 1, 0))
return 0;
}
@@ -226,7 +227,7 @@ main(int argc, char *argv[])
yaml_emitter_t emitter;
yaml_document_t document;
- unsigned char buffer[BUFFER_SIZE];
+ unsigned char buffer[BUFFER_SIZE+1];
size_t written = 0;
yaml_document_t documents[MAX_DOCUMENTS];
size_t document_number = 0;
@@ -234,7 +235,7 @@ main(int argc, char *argv[])
int count = 0;
int error = 0;
int k;
- memset(buffer, 0, BUFFER_SIZE);
+ memset(buffer, 0, BUFFER_SIZE+1);
memset(documents, 0, MAX_DOCUMENTS*sizeof(yaml_document_t));
printf("[%d] Loading, dumping, and loading again '%s': ", number, argv[number]);
diff --git a/tests/run-emitter.c b/tests/run-emitter.c
index 6b246fa..d13f29c 100644
--- a/tests/run-emitter.c
+++ b/tests/run-emitter.c
@@ -251,7 +251,7 @@ main(int argc, char *argv[])
yaml_parser_t parser;
yaml_emitter_t emitter;
yaml_event_t event;
- unsigned char buffer[BUFFER_SIZE];
+ unsigned char buffer[BUFFER_SIZE+1];
size_t written = 0;
yaml_event_t events[MAX_EVENTS];
size_t event_number = 0;
@@ -259,7 +259,7 @@ main(int argc, char *argv[])
int count = 0;
int error = 0;
int k;
- memset(buffer, 0, BUFFER_SIZE);
+ memset(buffer, 0, BUFFER_SIZE+1);
memset(events, 0, MAX_EVENTS*sizeof(yaml_event_t));
printf("[%d] Parsing, emitting, and parsing again '%s': ", number, argv[number]);