aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/CaseConvert.cxx6
-rw-r--r--src/Editor.cxx67
-rw-r--r--src/Editor.h1
-rw-r--r--src/ScintillaBase.cxx2
-rw-r--r--src/ViewStyle.cxx5
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;
}