commit 1b675d3a62c6bf14fe3a4b3933b913a28fde9a4a
Author: Georg Baum <[email protected]>
Date:   Sun Mar 9 10:30:20 2014 +0100

    Prevent the most important case of bug #9012
    
    Currently you can easily create an uncompilable document if you insert
    non-ASCII characters in a pass-through paragraph (e.g. ERT inset or verbatim
    style). This commit prevents entering these characters directly, but of
    course they can still be inserted via tricks, e.g. changing a standard
    paragraph to verbatim. A complete fix would handle this case as well,
    and also change the fixed latin1 encoding of latex_language to a dynamic 
one,
    so that a verbatim paragraph can contain any character that is encodable in
    the encoding of its environment.

diff --git a/src/Text.cpp b/src/Text.cpp
index 70805df..c4cac88 100644
--- a/src/Text.cpp
+++ b/src/Text.cpp
@@ -30,6 +30,7 @@
 #include "Cursor.h"
 #include "CutAndPaste.h"
 #include "DispatchResult.h"
+#include "Encoding.h"
 #include "ErrorList.h"
 #include "FuncRequest.h"
 #include "factory.h"
@@ -1004,6 +1005,16 @@ void Text::insertChar(Cursor & cur, char_type c)
                }
        }
 
+       // Prevent to insert uncodable characters in verbatim and ERT
+       // (workaround for bug 9012)
+       if (cur.paragraph().isPassThru() && cur.current_font.language()) {
+               Encoding const * e = cur.current_font.language()->encoding();
+               if (!e->encodable(c)) {
+                       cur.message(_("Character is uncodable in verbatim 
paragraphs."));
+                       return;
+               }
+       }
+
        par.insertChar(cur.pos(), c, cur.current_font,
                cur.buffer()->params().trackChanges);
        cur.checkBufferStructure();

Reply via email to