From 6f25f5d9390ae247970ad886dc51d55435285831 Mon Sep 17 00:00:00 2001 From: Yohann Ferreira Date: Mon, 27 Sep 2010 22:40:40 +0200 Subject: Centralized String to bool conversion into the client. The former XML::getBoolProperty() had a potential memleak and was unsafe when dealing with unknown values. Reviewed-by: CodyMartin. Resolves: Mana-Mantis #213. --- src/utils/stringutils.cpp | 17 +++++++++-------- src/utils/stringutils.h | 5 +++-- src/utils/xml.cpp | 12 ++++++++---- 3 files changed, 20 insertions(+), 14 deletions(-) (limited to 'src/utils') diff --git a/src/utils/stringutils.cpp b/src/utils/stringutils.cpp index 4726f8a7..ca03791f 100644 --- a/src/utils/stringutils.cpp +++ b/src/utils/stringutils.cpp @@ -155,7 +155,8 @@ bool isWordSeparator(char chr) return (chr == ' ' || chr == ',' || chr == '.' || chr == '"'); } -const std::string findSameSubstring(const std::string &str1, const std::string &str2) +const std::string findSameSubstring(const std::string &str1, + const std::string &str2) { int minLength = str1.length() > str2.length() ? str2.length() : str1.length(); for (int f = 0; f < minLength; f ++) @@ -176,16 +177,16 @@ const char* getSafeUtf8String(std::string text) return buf; } -bool getBoolFromString(const std::string &text) +bool getBoolFromString(const std::string &text, bool def) { - std::string txt = text; - toLower(trim(txt)); - if (txt == "true" || txt == "yes" || txt == "on" || txt == "1") - return true; - else if (txt == "false" || txt == "no" || txt == "off" || txt == "0") + std::string a = text; + toLower(trim(a)); + if (a == "true" || a == "1" || a == "on" || a == "yes" || a == "y") + return true; + if (a == "false" || a == "0" || a == "off" || a == "no" || a == "n") return false; else - return (bool) atoi(txt.c_str()); + return def; } std::string autocomplete(std::vector &candidates, diff --git a/src/utils/stringutils.h b/src/utils/stringutils.h index 012ae98f..f032733d 100644 --- a/src/utils/stringutils.h +++ b/src/utils/stringutils.h @@ -122,7 +122,8 @@ int compareStrI(const std::string &a, const std::string &b); bool isWordSeparator(char chr); -const std::string findSameSubstring(const std::string &str1, const std::string &str2); +const std::string findSameSubstring(const std::string &str1, + const std::string &str2); const char* getSafeUtf8String(std::string text); @@ -132,7 +133,7 @@ const char* getSafeUtf8String(std::string text); * @param text the string used to get the bool value * @return a boolean value.. */ -bool getBoolFromString(const std::string &text); +bool getBoolFromString(const std::string &text, bool def = false); std::string autocomplete(std::vector &candidates, std::string base); diff --git a/src/utils/xml.cpp b/src/utils/xml.cpp index 2bcb6f24..65eb1370 100644 --- a/src/utils/xml.cpp +++ b/src/utils/xml.cpp @@ -32,6 +32,7 @@ #include "resources/resourcemanager.h" +#include "utils/stringutils.h" #include "utils/zlib.h" namespace XML @@ -135,11 +136,14 @@ namespace XML bool getBoolProperty(xmlNodePtr node, const char* name, bool def) { + bool ret = def; xmlChar *prop = xmlGetProp(node, BAD_CAST name); - - if (xmlStrEqual(prop, BAD_CAST "true" ) ) return true; - if (xmlStrEqual(prop, BAD_CAST "false") ) return false; - return def; + if (prop) + { + ret = getBoolFromString((char*) prop, def); + xmlFree(prop); + } + return ret; } xmlNodePtr findFirstChildByName(xmlNodePtr parent, const char *name) -- cgit v1.2.3-70-g09d2