[LyX/2.3.x] Validate if graphics path is encodable
Juergen Spitzmueller
spitz at lyx.org
Thu Oct 31 09:01:05 UTC 2019
commit 482a34c9afe25db10b442647beba29699e41a336
Author: Juergen Spitzmueller <spitz at lyx.org>
Date: Sat Oct 26 08:33:51 2019 +0200
Validate if graphics path is encodable
Fixes #11688
(cherry picked from commit 1c0572f1ab9956cde47fb42ae1a3473ac26964ea)
---
src/insets/InsetGraphics.cpp | 40 ++++++++++++++++++++++++++++++++++++++--
status.23x | 2 ++
2 files changed, 40 insertions(+), 2 deletions(-)
diff --git a/src/insets/InsetGraphics.cpp b/src/insets/InsetGraphics.cpp
index b7b9650..fbddab0 100644
--- a/src/insets/InsetGraphics.cpp
+++ b/src/insets/InsetGraphics.cpp
@@ -54,6 +54,7 @@ TODO
#include "Converter.h"
#include "Cursor.h"
#include "DispatchResult.h"
+#include "Encoding.h"
#include "ErrorList.h"
#include "Exporter.h"
#include "Format.h"
@@ -872,8 +873,43 @@ void InsetGraphics::latex(otexstream & os,
// Convert the file if necessary.
// Remove the extension so LaTeX will use whatever is appropriate
// (when there are several versions in different formats)
- string file_path = prepareFile(runparams);
- latex_str += file_path;
+ docstring file_path = from_utf8(prepareFile(runparams));
+ // we can only output characters covered by the current
+ // encoding!
+ docstring uncodable;
+ docstring encodable_file_path;
+ for (size_type i = 0 ; i < file_path.size() ; ++i) {
+ char_type c = file_path[i];
+ try {
+ if (runparams.encoding->encodable(c))
+ encodable_file_path += c;
+ else if (runparams.dryrun) {
+ encodable_file_path += "<" + _("LyX Warning: ")
+ + _("uncodable character") + " '";
+ encodable_file_path += docstring(1, c);
+ encodable_file_path += "'>";
+ } else
+ uncodable += c;
+ } catch (EncodingException & /* e */) {
+ if (runparams.dryrun) {
+ encodable_file_path += "<" + _("LyX Warning: ")
+ + _("uncodable character") + " '";
+ encodable_file_path += docstring(1, c);
+ encodable_file_path += "'>";
+ } else
+ uncodable += c;
+ }
+ }
+ if (!uncodable.empty() && !runparams.silent) {
+ // issue a warning about omitted characters
+ // FIXME: should be passed to the error dialog
+ frontend::Alert::warning(_("Uncodable characters in path"),
+ bformat(_("The following characters in one of the graphic paths are\n"
+ "not representable in the current encoding and have been omitted: %1$s."
+ "You need to adapt either the encoding or the path."),
+ uncodable));
+ }
+ latex_str += to_utf8(encodable_file_path);
latex_str += '}' + after;
// FIXME UNICODE
os << from_utf8(latex_str);
diff --git a/status.23x b/status.23x
index 93202c5..8026ad9 100644
--- a/status.23x
+++ b/status.23x
@@ -58,6 +58,8 @@ What's new
* DOCUMENT INPUT/OUTPUT
+- Prevent crash due to unencodable path (bug 11688).
+
- (Re-)fix problems with activated equal sign and graphic options in Turkish
and Latin documents (bug 2005).
More information about the lyx-cvs
mailing list