git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [msysGit] [PATCH v3 02/14] mingw: implement syslog

From
Erik Faye-Lund <kusmabite@gmail.com>
Date
Oct 11, 2010, 15:59 UTC
Message-ID
<AANLkTikXMCgC0P-=255SRvqfDSGua7Gcb-jmqS8paUNj@mail.gmail.com>
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:
Show 32 quoted lines
> 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
Previous: Erik Faye-LundNext: Erik Faye-Lund
Message 16 of 43 in “daemon-win32”
  1. 00/14 daemon-win32Erik Faye-Lund, Oct 10, 2010
  2. 01/14 mingw: add network-wrappers for daemonErik Faye-Lund, Oct 10, 2010
  3. Eric SunshineOct 10, 2010
  4. Erik Faye-LundOct 10, 2010
  5. Eric SunshineOct 10, 2010
  6. 02/14 mingw: implement syslogErik Faye-Lund, Oct 10, 2010
  7. Eric SunshineOct 10, 2010
  8. Erik Faye-LundOct 10, 2010
  9. Johannes SixtOct 10, 2010
  10. Erik Faye-LundOct 10, 2010
  11. Eric SunshineOct 10, 2010
  12. Erik Faye-LundOct 10, 2010
  13. Erik Faye-LundOct 10, 2010
  14. Eric SunshineOct 10, 2010
  15. Erik Faye-LundOct 11, 2010
  16. Erik Faye-LundOct 11, 2010
  17. 03/14 compat: add inet_pton and inet_ntop prototypesErik Faye-Lund, Oct 10, 2010
  18. 04/14 inet_ntop: fix a couple of old-style declsErik Faye-Lund, Oct 10, 2010
  19. 05/14 mingw: use real pidErik Faye-Lund, Oct 10, 2010
  20. Eric SunshineOct 10, 2010
  21. Erik Faye-LundOct 10, 2010
  22. Eric SunshineOct 10, 2010
  23. 06/14 mingw: support waitpid with pid > 0 and WNOHANGErik Faye-Lund, Oct 10, 2010
  24. 07/14 mingw: add kill emulationErik Faye-Lund, Oct 10, 2010
  25. 08/14 daemon: use run-command api for async servingErik Faye-Lund, Oct 10, 2010
  26. Eric SunshineOct 10, 2010
  27. Erik Faye-LundOct 10, 2010
  28. 09/14 daemon: use full buffered mode for stderrErik Faye-Lund, Oct 10, 2010
  29. 10/14 Improve the mingw getaddrinfo stub to handle more use casesErik Faye-Lund, Oct 10, 2010
  30. 11/14 daemon: report connection from root-processErik Faye-Lund, Oct 10, 2010
  31. Johannes SixtOct 10, 2010
  32. Erik Faye-LundOct 10, 2010
  33. Erik Faye-LundOct 10, 2010
  34. Ævar Arnfjörð BjarmasonOct 10, 2010
  35. Erik Faye-LundOct 10, 2010
  36. 12/14 mingw: import poll-emulation from gnulibErik Faye-Lund, Oct 10, 2010
  37. Ævar Arnfjörð BjarmasonOct 10, 2010
  38. Erik Faye-LundOct 10, 2010
  39. Erik Faye-LundOct 10, 2010
  40. Ævar Arnfjörð BjarmasonOct 10, 2010
  41. 13/14 mingw: use poll-emulation from gnulibErik Faye-Lund, Oct 10, 2010
  42. 14/14 daemon: only use posix features on posix systemsErik Faye-Lund, Oct 10, 2010
  43. Ævar Arnfjörð BjarmasonOct 10, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.