aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authornyamatongwe <unknown>2006-06-15 01:32:23 +0000
committernyamatongwe <unknown>2006-06-15 01:32:23 +0000
commit37022d57a00cd6079466cb4d92a76dd591d25dde (patch)
tree161fe00a2d05d9844c63b8e3c63a35a15779e702
parentb33f5cd85d7b7630233d883f69397d0b29bfa975 (diff)
downloadscintilla-mirror-37022d57a00cd6079466cb4d92a76dd591d25dde.tar.gz
Only allow setting the code page to valid values.
-rw-r--r--gtk/ScintillaGTK.cxx5
-rw-r--r--src/Editor.cxx6
-rw-r--r--src/Editor.h1
-rw-r--r--win32/ScintillaWin.cxx7
4 files changed, 17 insertions, 2 deletions
diff --git a/gtk/ScintillaGTK.cxx b/gtk/ScintillaGTK.cxx
index dfc403dc5..733247cfd 100644
--- a/gtk/ScintillaGTK.cxx
+++ b/gtk/ScintillaGTK.cxx
@@ -154,6 +154,7 @@ private:
virtual void StartDrag();
int TargetAsUTF8(char *text);
int EncodedFromUTF8(char *utf8, char *encoded);
+ virtual bool ValidCodePage(int codePage) const;
public: // Public for scintilla_send_message
virtual sptr_t WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam);
private:
@@ -907,6 +908,10 @@ int ScintillaGTK::EncodedFromUTF8(char *utf8, char *encoded) {
return 0;
}
+bool ScintillaGTK::ValidCodePage(int codePage) const {
+ return codePage == 0 || codePage == SC_CP_UTF8 || codePage == SC_CP_DBCS;
+}
+
sptr_t ScintillaGTK::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {
switch (iMessage) {
diff --git a/src/Editor.cxx b/src/Editor.cxx
index 6fd4c44af..87a0391b4 100644
--- a/src/Editor.cxx
+++ b/src/Editor.cxx
@@ -6509,8 +6509,10 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {
return pdoc->LineEnd(wParam);
case SCI_SETCODEPAGE:
- pdoc->dbcsCodePage = wParam;
- InvalidateStyleRedraw();
+ if (ValidCodePage(wParam)) {
+ pdoc->dbcsCodePage = wParam;
+ InvalidateStyleRedraw();
+ }
break;
case SCI_GETCODEPAGE:
diff --git a/src/Editor.h b/src/Editor.h
index 5799b4110..fe7be268a 100644
--- a/src/Editor.h
+++ b/src/Editor.h
@@ -525,6 +525,7 @@ protected: // ScintillaBase subclass needs access to much of Editor
void GetHotSpotRange(int& hsStart, int& hsEnd);
int CodePage() const;
+ virtual bool ValidCodePage(int /* codePage */) const { return true; }
int WrapCount(int line);
virtual sptr_t DefWndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) = 0;
diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx
index db8bd5204..f5164c5c7 100644
--- a/win32/ScintillaWin.cxx
+++ b/win32/ScintillaWin.cxx
@@ -181,6 +181,7 @@ class ScintillaWin :
virtual void StartDrag();
sptr_t WndPaint(uptr_t wParam);
sptr_t HandleComposition(uptr_t wParam, sptr_t lParam);
+ virtual bool ValidCodePage(int codePage) const;
virtual sptr_t DefWndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam);
virtual bool SetIdle(bool on);
virtual void SetTicking(bool on);
@@ -954,6 +955,12 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam
return 0l;
}
+bool ScintillaWin::ValidCodePage(int codePage) const {
+ return codePage == 0 || codePage == SC_CP_UTF8 ||
+ codePage == 932 || codePage == 936 || codePage == 949 ||
+ codePage == 950 || codePage == 1361;
+}
+
sptr_t ScintillaWin::DefWndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {
return ::DefWindowProc(MainHWND(), iMessage, wParam, lParam);
}