diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/CaseConvert.cxx | 6 | ||||
| -rw-r--r-- | src/Editor.cxx | 67 | ||||
| -rw-r--r-- | src/Editor.h | 1 | ||||
| -rw-r--r-- | src/ScintillaBase.cxx | 2 | ||||
| -rw-r--r-- | src/ViewStyle.cxx | 5 | 
5 files changed, 36 insertions, 45 deletions
| diff --git a/src/CaseConvert.cxx b/src/CaseConvert.cxx index f983458c0..badaca411 100644 --- a/src/CaseConvert.cxx +++ b/src/CaseConvert.cxx @@ -13,6 +13,7 @@  #include <vector>  #include <algorithm> +#include "StringCopy.h"  #include "CaseConvert.h"  #include "UniConversion.h"  #include "UnicodeFromUTF8.h" @@ -367,6 +368,9 @@ class CaseConverter : public ICaseConverter {  	enum { maxConversionLength=6 };  	struct ConversionString {  		char conversion[maxConversionLength+1]; +		ConversionString() { +			conversion[0] = '\0'; +		}  	};  	// Conversions are initially store in a vector of structs but then decomposed into  	// parallel arrays as that is about 10% faster to search. @@ -374,7 +378,7 @@ class CaseConverter : public ICaseConverter {  		int character;  		ConversionString conversion;  		CharacterConversion(int character_=0, const char *conversion_="") : character(character_) { -			strcpy(conversion.conversion, conversion_); +			StringCopy(conversion.conversion, conversion_);  		}  		bool operator<(const CharacterConversion &other) const {  			return character < other.character; diff --git a/src/Editor.cxx b/src/Editor.cxx index f254af4dd..da6b2eab3 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -7386,11 +7386,7 @@ sptr_t Editor::StyleGetMessage(unsigned int iMessage, uptr_t wParam, sptr_t lPar  	case SCI_STYLEGETSIZEFRACTIONAL:  		return vs.styles[wParam].size;  	case SCI_STYLEGETFONT: -		if (!vs.styles[wParam].fontName) -			return 0; -		if (lParam != 0) -			strcpy(CharPtrFromSPtr(lParam), vs.styles[wParam].fontName); -		return strlen(vs.styles[wParam].fontName); +		return StringResult(lParam, vs.styles[wParam].fontName);  	case SCI_STYLEGETUNDERLINE:  		return vs.styles[wParam].underline ? 1 : 0;  	case SCI_STYLEGETCASE: @@ -7408,12 +7404,27 @@ sptr_t Editor::StyleGetMessage(unsigned int iMessage, uptr_t wParam, sptr_t lPar  }  sptr_t Editor::StringResult(sptr_t lParam, const char *val) { -	const size_t n = strlen(val); -	if (lParam != 0) { -		char *ptr = reinterpret_cast<char *>(lParam); -		strcpy(ptr, val); +	const size_t len = val ? strlen(val) : 0; +	if (lParam) { +		char *ptr = CharPtrFromSPtr(lParam); +		if (val) +			memcpy(ptr, val, len+1); +		else +			*ptr = 0; +	} +	return len;	// Not including NUL +} + +sptr_t Editor::BytesResult(sptr_t lParam, const unsigned char *val, size_t len) { +	// No NUL termination: len is number of valid/displayed bytes +	if (lParam) { +		char *ptr = CharPtrFromSPtr(lParam); +		if (val) +			memcpy(ptr, val, len); +		else +			*ptr = 0;  	} -	return n;	// Not including NUL +	return val ? len : 0;  }  sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) { @@ -9232,9 +9243,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  			Representation *repr = reprs.RepresentationFromCharacter(  				reinterpret_cast<const char *>(wParam), UTF8MaxBytes);  			if (repr) { -				if (lParam != 0) -					strcpy(CharPtrFromSPtr(lParam), repr->stringRep.c_str()); -				return repr->stringRep.size(); +				return StringResult(lParam, repr->stringRep.c_str());  			}  			return 0;  		} @@ -9350,13 +9359,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  	case SCI_MARGINGETTEXT: {  			const StyledText st = pdoc->MarginStyledText(wParam); -			if (lParam) { -				if (st.text) -					memcpy(CharPtrFromSPtr(lParam), st.text, st.length); -				else -					strcpy(CharPtrFromSPtr(lParam), ""); -			} -			return st.length; +			return BytesResult(lParam, reinterpret_cast<const unsigned char *>(st.text), st.length);  		}  	case SCI_MARGINSETSTYLE: @@ -9374,13 +9377,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  	case SCI_MARGINGETSTYLES: {  			const StyledText st = pdoc->MarginStyledText(wParam); -			if (lParam) { -				if (st.styles) -					memcpy(CharPtrFromSPtr(lParam), st.styles, st.length); -				else -					strcpy(CharPtrFromSPtr(lParam), ""); -			} -			return st.styles ? st.length : 0; +			return BytesResult(lParam, st.styles, st.length);  		}  	case SCI_MARGINTEXTCLEARALL: @@ -9393,13 +9390,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  	case SCI_ANNOTATIONGETTEXT: {  			const StyledText st = pdoc->AnnotationStyledText(wParam); -			if (lParam) { -				if (st.text) -					memcpy(CharPtrFromSPtr(lParam), st.text, st.length); -				else -					strcpy(CharPtrFromSPtr(lParam), ""); -			} -			return st.length; +			return BytesResult(lParam, reinterpret_cast<const unsigned char *>(st.text), st.length);  		}  	case SCI_ANNOTATIONGETSTYLE: { @@ -9417,13 +9408,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  	case SCI_ANNOTATIONGETSTYLES: {  			const StyledText st = pdoc->AnnotationStyledText(wParam); -			if (lParam) { -				if (st.styles) -					memcpy(CharPtrFromSPtr(lParam), st.styles, st.length); -				else -					strcpy(CharPtrFromSPtr(lParam), ""); -			} -			return st.styles ? st.length : 0; +			return BytesResult(lParam, st.styles, st.length);  		}  	case SCI_ANNOTATIONGETLINES: diff --git a/src/Editor.h b/src/Editor.h index 7a8f1eb1d..c87708e92 100644 --- a/src/Editor.h +++ b/src/Editor.h @@ -632,6 +632,7 @@ protected:	// ScintillaBase subclass needs access to much of Editor  	static const char *StringFromEOLMode(int eolMode);  	static sptr_t StringResult(sptr_t lParam, const char *val); +	static sptr_t BytesResult(sptr_t lParam, const unsigned char *val, size_t len);  public:  	// Public so the COM thunks can access it. diff --git a/src/ScintillaBase.cxx b/src/ScintillaBase.cxx index f8b989bd4..ad45a5ad2 100644 --- a/src/ScintillaBase.cxx +++ b/src/ScintillaBase.cxx @@ -381,7 +381,7 @@ int ScintillaBase::AutoCompleteGetCurrentText(char *buffer) const {  		if (item != -1) {  			const std::string selected = ac.GetValue(item);  			if (buffer != NULL) -				strcpy(buffer, selected.c_str()); +				memcpy(buffer, selected.c_str(), selected.length()+1);  			return static_cast<int>(selected.length());  		}  	} diff --git a/src/ViewStyle.cxx b/src/ViewStyle.cxx index daa5b1a99..4b82c9c05 100644 --- a/src/ViewStyle.cxx +++ b/src/ViewStyle.cxx @@ -55,8 +55,9 @@ const char *FontNames::Save(const char *name) {  			return *it;  		}  	} -	char *nameSave = new char[strlen(name) + 1]; -	strcpy(nameSave, name); +	const size_t lenName = strlen(name) + 1; +	char *nameSave = new char[lenName]; +	memcpy(nameSave, name, lenName);  	names.push_back(nameSave);  	return nameSave;  } | 
