diff options
| -rw-r--r-- | lasso/xml/xml.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/lasso/xml/xml.c b/lasso/xml/xml.c index f5339721..db20ac25 100644 --- a/lasso/xml/xml.c +++ b/lasso/xml/xml.c @@ -1295,7 +1295,15 @@ lasso_node_impl_init_from_xml(LassoNode *node, xmlNode *xmlnode) *(void**)value = tmp; tmp = NULL; } else if (snippet->type & SNIPPET_INTEGER) { - int val = atoi(tmp); + int val = strtol(tmp, NULL, 10); + if (((val == LONG_MIN || val == LONG_MAX) && errno == ERANGE) + || errno == EINVAL || val < 0) { + if (snippet->type & SNIPPET_OPTIONAL_NEG) { + val = -1; + } else { + val = 0; + } + } (*(int*)value) = val; trace_snippet(" setting integer %i for ", val); xmlFree(tmp); @@ -1356,7 +1364,15 @@ lasso_node_impl_init_from_xml(LassoNode *node, xmlNode *xmlnode) continue; if (snippet->type & SNIPPET_INTEGER) { - int val = atoi(tmp); + int val = strtol(tmp, NULL, 10); + if (((val == LONG_MIN || val == LONG_MAX) && errno == ERANGE) + || errno == EINVAL || val < 0) { + if (snippet->type & SNIPPET_OPTIONAL_NEG) { + val = -1; + } else { + val = 0; + } + } (*(int*)value) = val; } else if (snippet->type & SNIPPET_BOOLEAN) { int val = 0; |
