Skip to content
Snippets Groups Projects
Commit 6430d0c77d17 authored by Kirill Simonov's avatar Kirill Simonov
Browse files

Examples: prevent crashes on some input files (thank to Mathias Svensson).

parent 2e9380b48837
No related branches found
No related tags found
No related merge requests found
...@@ -77,5 +77,5 @@ ...@@ -77,5 +77,5 @@
} }
int compare_nodes(yaml_document_t *document1, int index1, int compare_nodes(yaml_document_t *document1, int index1,
yaml_document_t *document2, int index2) yaml_document_t *document2, int index2, int level)
{ {
...@@ -81,4 +81,5 @@ ...@@ -81,4 +81,5 @@
{ {
if (level++ > 1000) return 0;
yaml_node_t *node1 = yaml_document_get_node(document1, index1); yaml_node_t *node1 = yaml_document_get_node(document1, index1);
yaml_node_t *node2 = yaml_document_get_node(document2, index2); yaml_node_t *node2 = yaml_document_get_node(document2, index2);
int k; int k;
...@@ -104,7 +105,7 @@ ...@@ -104,7 +105,7 @@
return 0; return 0;
for (k = 0; k < (node1->data.sequence.items.top - node1->data.sequence.items.start); k ++) { 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], 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; break;
case YAML_MAPPING_NODE: case YAML_MAPPING_NODE:
...@@ -113,5 +114,5 @@ ...@@ -113,5 +114,5 @@
return 0; return 0;
for (k = 0; k < (node1->data.mapping.pairs.top - node1->data.mapping.pairs.start); k ++) { 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, 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, if (!compare_nodes(document1, node1->data.mapping.pairs.start[k].value,
...@@ -117,5 +118,5 @@ ...@@ -117,5 +118,5 @@
if (!compare_nodes(document1, node1->data.mapping.pairs.start[k].value, 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; break;
default: default:
...@@ -152,7 +153,7 @@ ...@@ -152,7 +153,7 @@
return 0; return 0;
if (document1->nodes.top != document1->nodes.start) { if (document1->nodes.top != document1->nodes.start) {
if (!compare_nodes(document1, 1, document2, 1)) if (!compare_nodes(document1, 1, document2, 1, 0))
return 0; return 0;
} }
...@@ -226,7 +227,7 @@ ...@@ -226,7 +227,7 @@
yaml_emitter_t emitter; yaml_emitter_t emitter;
yaml_document_t document; yaml_document_t document;
unsigned char buffer[BUFFER_SIZE]; unsigned char buffer[BUFFER_SIZE+1];
size_t written = 0; size_t written = 0;
yaml_document_t documents[MAX_DOCUMENTS]; yaml_document_t documents[MAX_DOCUMENTS];
size_t document_number = 0; size_t document_number = 0;
...@@ -234,7 +235,7 @@ ...@@ -234,7 +235,7 @@
int count = 0; int count = 0;
int error = 0; int error = 0;
int k; int k;
memset(buffer, 0, BUFFER_SIZE); memset(buffer, 0, BUFFER_SIZE+1);
memset(documents, 0, MAX_DOCUMENTS*sizeof(yaml_document_t)); memset(documents, 0, MAX_DOCUMENTS*sizeof(yaml_document_t));
printf("[%d] Loading, dumping, and loading again '%s': ", number, argv[number]); printf("[%d] Loading, dumping, and loading again '%s': ", number, argv[number]);
......
...@@ -251,7 +251,7 @@ ...@@ -251,7 +251,7 @@
yaml_parser_t parser; yaml_parser_t parser;
yaml_emitter_t emitter; yaml_emitter_t emitter;
yaml_event_t event; yaml_event_t event;
unsigned char buffer[BUFFER_SIZE]; unsigned char buffer[BUFFER_SIZE+1];
size_t written = 0; size_t written = 0;
yaml_event_t events[MAX_EVENTS]; yaml_event_t events[MAX_EVENTS];
size_t event_number = 0; size_t event_number = 0;
...@@ -259,7 +259,7 @@ ...@@ -259,7 +259,7 @@
int count = 0; int count = 0;
int error = 0; int error = 0;
int k; int k;
memset(buffer, 0, BUFFER_SIZE); memset(buffer, 0, BUFFER_SIZE+1);
memset(events, 0, MAX_EVENTS*sizeof(yaml_event_t)); memset(events, 0, MAX_EVENTS*sizeof(yaml_event_t));
printf("[%d] Parsing, emitting, and parsing again '%s': ", number, argv[number]); printf("[%d] Parsing, emitting, and parsing again '%s': ", number, argv[number]);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment