[Pkg-gnupg-commit] [gnupg2] 81/180: common: Skip the Byte Order Mark in conf files.

Daniel Kahn Gillmor dkg at fifthhorseman.net
Sat Dec 24 22:29:11 UTC 2016


This is an automated email from the git hooks/post-receive script.

dkg pushed a commit to branch master
in repository gnupg2.

commit 5c7d58222834793629a30248e72b6ea96e832dc4
Author: Werner Koch <wk at gnupg.org>
Date:   Thu Dec 8 20:25:48 2016 +0100

    common: Skip the Byte Order Mark in conf files.
    
    * common/argparse.c (optfile_parse): Detect and skip the UTF-8 BOM.
    
    Signed-off-by: Werner Koch <wk at gnupg.org>
---
 common/argparse.c | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

diff --git a/common/argparse.c b/common/argparse.c
index 240fdce..dce725a 100644
--- a/common/argparse.c
+++ b/common/argparse.c
@@ -568,17 +568,35 @@ optfile_parse (FILE *fp, const char *filename, unsigned *lineno,
   char *buffer = NULL;
   size_t buflen = 0;
   int in_alias=0;
+  int unread_buf[3];  /* We use an int so that we can store EOF.  */
+  int unread_buf_count = 0;
 
   if (!fp) /* Divert to to arg_parse() in this case.  */
     return arg_parse (arg, opts);
 
   initialize (arg, filename, lineno);
 
+  /* If the LINENO is zero we assume that we are at the start of a
+   * file and we skip over a possible Byte Order Mark.  */
+  if (!*lineno)
+    {
+      unread_buf[0] = getc (fp);
+      unread_buf[1] = getc (fp);
+      unread_buf[2] = getc (fp);
+      if (unread_buf[0] != 0xef
+          || unread_buf[1] != 0xbb
+          || unread_buf[2] != 0xbf)
+        unread_buf_count = 3;
+    }
+
   /* Find the next keyword.  */
   state = i = 0;
   for (;;)
     {
-      c = getc (fp);
+      if (unread_buf_count)
+        c = unread_buf[3 - unread_buf_count--];
+      else
+        c = getc (fp);
       if (c == '\n' || c== EOF )
         {
           if ( c != EOF )

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-gnupg/gnupg2.git



More information about the Pkg-gnupg-commit mailing list