Am 15.03.2010 16:30, schrieb Henrik Grubbström (Grubba): > The code to contract $Id:xxxxx$ strings could eat an arbitrary amount > of source text if the terminating $ was lost. It now refuses to > contract $Id:xxxxx$ strings spanning multiple lines. > > Signed-off-by: Henrik Grubbström <grubba@xxxxxxxxxx> > --- > The behaviour implemented by the patch is in line with what other > VCSes that implement $Id$ do. > > convert.c | 17 +++++++++++++++-- > t/t0021-conversion.sh | 16 ++++++++++------ > 2 files changed, 25 insertions(+), 8 deletions(-) > > diff --git a/convert.c b/convert.c > index 4f8fcb7..91207ab 100644 > --- a/convert.c > +++ b/convert.c > @@ -425,6 +425,7 @@ static int count_ident(const char *cp, unsigned long size) > cnt++; > break; > } > + if (ch == '\n') break; Style: if (ch == '\n') break; > } > } > return cnt; > @@ -433,7 +434,7 @@ static int count_ident(const char *cp, unsigned long size) > static int ident_to_git(const char *path, const char *src, size_t len, > struct strbuf *buf, int ident) > { > - char *dst, *dollar; > + char *dst, *dollar, *nl; > > if (!ident || !count_ident(src, len)) > return 0; > @@ -455,6 +456,12 @@ static int ident_to_git(const char *path, const char *src, size_t len, > dollar = memchr(src + 3, '$', len - 3); > if (!dollar) > break; > + nl = memchr(src + 3, '\n', len - 3); > + if (nl && nl < dollar) { > + /* Line break before the next dollar. */ > + continue; > + } > + You only need to search up to the previously found dollar sign here: if (memchr(src + 3, '\n', dollar - src - 3)) continue; > memcpy(dst, "Id$", 3); > dst += 3; > len -= dollar + 1 - src; > @@ -470,7 +477,7 @@ static int ident_to_worktree(const char *path, const char *src, size_t len, > struct strbuf *buf, int ident) > { > unsigned char sha1[20]; > - char *to_free = NULL, *dollar; > + char *to_free = NULL, *dollar, *nl; > int cnt; > > if (!ident) > @@ -514,6 +521,12 @@ static int ident_to_worktree(const char *path, const char *src, size_t len, > break; > } > > + nl = memchr(src + 3, '\n', len - 3); > + if (nl && nl < dollar) { > + /* Line break before the next dollar. */ > + continue; > + } > + Ditto. René -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html