Browse Source

Merge pull request #18281 from akien-mga/coverity-string

Fix some Coverity warnings in String API
Rémi Verschelde 7 years ago
parent
commit
394e6d5ee1
3 changed files with 13 additions and 29 deletions
  1. 3 10
      core/string_db.cpp
  2. 1 0
      core/string_db.h
  3. 9 19
      core/ustring.cpp

+ 3 - 10
core/string_db.cpp

@@ -164,21 +164,14 @@ void StringName::operator=(const StringName &p_name) {
 		_data = p_name._data;
 		_data = p_name._data;
 	}
 	}
 }
 }
-/* was inlined
-StringName::operator String() const {
 
 
-	if (_data)
-		return _data->get_name();
-
-	return "";
-}
-*/
 StringName::StringName(const StringName &p_name) {
 StringName::StringName(const StringName &p_name) {
 
 
-	ERR_FAIL_COND(!configured);
 	_data = NULL;
 	_data = NULL;
-	if (p_name._data && p_name._data->refcount.ref()) {
 
 
+	ERR_FAIL_COND(!configured);
+
+	if (p_name._data && p_name._data->refcount.ref()) {
 		_data = p_name._data;
 		_data = p_name._data;
 	}
 	}
 }
 }

+ 1 - 0
core/string_db.h

@@ -67,6 +67,7 @@ class StringName {
 		_Data() {
 		_Data() {
 			cname = NULL;
 			cname = NULL;
 			next = prev = NULL;
 			next = prev = NULL;
+			idx = 0;
 			hash = 0;
 			hash = 0;
 		}
 		}
 	};
 	};

+ 9 - 19
core/ustring.cpp

@@ -1151,7 +1151,7 @@ String String::num_uint64(uint64_t p_num, int base, bool capitalize_hex) {
 	c[chars] = 0;
 	c[chars] = 0;
 	n = p_num;
 	n = p_num;
 	do {
 	do {
-		int mod = ABS(n % base);
+		int mod = n % base;
 		if (mod >= 10) {
 		if (mod >= 10) {
 			char a = (capitalize_hex ? 'A' : 'a');
 			char a = (capitalize_hex ? 'A' : 'a');
 			c[--chars] = a + (mod - 10);
 			c[--chars] = a + (mod - 10);
@@ -1550,8 +1550,7 @@ String::String(const StrRange &p_range) {
 
 
 int String::hex_to_int(bool p_with_prefix) const {
 int String::hex_to_int(bool p_with_prefix) const {
 
 
-	int l = length();
-	if (p_with_prefix && l < 3)
+	if (p_with_prefix && length() < 3)
 		return 0;
 		return 0;
 
 
 	const CharType *s = ptr();
 	const CharType *s = ptr();
@@ -1560,17 +1559,13 @@ int String::hex_to_int(bool p_with_prefix) const {
 
 
 	if (sign < 0) {
 	if (sign < 0) {
 		s++;
 		s++;
-		l--;
-		if (p_with_prefix && l < 2)
-			return 0;
 	}
 	}
 
 
 	if (p_with_prefix) {
 	if (p_with_prefix) {
 		if (s[0] != '0' || s[1] != 'x')
 		if (s[0] != '0' || s[1] != 'x')
 			return 0;
 			return 0;
 		s += 2;
 		s += 2;
-		l -= 2;
-	};
+	}
 
 
 	int hex = 0;
 	int hex = 0;
 
 
@@ -1596,8 +1591,7 @@ int String::hex_to_int(bool p_with_prefix) const {
 
 
 int64_t String::hex_to_int64(bool p_with_prefix) const {
 int64_t String::hex_to_int64(bool p_with_prefix) const {
 
 
-	int l = length();
-	if (p_with_prefix && l < 3)
+	if (p_with_prefix && length() < 3)
 		return 0;
 		return 0;
 
 
 	const CharType *s = ptr();
 	const CharType *s = ptr();
@@ -1606,17 +1600,13 @@ int64_t String::hex_to_int64(bool p_with_prefix) const {
 
 
 	if (sign < 0) {
 	if (sign < 0) {
 		s++;
 		s++;
-		l--;
-		if (p_with_prefix && l < 2)
-			return 0;
 	}
 	}
 
 
 	if (p_with_prefix) {
 	if (p_with_prefix) {
 		if (s[0] != '0' || s[1] != 'x')
 		if (s[0] != '0' || s[1] != 'x')
 			return 0;
 			return 0;
 		s += 2;
 		s += 2;
-		l -= 2;
-	};
+	}
 
 
 	int64_t hex = 0;
 	int64_t hex = 0;
 
 
@@ -3478,13 +3468,13 @@ bool String::is_valid_hex_number(bool p_with_prefix) const {
 
 
 	if (p_with_prefix) {
 	if (p_with_prefix) {
 
 
-		if (len < 2)
+		if (len < 3)
 			return false;
 			return false;
 		if (operator[](from) != '0' || operator[](from + 1) != 'x') {
 		if (operator[](from) != '0' || operator[](from + 1) != 'x') {
 			return false;
 			return false;
-		};
+		}
 		from += 2;
 		from += 2;
-	};
+	}
 
 
 	for (int i = from; i < len; i++) {
 	for (int i = from; i < len; i++) {
 
 
@@ -3492,7 +3482,7 @@ bool String::is_valid_hex_number(bool p_with_prefix) const {
 		if ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'))
 		if ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'))
 			continue;
 			continue;
 		return false;
 		return false;
-	};
+	}
 
 
 	return true;
 	return true;
 };
 };