diff options
| -rw-r--r-- | src/pugixml.cpp | 8 | ||||
| -rw-r--r-- | tests/test_dom_traverse.cpp | 32 | 
2 files changed, 40 insertions, 0 deletions
| diff --git a/src/pugixml.cpp b/src/pugixml.cpp index 694a1a6..9bb054e 100644 --- a/src/pugixml.cpp +++ b/src/pugixml.cpp @@ -4350,6 +4350,10 @@ PUGI__NS_BEGIN  		{  			s += 2; +			// since overflow detection relies on length of the sequence skip leading zeros +			while (*s == '0') +				s++; +  			const char_t* start = s;  			for (;;) @@ -4370,6 +4374,10 @@ PUGI__NS_BEGIN  		}  		else  		{ +			// since overflow detection relies on length of the sequence skip leading zeros +			while (*s == '0') +				s++; +  			const char_t* start = s;  			for (;;) diff --git a/tests/test_dom_traverse.cpp b/tests/test_dom_traverse.cpp index c7408cb..6cebd50 100644 --- a/tests/test_dom_traverse.cpp +++ b/tests/test_dom_traverse.cpp @@ -1188,6 +1188,22 @@ TEST_XML(dom_as_uint_hex_overflow, "<node attr1='-0x1' attr2='0x100000000' attr3  	CHECK(node.attribute(STR("attr3")).as_uint() == 4294967295);  } +TEST_XML(dom_as_int_many_digits, "<node attr1='0000000000000000000000000000000000000000000000001' />") +{ +	xml_node node = doc.child(STR("node")); + +	CHECK(node.attribute(STR("attr1")).as_int() == 1); +	CHECK(node.attribute(STR("attr1")).as_uint() == 1); +} + +TEST_XML(dom_as_int_hex_many_digits, "<node attr1='0x0000000000000000000000000000000000000000000000001' />") +{ +	xml_node node = doc.child(STR("node")); + +	CHECK(node.attribute(STR("attr1")).as_int() == 1); +	CHECK(node.attribute(STR("attr1")).as_uint() == 1); +} +  #ifdef PUGIXML_HAS_LONG_LONG  TEST_XML(dom_as_llong_overflow, "<node attr1='-9223372036854775809' attr2='9223372036854775808' attr3='-18446744073709551616' />")  { @@ -1224,6 +1240,22 @@ TEST_XML(dom_as_ullong_hex_overflow, "<node attr1='-0x1' attr2='0x10000000000000  	CHECK(node.attribute(STR("attr2")).as_ullong() == 18446744073709551615ull);  	CHECK(node.attribute(STR("attr3")).as_ullong() == 18446744073709551615ull);  } + +TEST_XML(dom_as_llong_many_digits, "<node attr1='0000000000000000000000000000000000000000000000001' />") +{ +	xml_node node = doc.child(STR("node")); + +	CHECK(node.attribute(STR("attr1")).as_llong() == 1); +	CHECK(node.attribute(STR("attr1")).as_ullong() == 1); +} + +TEST_XML(dom_as_llong_hex_many_digits, "<node attr1='0x0000000000000000000000000000000000000000000000001' />") +{ +	xml_node node = doc.child(STR("node")); + +	CHECK(node.attribute(STR("attr1")).as_llong() == 1); +	CHECK(node.attribute(STR("attr1")).as_ullong() == 1); +}  #endif  TEST_XML(dom_as_int_plus, "<node attr1='+1' attr2='+0xa' />") | 
