Обсуждение: Build failure with VS 2012 due to uninitialized pointers
Hi folks VS 2012 reports possibly uninitialized pointer access: c:\users\administrator\desktop\psqlodbc\connection.c(2073): error C4703: potentially uninitialized local pointer variable 'sock' used which is if (0 != (sockerr = SOCK_get_errcode(sock))) { in original_CC_connect(...). c:\users\administrator\desktop\psqlodbc\dlg_wingui.c(177): error C4703: potentially uninitialized local pointer variable 'comval' used which is CheckDlgButton(hdlg, DRV_COMMLOG, comval->commlog); By default it treats these as fatal errors, so the codebase won't build on VS 2012. BuildAll.ps1 doesn't seem to provide a simple way to pass extra CFLAGS into the build (to pass /sdl- per http://msdn.microsoft.com/en-us/library/jj161081.aspx), and it isn't really desirable to just turn the warning off anyway. I've taken a look at what's going on. In the case of the first one the function is not small and its flow isn't simple. I thought I'd mention the issue here first, in case somebody was able to immediately see what's missing. While I could just: - SocketClass *sock; + SocketClass *sock = NULL; I'm pretty sure that's just papering over whatever the real problem is. The second, the comval error, looks to be a missing default: clause in the case. If this were backend code I'd just toss in an elog(FATAL,"Unreachable code reached"); but that's not going to be much good in psqlODBC. -- Craig Ringer http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services
Thanks. Confirmed and committed. regards, Hiroshi Inoue (2014/06/12 16:53), Craig Ringer wrote: > Hi folks > > VS 2012 reports possibly uninitialized pointer access: > > > > > c:\users\administrator\desktop\psqlodbc\connection.c(2073): error C4703: > potentially uninitialized local pointer variable 'sock' used > > which is > > if (0 != (sockerr = SOCK_get_errcode(sock))) > { > > in original_CC_connect(...). > > > > c:\users\administrator\desktop\psqlodbc\dlg_wingui.c(177): error C4703: > potentially uninitialized local pointer variable 'comval' used > > which is > > CheckDlgButton(hdlg, DRV_COMMLOG, comval->commlog); > > > > > By default it treats these as fatal errors, so the codebase won't build > on VS 2012. BuildAll.ps1 doesn't seem to provide a simple way to pass > extra CFLAGS into the build (to pass /sdl- per > http://msdn.microsoft.com/en-us/library/jj161081.aspx), and it isn't > really desirable to just turn the warning off anyway. > > > I've taken a look at what's going on. In the case of the first one the > function is not small and its flow isn't simple. I thought I'd mention > the issue here first, in case somebody was able to immediately see > what's missing. While I could just: > > > - SocketClass *sock; > + SocketClass *sock = NULL; > > I'm pretty sure that's just papering over whatever the real problem is. > > > The second, the comval error, looks to be a missing default: clause in > the case. If this were backend code I'd just toss in an > > elog(FATAL,"Unreachable code reached"); > > but that's not going to be much good in psqlODBC.
On 06/14/2014 09:36 PM, Inoue, Hiroshi wrote: > > Confirmed and committed. It looks like you've initialized both to NULL. That'll make the warning go away, but doesn't mean there isn't potentially a bug in the handling of the socket pointer. I'm sure you have no more time to chase it up than I do, so I'm not asking you to do any more. I'm just making a note here so a search in the archives that finds this sees that there might still be more to this issue that we haven't covered. -- Craig Ringer http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services