diff options
| author | Neil <nyamatongwe@gmail.com> | 2018-04-21 16:18:38 +1000 | 
|---|---|---|
| committer | Neil <nyamatongwe@gmail.com> | 2018-04-21 16:18:38 +1000 | 
| commit | d05d7fbd132b6a8060b3f0fa3a7a56cfaa0c41e0 (patch) | |
| tree | 3722f90a5360ba769d80aaf0a978538655efcb4e /src | |
| parent | c477f4d6852219240182352fd35b5429121fee5c (diff) | |
| download | scintilla-mirror-d05d7fbd132b6a8060b3f0fa3a7a56cfaa0c41e0.tar.gz | |
Safety improvements for character code - drop reinterpret_cast, ensure more
variables are initialized, specify noexcept when safe.
Diffstat (limited to 'src')
| -rw-r--r-- | src/CaseConvert.cxx | 21 | ||||
| -rw-r--r-- | src/CaseFolder.cxx | 2 | ||||
| -rw-r--r-- | src/CharClassify.cxx | 2 | 
3 files changed, 12 insertions, 13 deletions
| diff --git a/src/CaseConvert.cxx b/src/CaseConvert.cxx index ce191f574..2d6db4eb7 100644 --- a/src/CaseConvert.cxx +++ b/src/CaseConvert.cxx @@ -563,8 +563,7 @@ class CaseConverter : public ICaseConverter {  	enum { maxConversionLength=6 };  	struct ConversionString {  		char conversion[maxConversionLength+1]; -		ConversionString() { -			conversion[0] = '\0'; +		ConversionString() : conversion{} {  		}  	};  	// Conversions are initially store in a vector of structs but then decomposed into @@ -572,10 +571,10 @@ class CaseConverter : public ICaseConverter {  	struct CharacterConversion {  		int character;  		ConversionString conversion; -		CharacterConversion(int character_=0, const char *conversion_="") : character(character_) { +		CharacterConversion(int character_=0, const char *conversion_="") noexcept : character(character_) {  			StringCopy(conversion.conversion, conversion_);  		} -		bool operator<(const CharacterConversion &other) const { +		bool operator<(const CharacterConversion &other) const noexcept {  			return character < other.character;  		}  	}; @@ -607,9 +606,9 @@ public:  	size_t CaseConvertString(char *converted, size_t sizeConverted, const char *mixed, size_t lenMixed) override {  		size_t lenConverted = 0;  		size_t mixedPos = 0; -		unsigned char bytes[UTF8MaxBytes + 1]; +		unsigned char bytes[UTF8MaxBytes + 1]{};  		while (mixedPos < lenMixed) { -			const unsigned char leadByte = static_cast<unsigned char>(mixed[mixedPos]); +			const unsigned char leadByte = mixed[mixedPos];  			const char *caseConverted = 0;  			size_t lenMixedChar = 1;  			if (UTF8IsAscii(leadByte)) { @@ -705,10 +704,10 @@ void SetupConversions(enum CaseConversion conversion) {  	while (*sComplex) {  		// Longest ligature is 3 character so 5 for safety  		const size_t lenUTF8 = 5*UTF8MaxBytes+1; -		char originUTF8[lenUTF8]; -		char foldedUTF8[lenUTF8]; -		char lowerUTF8[lenUTF8]; -		char upperUTF8[lenUTF8]; +		unsigned char originUTF8[lenUTF8]{}; +		char foldedUTF8[lenUTF8]{}; +		char lowerUTF8[lenUTF8]{}; +		char upperUTF8[lenUTF8]{};  		size_t i = 0;  		while (*sComplex && *sComplex != '|') {  			originUTF8[i++] = *sComplex; @@ -738,7 +737,7 @@ void SetupConversions(enum CaseConversion conversion) {  		sComplex++;  		lowerUTF8[i] = 0; -		const int character = UnicodeFromUTF8(reinterpret_cast<unsigned char *>(originUTF8)); +		const int character = UnicodeFromUTF8(originUTF8);  		if (conversion == CaseConversionFold && foldedUTF8[0]) {  			caseConvFold.Add(character, foldedUTF8); diff --git a/src/CaseFolder.cxx b/src/CaseFolder.cxx index e45c1eb5c..0fd29c7bb 100644 --- a/src/CaseFolder.cxx +++ b/src/CaseFolder.cxx @@ -17,7 +17,7 @@ using namespace Scintilla;  CaseFolder::~CaseFolder() {  } -CaseFolderTable::CaseFolderTable() { +CaseFolderTable::CaseFolderTable() : mapping{}  {  	for (size_t iChar=0; iChar<sizeof(mapping); iChar++) {  		mapping[iChar] = static_cast<char>(iChar);  	} diff --git a/src/CharClassify.cxx b/src/CharClassify.cxx index b4f021d59..ba8433e62 100644 --- a/src/CharClassify.cxx +++ b/src/CharClassify.cxx @@ -14,7 +14,7 @@  using namespace Scintilla; -CharClassify::CharClassify() { +CharClassify::CharClassify() : charClass{} {  	SetDefaultCharClasses(true);  } | 
