git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Erik Faye-Lund <kusmabite@gmail.com>
To: Eric Sunshine <ericsunshine@gmail.com>
Cc: git@vger.kernel.org, msysgit@googlegroups.com, j6t@kdbg.org,
	Mike Pape <dotzenlabs@gmail.com>
Subject: Re: [msysGit] [PATCH v3 02/14] mingw: implement syslog
Date: Mon, 11 Oct 2010 17:59:59 +0200	[thread overview]
Message-ID: <AANLkTikXMCgC0P-=255SRvqfDSGua7Gcb-jmqS8paUNj@mail.gmail.com> (raw)
In-Reply-To: <AANLkTi==sd=jm9LZ6p6NLVBMc4wnU0PrYvJY6ezGWiWt@mail.gmail.com>

On Mon, Oct 11, 2010 at 5:28 PM, Erik Faye-Lund <kusmabite@gmail.com> wrote:
> On Mon, Oct 11, 2010 at 1:20 AM, Eric Sunshine <ericsunshine@gmail.com> wrote:
>> On 10/10/2010 6:16 PM, Erik Faye-Lund wrote:
>>>
>>> On Sun, Oct 10, 2010 at 11:28 PM, Eric Sunshine<ericsunshine@gmail.com>
>>>  wrote:
>>>> (On the other hand, for the '%s' check above, the code does report a
>>>> warning
>>>> and then exits, so it is not inconceivable that a '%n' could also emit a
>>>> warning.)
>>>
>>> I guess I could add something like this:
>>>
>>> if (strstr(arg, "%1"))
>>>        warning("arg contains %1, message might be corrupted");
>>>
>>> I don't want to return in that case, because I think some output is
>>> better than no output, and it seems to work on Vista.
>>
>> Rather than emitting a warning, it might be reasonable to perform a simple
>> transformation on the string if it contains a %1 (or %n generally) in order
>> to avoid ReportEvent()'s shortcoming. Even something as simple as inserting
>> a space between '%' and '1' might be sufficiently defensive.
>>
>
> Yes, but I'm tempted to defer fixing this until we see that it's a
> problem in reality. The logic to somehow escape such sequences looks a
> bit nasty in my head. But perhaps strbuf_expand() is the right hammer
> for this use...
>
> Then the logical next question becomes what we should expand it to.
> Does "%1" -> "% 1" make sense for IPv6 addresses?
>

Something along these lines? (on top of the previous patch, uhm, with
some local modifications. Sorry, I'm not at home and do not have the
original version at hand. I'm sure you get the picture, though...)

I also added a +1 that was missing and caused the string to be capped.

diff --git a/compat/mingw.c b/compat/mingw.c
index ae6b448..d1444d2 100644
--- a/compat/mingw.c
+++ b/compat/mingw.c
@@ -1438,6 +1438,11 @@ void openlog(const char *ident, int logopt, int facility)

 void syslog(int priority, const char *fmt, ...)
 {
+	struct strbuf sb = STRBUF_INIT;
+	struct strbuf_expand_dict_entry dict[] = {
+		{"1", "% 1"},
+		{NULL, NULL}
+	};
 	WORD logtype;
 	char *str;
 	int str_len;
@@ -1457,8 +1462,9 @@ void syslog(int priority, const char *fmt, ...)

 	str = malloc(str_len + 1);
 	va_start(ap, fmt);
-	vsnprintf(str, str_len, fmt, ap);
+	vsnprintf(str, str_len + 1, fmt, ap);
 	va_end(ap);
+	strbuf_expand(&sb, str, strbuf_expand_dict_cb, &dict);

 	switch (priority) {
 	case LOG_EMERG:
@@ -1480,10 +1486,6 @@ void syslog(int priority, const char *fmt, ...)
 		break;
 	}

-	/*
-	 * FIXME: ReportEvent() doesn't handle strings containing "%1".
-	 * Such events must currently be reformatted by the caller.
-	 */
 	ReportEventA(ms_eventlog,
 	    logtype,
 	    0,
@@ -1491,9 +1493,10 @@ void syslog(int priority, const char *fmt, ...)
 	    NULL,
 	    1,
 	    0,
-	    (const char **)&str,
+	    (const char **)&sb.buf,
 	    NULL);
 	free(str);
+	sb_release(&sb);
 }

 #undef signal
diff --git a/daemon.c b/daemon.c

  reply	other threads:[~2010-10-11 16:00 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-10-10 13:20 [PATCH v3 00/14] daemon-win32 Erik Faye-Lund
2010-10-10 13:20 ` [PATCH v3 01/14] mingw: add network-wrappers for daemon Erik Faye-Lund
2010-10-10 19:40   ` Eric Sunshine
2010-10-10 20:20     ` Erik Faye-Lund
2010-10-10 21:19       ` Eric Sunshine
2010-10-10 13:20 ` [PATCH v3 02/14] mingw: implement syslog Erik Faye-Lund
2010-10-10 19:50   ` [msysGit] " Eric Sunshine
2010-10-10 20:37     ` Erik Faye-Lund
2010-10-10 20:51       ` Johannes Sixt
2010-10-10 21:17         ` Erik Faye-Lund
2010-10-10 21:28       ` Eric Sunshine
2010-10-10 22:16         ` Erik Faye-Lund
2010-10-10 22:23           ` Erik Faye-Lund
2010-10-10 23:20           ` Eric Sunshine
2010-10-11 15:28             ` [msysGit] " Erik Faye-Lund
2010-10-11 15:59               ` Erik Faye-Lund [this message]
2010-10-10 13:20 ` [PATCH v3 03/14] compat: add inet_pton and inet_ntop prototypes Erik Faye-Lund
2010-10-10 13:20 ` [PATCH v3 04/14] inet_ntop: fix a couple of old-style decls Erik Faye-Lund
2010-10-10 13:20 ` [PATCH v3 05/14] mingw: use real pid Erik Faye-Lund
2010-10-10 19:53   ` Eric Sunshine
2010-10-10 20:52     ` Erik Faye-Lund
2010-10-10 21:56       ` Eric Sunshine
2010-10-10 13:20 ` [PATCH v3 06/14] mingw: support waitpid with pid > 0 and WNOHANG Erik Faye-Lund
2010-10-10 13:20 ` [PATCH v3 07/14] mingw: add kill emulation Erik Faye-Lund
2010-10-10 13:20 ` [PATCH v3 08/14] daemon: use run-command api for async serving Erik Faye-Lund
2010-10-10 19:56   ` [msysGit] " Eric Sunshine
2010-10-10 20:42     ` Erik Faye-Lund
2010-10-10 13:20 ` [PATCH v3 09/14] daemon: use full buffered mode for stderr Erik Faye-Lund
2010-10-10 13:20 ` [PATCH v3 10/14] Improve the mingw getaddrinfo stub to handle more use cases Erik Faye-Lund
2010-10-10 13:20 ` [PATCH v3 11/14] daemon: report connection from root-process Erik Faye-Lund
2010-10-10 18:58   ` Johannes Sixt
2010-10-10 19:31     ` Erik Faye-Lund
2010-10-10 19:42       ` Erik Faye-Lund
2010-10-10 20:14         ` Ævar Arnfjörð Bjarmason
2010-10-10 20:48           ` Erik Faye-Lund
2010-10-10 13:20 ` [PATCH v3 12/14] mingw: import poll-emulation from gnulib Erik Faye-Lund
2010-10-10 14:15   ` Ævar Arnfjörð Bjarmason
2010-10-10 14:28     ` Erik Faye-Lund
2010-10-10 19:34       ` Erik Faye-Lund
2010-10-10 19:51         ` Ævar Arnfjörð Bjarmason
2010-10-10 13:20 ` [PATCH v3 13/14] mingw: use " Erik Faye-Lund
2010-10-10 13:20 ` [PATCH v3 14/14] daemon: only use posix features on posix systems Erik Faye-Lund
2010-10-10 19:40   ` Ævar Arnfjörð Bjarmason

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='AANLkTikXMCgC0P-=255SRvqfDSGua7Gcb-jmqS8paUNj@mail.gmail.com' \
    --to=kusmabite@gmail.com \
    --cc=dotzenlabs@gmail.com \
    --cc=ericsunshine@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=j6t@kdbg.org \
    --cc=msysgit@googlegroups.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).