Thread: [patch] CodeGuard fix
Greetings, the following patch (against 7.03.0200) contains two things: - The first hunk is necessary to build psqlodbc using Borland C++ Builder 6.0 [I successfully built the whole DLL, which requires a few other patches] - The second hunk is necessary as Borland's sscanf would do all sorts of things with rest[] when CodeGuard is active (I wonder if it's not their way of hinting that we have an opportunity for a buffer overrun here). I wonder if we shouldn't apply a better fix, to avoid entirely the "%s" format argument to sscanf, and finding another way to locate a "const char* rest" within the caller-supplied str? Best Regards, -- Cyrille
Cyrille Chépélov wrote: > the following patch (against 7.03.0200) contains two things: Note to self: ensure proper blood caffeine content before sending messages. -- Cyrille --- psqlodbc-07.03.0200.vanilla/convert.c 2003-10-20 04:37:42.000000000 +0200 +++ psqlodbc-07.03.0200/convert.c 2003-12-17 10:24:12.000000000 +0100 @@ -44,9 +44,15 @@ #endif #ifdef __CYGWIN__ -#define TIMEZONE_GLOBAL _timezone +# define TIMEZONE_GLOBAL _timezone #elif defined(WIN32) || defined(HAVE_INT_TIMEZONE) -#define TIMEZONE_GLOBAL timezone +# ifdef __BORLANDC__ +# define timezone _timzone +# define daylight _daylight +# define TIMEZONE_GLOBAL _timezone +# else +# define TIMEZONE_GLOBAL timezone +# endif #endif /* @@ -195,6 +201,7 @@ *zone = 0; st->fr = 0; st->infinity = 0; + rest[0] = 0; if ((scnt = sscanf(str, "%4d-%2d-%2d %2d:%2d:%2d%s", &st->y, &st->m, &st->d, &st->hh, &st->mm, &st->ss, rest)) < 6) return FALSE; else if (scnt == 6)
> -----Original Message----- > From: Cyrille Ch���~ov > > Cyrille Chépélov wrote: > > > the following patch (against 7.03.0200) contains two things: > > Note to self: ensure proper blood caffeine content before > sending messages. In your patch . . +# ifdef __BORLANDC__ +# define timezone _timzone +# define daylight _daylight What are the above 2 lines for ? regards, Hiroshi Inoue
Hiroshi Inoue wrote: > +# ifdef __BORLANDC__ > +# define timezone _timzone > +# define daylight _daylight > > What are the above 2 lines for ? Oh, to account for stupid spraying of underscores in Borland's libc. I can give you a whole BC++ patch if you want -- in my experience with these 10-30 minutes of effort, the resulting DLL works as fine as if compiled with VC++. Best Regards, -- Cyrille
Thanks. Patch applied. --------------------------------------------------------------------------- Cyrille Ch�p�lov wrote: > Cyrille Ch?p?lov wrote: > > > the following patch (against 7.03.0200) contains two things: > > Note to self: ensure proper blood caffeine content before sending messages. > > -- Cyrille > > > > --- psqlodbc-07.03.0200.vanilla/convert.c 2003-10-20 04:37:42.000000000 +0200 > +++ psqlodbc-07.03.0200/convert.c 2003-12-17 10:24:12.000000000 +0100 > @@ -44,9 +44,15 @@ > #endif > > #ifdef __CYGWIN__ > -#define TIMEZONE_GLOBAL _timezone > +# define TIMEZONE_GLOBAL _timezone > #elif defined(WIN32) || defined(HAVE_INT_TIMEZONE) > -#define TIMEZONE_GLOBAL timezone > +# ifdef __BORLANDC__ > +# define timezone _timzone > +# define daylight _daylight > +# define TIMEZONE_GLOBAL _timezone > +# else > +# define TIMEZONE_GLOBAL timezone > +# endif > #endif > > /* > @@ -195,6 +201,7 @@ > *zone = 0; > st->fr = 0; > st->infinity = 0; > + rest[0] = 0; > if ((scnt = sscanf(str, "%4d-%2d-%2d %2d:%2d:%2d%s", &st->y, &st->m, &st->d, &st->hh, &st->mm, &st->ss, rest)) < 6) > return FALSE; > else if (scnt == 6) > > > ---------------------------(end of broadcast)--------------------------- > TIP 7: don't forget to increase your free space map settings -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073