summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--src/rtfparser.cpp18
2 files changed, 17 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index ff6e3b5..5dc21a2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Version 0.9.7
+
+ - Don't let most characters below 0x0020 through. Old RTF's seem
+ to have these for strange reasons.
+
Version 0.9.6
- Add character styles
- Add <highlight> tag for highlighted text
diff --git a/src/rtfparser.cpp b/src/rtfparser.cpp
index 7e70fe5..6ba9abe 100644
--- a/src/rtfparser.cpp
+++ b/src/rtfparser.cpp
@@ -45,11 +45,11 @@
const wchar_t kAnsiToUnicode[] = {
- /* Invalid, but used for wierd things in RTF anyway :( */
- 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
- 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
- 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
- 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+ /* Moltly invalid, but used for wierd things in RTF anyway :( */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0009, 0x000A, 0x0000, 0x0000, 0x000D, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* Low 7 bit, same */
0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
@@ -316,9 +316,15 @@ bool RtfParser::parseHexChar(int num, bool ansi)
ASSERT((sizeof(kAnsiToUnicode) / sizeof(kAnsiToUnicode[0])) == 256);
if(val < 0 || val >= 256)
+ {
m_parseErrors.append("invalid ansi char: " + data + "\n");
+ }
else
- sendData(kAnsiToUnicode[val]);
+ {
+ wchar_t ch = kAnsiToUnicode[val];
+ if(ch)
+ sendData(ch);
+ }
}
else
{