mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-05-05 23:50:06 +00:00
add xml error checking
This commit is contained in:
parent
a44e6c0891
commit
41557506e1
@ -403,6 +403,10 @@ SWITCH_DECLARE(const char *) switch_xml_attr(switch_xml_t xml, const char *attr)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!root->attr) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; root->attr[i] && xml->name && strcmp(xml->name, root->attr[i][0]); i++);
|
for (i = 0; root->attr[i] && xml->name && strcmp(xml->name, root->attr[i][0]); i++);
|
||||||
if (!root->attr[i])
|
if (!root->attr[i])
|
||||||
return NULL; /* no matching default attributes */
|
return NULL; /* no matching default attributes */
|
||||||
@ -451,6 +455,9 @@ SWITCH_DECLARE(const char **) switch_xml_pi(switch_xml_t xml, const char *target
|
|||||||
return (const char **) SWITCH_XML_NIL;
|
return (const char **) SWITCH_XML_NIL;
|
||||||
while (root->xml.parent)
|
while (root->xml.parent)
|
||||||
root = (switch_xml_root_t) root->xml.parent; /* root tag */
|
root = (switch_xml_root_t) root->xml.parent; /* root tag */
|
||||||
|
if (!root || !root->pi) {
|
||||||
|
return (const char **) SWITCH_XML_NIL;
|
||||||
|
}
|
||||||
while (root->pi[i] && strcmp(target, root->pi[i][0]))
|
while (root->pi[i] && strcmp(target, root->pi[i][0]))
|
||||||
i++; /* find target */
|
i++; /* find target */
|
||||||
return (const char **) ((root->pi[i]) ? root->pi[i] + 1 : SWITCH_XML_NIL);
|
return (const char **) ((root->pi[i]) ? root->pi[i] + 1 : SWITCH_XML_NIL);
|
||||||
@ -463,6 +470,10 @@ static switch_xml_t switch_xml_err(switch_xml_root_t root, char *s, const char *
|
|||||||
int line = 1;
|
int line = 1;
|
||||||
char *t, fmt[SWITCH_XML_ERRL];
|
char *t, fmt[SWITCH_XML_ERRL];
|
||||||
|
|
||||||
|
if (!root || !root->s) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
for (t = root->s; t && t < s; t++)
|
for (t = root->s; t && t < s; t++)
|
||||||
if (*t == '\n')
|
if (*t == '\n')
|
||||||
line++;
|
line++;
|
||||||
@ -578,7 +589,13 @@ static char *switch_xml_decode(char *s, char **ent, char t)
|
|||||||
/* called when parser finds start of new tag */
|
/* called when parser finds start of new tag */
|
||||||
static void switch_xml_open_tag(switch_xml_root_t root, char *name, char **attr)
|
static void switch_xml_open_tag(switch_xml_root_t root, char *name, char **attr)
|
||||||
{
|
{
|
||||||
switch_xml_t xml = root->cur;
|
switch_xml_t xml;
|
||||||
|
|
||||||
|
if (!root || !root->cur) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
xml = root->cur;
|
||||||
|
|
||||||
if (xml->name)
|
if (xml->name)
|
||||||
xml = switch_xml_add_child(xml, name, strlen(xml->txt));
|
xml = switch_xml_add_child(xml, name, strlen(xml->txt));
|
||||||
@ -592,10 +609,16 @@ static void switch_xml_open_tag(switch_xml_root_t root, char *name, char **attr)
|
|||||||
/* called when parser finds character content between open and closing tag */
|
/* called when parser finds character content between open and closing tag */
|
||||||
static void switch_xml_char_content(switch_xml_root_t root, char *s, switch_size_t len, char t)
|
static void switch_xml_char_content(switch_xml_root_t root, char *s, switch_size_t len, char t)
|
||||||
{
|
{
|
||||||
switch_xml_t xml = root->cur;
|
switch_xml_t xml;
|
||||||
char *m = s;
|
char *m = s;
|
||||||
switch_size_t l;
|
switch_size_t l;
|
||||||
|
|
||||||
|
if (!root || !root->cur) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
xml = root->cur;
|
||||||
|
|
||||||
if (!xml || !xml->name || !len)
|
if (!xml || !xml->name || !len)
|
||||||
return; /* sanity check */
|
return; /* sanity check */
|
||||||
|
|
||||||
@ -632,7 +655,7 @@ static void switch_xml_char_content(switch_xml_root_t root, char *s, switch_size
|
|||||||
/* called when parser finds closing tag */
|
/* called when parser finds closing tag */
|
||||||
static switch_xml_t switch_xml_close_tag(switch_xml_root_t root, char *name, char *s)
|
static switch_xml_t switch_xml_close_tag(switch_xml_root_t root, char *name, char *s)
|
||||||
{
|
{
|
||||||
if (!root->cur || !root->cur->name || strcmp(name, root->cur->name))
|
if (!root || !root->cur || !root->cur->name || strcmp(name, root->cur->name))
|
||||||
return switch_xml_err(root, s, "unexpected closing tag </%s>", name);
|
return switch_xml_err(root, s, "unexpected closing tag </%s>", name);
|
||||||
|
|
||||||
root->cur = root->cur->parent;
|
root->cur = root->cur->parent;
|
||||||
@ -681,7 +704,7 @@ static void switch_xml_proc_inst(switch_xml_root_t root, char *s, switch_size_t
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!root->pi[0]) {
|
if (!root->pi || !root->pi[0]) {
|
||||||
root->pi = (char ***) malloc(sizeof(char **));
|
root->pi = (char ***) malloc(sizeof(char **));
|
||||||
if (!root->pi)
|
if (!root->pi)
|
||||||
return;
|
return;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user