diff options
author | Andrei Karas <akaras@inbox.ru> | 2012-06-28 21:59:59 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2012-06-28 21:59:59 +0300 |
commit | 503a2b302d9e13b99be4574e5d7b8821dd31504d (patch) | |
tree | 34ecba674db95cdedb9fe8f5767b0dfa22571e86 | |
parent | 6207ffb9a38c7e3718b7c4d87500ea9360d4d44f (diff) | |
download | manaplus-503a2b302d9e13b99be4574e5d7b8821dd31504d.tar.gz manaplus-503a2b302d9e13b99be4574e5d7b8821dd31504d.tar.bz2 manaplus-503a2b302d9e13b99be4574e5d7b8821dd31504d.tar.xz manaplus-503a2b302d9e13b99be4574e5d7b8821dd31504d.zip |
Add validation for some xml parameters.
-rw-r--r-- | src/particleemitter.cpp | 10 | ||||
-rw-r--r-- | src/resources/spritedef.cpp | 7 | ||||
-rw-r--r-- | src/simpleanimation.cpp | 4 | ||||
-rw-r--r-- | src/utils/xml.cpp | 17 | ||||
-rw-r--r-- | src/utils/xml.h | 6 |
5 files changed, 35 insertions, 9 deletions
diff --git a/src/particleemitter.cpp b/src/particleemitter.cpp index 27eb89291..4ba8c9c6b 100644 --- a/src/particleemitter.cpp +++ b/src/particleemitter.cpp @@ -221,10 +221,11 @@ ParticleEmitter::ParticleEmitter(XmlNodePtr emitterNode, Particle *target, // Get animation frames for_each_xml_child_node(frameNode, propertyNode) { - int delay = XML::getProperty(frameNode, "delay", 0); + int delay = XML::getIntProperty( + frameNode, "delay", 0, 0, 100000); int offsetX = XML::getProperty(frameNode, "offsetX", 0); int offsetY = XML::getProperty(frameNode, "offsetY", 0); - int rand = XML::getProperty(frameNode, "rand", 100); + int rand = XML::getIntProperty(frameNode, "rand", 100, 0, 100); offsetY -= imageset->getHeight() - 32; offsetX -= imageset->getWidth() / 2 - 16; @@ -300,10 +301,11 @@ ParticleEmitter::ParticleEmitter(XmlNodePtr emitterNode, Particle *target, // Get animation frames for_each_xml_child_node(frameNode, propertyNode) { - int delay = XML::getProperty(frameNode, "delay", 0); + int delay = XML::getIntProperty( + frameNode, "delay", 0, 0, 100000); int offsetX = XML::getProperty(frameNode, "offsetX", 0); int offsetY = XML::getProperty(frameNode, "offsetY", 0); - int rand = XML::getProperty(frameNode, "rand", 100); + int rand = XML::getIntProperty(frameNode, "rand", 100, 0, 100); offsetY -= imageset->getHeight() - 32; offsetX -= imageset->getWidth() / 2 - 16; diff --git a/src/resources/spritedef.cpp b/src/resources/spritedef.cpp index 5f3be9220..fd5178ec6 100644 --- a/src/resources/spritedef.cpp +++ b/src/resources/spritedef.cpp @@ -270,12 +270,13 @@ void SpriteDef::loadAnimation(XmlNodePtr animationNode, // Get animation frames for_each_xml_child_node(frameNode, animationNode) { - const int delay = XML::getProperty(frameNode, "delay", 0); + const int delay = XML::getIntProperty( + frameNode, "delay", 0, 0, 100000); int offsetX = XML::getProperty(frameNode, "offsetX", 0) + imageSet->getOffsetX(); int offsetY = XML::getProperty(frameNode, "offsetY", 0) + imageSet->getOffsetY(); - int rand = XML::getProperty(frameNode, "rand", 100); + int rand = XML::getIntProperty(frameNode, "rand", 100, 0, 100); offsetY -= imageSet->getHeight() - 32; offsetX -= imageSet->getWidth() / 2 - 16; @@ -305,7 +306,7 @@ void SpriteDef::loadAnimation(XmlNodePtr animationNode, const int start = XML::getProperty(frameNode, "start", -1); const int end = XML::getProperty(frameNode, "end", -1); const std::string value = XML::getProperty(frameNode, "value", ""); - int repeat = XML::getProperty(frameNode, "repeat", 1); + int repeat = XML::getIntProperty(frameNode, "repeat", 1, 0, 100); if (repeat < 1) { diff --git a/src/simpleanimation.cpp b/src/simpleanimation.cpp index 483061516..ebe9d4688 100644 --- a/src/simpleanimation.cpp +++ b/src/simpleanimation.cpp @@ -166,10 +166,10 @@ void SimpleAnimation::initializeAnimation(XmlNodePtr animationNode, for (XmlNodePtr frameNode = animationNode->xmlChildrenNode; frameNode; frameNode = frameNode->next) { - int delay = XML::getProperty(frameNode, "delay", 0); + int delay = XML::getIntProperty(frameNode, "delay", 0, 0, 100000); int offsetX = XML::getProperty(frameNode, "offsetX", 0); int offsetY = XML::getProperty(frameNode, "offsetY", 0); - int rand = XML::getProperty(frameNode, "rand", 100); + int rand = XML::getIntProperty(frameNode, "rand", 100, 0, 100); offsetY -= imageset->getHeight() - 32; offsetX -= imageset->getWidth() / 2 - 16; diff --git a/src/utils/xml.cpp b/src/utils/xml.cpp index 140da72df..f7350ce92 100644 --- a/src/utils/xml.cpp +++ b/src/utils/xml.cpp @@ -122,6 +122,23 @@ namespace XML return ret; } + int getIntProperty(XmlNodePtr node, const char* name, int def, int min, int max) + { + int &ret = def; + + xmlChar *prop = xmlGetProp(node, BAD_CAST name); + if (prop) + { + ret = atoi(reinterpret_cast<char*>(prop)); + xmlFree(prop); + } + if (ret < min) + ret = min; + else if (ret > max) + ret = max; + return ret; + } + double getFloatProperty(XmlNodePtr node, const char* name, double def) { double &ret = def; diff --git a/src/utils/xml.h b/src/utils/xml.h index eb5ee88b0..a4ff7eb2e 100644 --- a/src/utils/xml.h +++ b/src/utils/xml.h @@ -86,6 +86,12 @@ namespace XML int getProperty(XmlNodePtr node, const char *name, int def); /** + * Gets an integer property from an XmlNodePtr. + */ + int getIntProperty(XmlNodePtr node, const char* name, int def, + int min, int max); + + /** * Gets a string property from an XmlNodePtr. */ std::string getProperty(XmlNodePtr node, const char *name, |