diff options
author | nyamatongwe <unknown> | 2006-06-15 01:32:23 +0000 |
---|---|---|
committer | nyamatongwe <unknown> | 2006-06-15 01:32:23 +0000 |
commit | 37022d57a00cd6079466cb4d92a76dd591d25dde (patch) | |
tree | 161fe00a2d05d9844c63b8e3c63a35a15779e702 | |
parent | b33f5cd85d7b7630233d883f69397d0b29bfa975 (diff) | |
download | scintilla-mirror-37022d57a00cd6079466cb4d92a76dd591d25dde.tar.gz |
Only allow setting the code page to valid values.
-rw-r--r-- | gtk/ScintillaGTK.cxx | 5 | ||||
-rw-r--r-- | src/Editor.cxx | 6 | ||||
-rw-r--r-- | src/Editor.h | 1 | ||||
-rw-r--r-- | win32/ScintillaWin.cxx | 7 |
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); } |