From 471b4ea315e434b918d7c3348d0ebf1ad8af6c3e Mon Sep 17 00:00:00 2001 From: Georg Baum Date: Tue, 27 Feb 2007 19:01:10 +0000 Subject: [PATCH] Fix bug 2937 (from Jean-Baptiste LAMY) * src/support/filename.C (DocFileName::mangledFilenam): Use a whitelist of allowed characters instead of an incomplete blacklist of disallowed ones git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@17378 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/support/filename.C | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/support/filename.C b/src/support/filename.C index 30ed474054..abe146ea4d 100644 --- a/src/support/filename.C +++ b/src/support/filename.C @@ -167,14 +167,19 @@ string const DocFileName::mangledFilename(std::string const & dir) const string mname = os::internal_path(name_); // Remove the extension. mname = changeExtension(name_, string()); - // Replace '/' in the file name with '_' - mname = subst(mname, "/", "_"); - // Replace '.' in the file name with '_' - mname = subst(mname, ".", "_"); - // Replace ' ' in the file name with '_' - mname = subst(mname, " ", "_"); - // Replace ':' in the file name with '_' - mname = subst(mname, ":", "_"); + // The mangled name must be a valid LaTeX name. + // The list of characters to keep is probably over-restrictive, + // but it is not really a problem. + // Apart from non-ASCII characters, at least the following characters + // are forbidden: '/', '.', ' ', and ':'. + // On windows it is not possible to create files with '<', '>' or '?' + // in the name. + static string const keep = "abcdefghijklmnopqrstuvwxyz" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "+,-0123456789;="; + string::size_type pos = 0; + while ((pos = mname.find_first_not_of(keep, pos)) != string::npos) + mname[pos++] = '_'; // Add the extension back on mname = changeExtension(mname, getExtension(name_)); -- 2.39.2