summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lasso/xml/xml.c20
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;