On Mon, Apr 15, 2013 at 10:17:45PM +0200, Harald Hoyer wrote: > Am 15.04.2013 21:29, schrieb Zbigniew Jędrzejewski-Szmek: > > On Mon, Apr 15, 2013 at 06:41:52PM +0200, har...@redhat.com wrote: > >> From: Harald Hoyer <har...@redhat.com> > >> > >> use stack_size_guess() to get rid of LINE_MAX > >> --- > >> src/journal/journal-send.c | 99 > >> +++++++++++++++++++++++++++++++---------- > >> src/journal/test-journal-send.c | 92 > >> +++++++++++++++++++++++++++++++++----- > >> 2 files changed, 156 insertions(+), 35 deletions(-) > >> > >> diff --git a/src/journal/journal-send.c b/src/journal/journal-send.c > >> index 4b9109a..2ff04b4 100644 > >> --- a/src/journal/journal-send.c > >> +++ b/src/journal/journal-send.c > >> @@ -26,6 +26,7 @@ > >> #include <unistd.h> > >> #include <fcntl.h> > >> #include <printf.h> > >> +#include <sys/resource.h> > >> > >> #define SD_JOURNAL_SUPPRESS_LOCATION > >> > >> @@ -35,15 +36,17 @@ > >> > >> #define SNDBUF_SIZE (8*1024*1024) > >> > >> -#define ALLOCA_CODE_FUNC(f, func) \ > >> - do { \ > >> - size_t _fl; \ > >> - const char *_func = (func); \ > >> - char **_f = &(f); \ > >> - _fl = strlen(_func) + 1; \ > >> - *_f = alloca(_fl + 10); \ > >> - memcpy(*_f, "CODE_FUNC=", 10); \ > >> - memcpy(*_f + 10, _func, _fl); \ > >> +#define ALLOCA_CODE_FUNC(f, func) \ > >> + do { \ > >> + size_t _fl; \ > >> + const char *_func = (func); \ > >> + char **_f = &(f); \ > >> + _fl = strlen(_func) + 1; \ > >> + if (stack_size_guess() < (_fl + 10)) \ > > Can't _fl + 10 overflow (on 32 bit)? > > You mean signed vs unsigned? No, I mean _fl can be 4×2³² - 9, and, then _fl+10 == 1. C99 says size_t is "at least 16 bits", although I don't think that less than 32 bits is common. On a modern machine strlen() on a 4GB string should take about a second, so it seems plausible to feed this function with a big enough string, maybe on a kernel with PAE.
Zbyszek _______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel