On Thu, 2015-04-16 at 16:05 +0200, Carlos Martín Nieto wrote: > Some text editors like Notepad or LibreOffice write an UTF-8 BOM in > order to indicate that the file is Unicode text rather than whatever the > current locale would indicate. > > If someone uses such an editor to edit a gitignore file, we are left > with those three bytes at the beginning of the file. If we do not skip > them, we will attempt to match a filename with the BOM as prefix, which > won't match the files the user is expecting.
Signed-off-by: Carlos Martín Nieto <c...@elego.de> which I keep forgetting. > > --- > > If you're wondering how I came up with LibreOffice, I was doing a > workshop recently and one of the participants was not content with the > choice of vim or nano, so he opened LibreOffice to edit the gitignore > file with confusing consequences. > > This codepath doesn't go as far as the config code in validating that > we do not have a partial BOM which would mean there's some invalid > content, but we don't really have invalid content any other way, as > we're just dealing with a list of paths in the file. > > dir.c | 8 +++++++- > t/t7061-wtstatus-ignore.sh | 2 ++ > 2 files changed, 9 insertions(+), 1 deletion(-) > > diff --git a/dir.c b/dir.c > index 0943a81..6368247 100644 > --- a/dir.c > +++ b/dir.c > @@ -581,6 +581,7 @@ int add_excludes_from_file_to_list(const char *fname, > struct stat st; > int fd, i, lineno = 1; > size_t size = 0; > + static const unsigned char *utf8_bom = (unsigned char *) "\xef\xbb\xbf"; > char *buf, *entry; > > fd = open(fname, O_RDONLY); > @@ -617,7 +618,12 @@ int add_excludes_from_file_to_list(const char *fname, > } > > el->filebuf = buf; > - entry = buf; > + > + if (size >= 3 && !memcmp(buf, utf8_bom, 3)) > + entry = buf + 3; > + else > + entry = buf; > + > for (i = 0; i < size; i++) { > if (buf[i] == '\n') { > if (entry != buf + i && entry[0] != '#') { > diff --git a/t/t7061-wtstatus-ignore.sh b/t/t7061-wtstatus-ignore.sh > index 460789b..0a06fbf 100755 > --- a/t/t7061-wtstatus-ignore.sh > +++ b/t/t7061-wtstatus-ignore.sh > @@ -13,6 +13,8 @@ EOF > > test_expect_success 'status untracked directory with --ignored' ' > echo "ignored" >.gitignore && > + sed -e "s/^/\xef\xbb\xbf/" .gitignore >.gitignore.new && > + mv .gitignore.new .gitignore && > mkdir untracked && > : >untracked/ignored && > : >untracked/uncommitted && -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html