On Thu, 19 Apr 2007, A Large Angry SCM wrote: > This fixes a problem my repository mirroring script has been having since > the git-fetch--tool was added to master in the middle of March. However, > it is not a proper fix since it causes actual errors from snprintf() to be > ignored. A proper fix is complicated by the lack of a consistent indicator > that the buffer is too small across snprintf() implementations. . . . > if (sizeof(msg) <= len) > - die("insanely long action"); > + msg[sizeof(msg)-1] = '\0'; Or you could just let the whole thing through? diff --git a/builtin-fetch--tool.c b/builtin-fetch--tool.c index e9d6764..9b5ae9f 100644 --- a/builtin-fetch--tool.c +++ b/builtin-fetch--tool.c @@ -36,21 +36,26 @@ static int update_ref(const char *action, unsigned char *oldval) { int len; - char msg[1024]; + char buffer[1024]; + int ret = 0; + char *msg = buffer; char *rla = getenv("GIT_REFLOG_ACTION"); static struct ref_lock *lock; if (!rla) rla = "(reflog update)"; - len = snprintf(msg, sizeof(msg), "%s: %s", rla, action); - if (sizeof(msg) <= len) - die("insanely long action"); + len = strlen(rla) + strlen(action) + 3; + if (len > sizeof(buffer)) + msg = xmalloc(len); + snprintf(msg, len, "%s: %s", rla, action); lock = lock_any_ref_for_update(refname, oldval); if (!lock) - return 1; + ret = 1; if (write_ref_sha1(lock, sha1, msg) < 0) - return 1; - return 0; + ret = 1; + if (msg != buffer) + free(msg); + return ret; } static int update_local_ref(const char *name, -- 1.5.1.1 - 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