mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 21:21:32 +00:00
Prevent iconv exception in previews (#13042)
The preview loader assumes all content is in the main document encoding. As soon as content was not encodable, LyX crashed. We now check for that and if non-encodable glyphs are found, we do not produce a preview snippet and warn. Ideally, the preview loader should be made aware of encoding changes, or we should generally use utf8 for previews.
This commit is contained in:
parent
0fb7650786
commit
b3fe9cb704
@ -849,11 +849,30 @@ void PreviewLoader::Impl::dumpData(odocstream & os,
|
||||
BitmapFile::const_iterator it = vec.begin();
|
||||
BitmapFile::const_iterator end = vec.end();
|
||||
|
||||
Encoding const & enc = buffer_.params().encoding();
|
||||
|
||||
for (; it != end; ++it) {
|
||||
docstring res;
|
||||
bool uncodable_content = false;
|
||||
// check whether the content is encodable
|
||||
// FIXME: the preview loader should be able
|
||||
// to handle multiple encodings
|
||||
// or we should generally use utf8
|
||||
for (char_type n : from_utf8(it->first)) {
|
||||
if (!enc.encodable(n)) {
|
||||
LYXERR0("Uncodable character '"
|
||||
<< docstring(1, n)
|
||||
<< "' in preview snippet!");
|
||||
uncodable_content = true;
|
||||
} else
|
||||
res += n;
|
||||
}
|
||||
// FIXME UNICODE
|
||||
os << "\\begin{preview}\n"
|
||||
<< from_utf8(it->first)
|
||||
<< "\n\\end{preview}\n\n";
|
||||
os << "\\begin{preview}\n";
|
||||
// do not show incomplete preview
|
||||
if (!uncodable_content)
|
||||
os << res;
|
||||
os << "\n\\end{preview}\n\n";
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user