]> git.ipfire.org Git - thirdparty/openvpn.git/commitdiff
Ignore UTF-8 byte order mark
authorHeiko Hund <heiko.hund@sophos.com>
Mon, 4 Feb 2013 11:39:25 +0000 (11:39 +0000)
committerDavid Sommerseth <davids@redhat.com>
Wed, 6 Feb 2013 19:02:09 +0000 (20:02 +0100)
Currently openvpn exits when reading configuration from a file
that has an UTF-8 byte order mark (EF BB BF) at its start.

While it is useless to put a BOM into UTF-8 encoded files, the
Unicode standard [1] permits it (on page 36):

  "Use of a BOM is neither required nor recommended for UTF-8,
  but may be encountered in contexts where UTF-8 data is converted
  from other encoding forms that use a BOM or where the BOM is
  used as a UTF-8 signature."

Notepad.exe, the default text editor on Windows, always puts the BOM
into UTF-8 encoded files when saving them. Others may do as well.

Just ignoring the UTF-8 BOM will make config files with UTF-8 BOM
readable.

[1] http://www.unicode.org/versions/Unicode5.0.0/ch02.pdf

Signed-off-by: Heiko Hund <heiko.hund@sophos.com>
Acked-by: David Sommerseth <davids@redhat.com>
Message-Id: 1359977966-31724-1-git-send-email-heiko.hund@sophos.com
URL: http://article.gmane.org/gmane.network.openvpn.devel/7342
Signed-off-by: David Sommerseth <davids@redhat.com>
src/openvpn/options.c

index 8ca41a3775e9633c873d843ce47aa36b4860c6bb..3b5f1e73537f12e64406600efef887fcc18c1fa4 100644 (file)
@@ -3771,9 +3771,13 @@ read_config_file (struct options *options,
          line_num = 0;
          while (fgets(line, sizeof (line), fp))
            {
+              int offset = 0;
              CLEAR (p);
              ++line_num;
-             if (parse_line (line, p, SIZE (p), file, line_num, msglevel, &options->gc))
+              /* Ignore UTF-8 BOM at start of stream */
+              if (line_num == 1 && strncmp (line, "\xEF\xBB\xBF", 3) == 0)
+                offset = 3;
+              if (parse_line (line + offset, p, SIZE (p), file, line_num, msglevel, &options->gc))
                {
                  bypass_doubledash (&p[0]);
                  check_inline_file_via_fp (fp, p, &options->gc);