diff options
-rw-r--r-- | src/ChangeLog | 5 | ||||
-rw-r--r-- | src/gpgcedev.c | 21 |
2 files changed, 26 insertions, 0 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index 6098e33..2199e24 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2010-12-20 Werner Koch <[email protected]> + + * gpgcedev.c (pipeimpl_new): Check malloc and CreateEvent return + codes. + 2010-12-14 Werner Koch <[email protected]> * gpgcemgr.c (wchar_to_utf8, utf8_to_wchar, set_show_registry): New. diff --git a/src/gpgcedev.c b/src/gpgcedev.c index 69dcd6f..a097c88 100644 --- a/src/gpgcedev.c +++ b/src/gpgcedev.c @@ -251,11 +251,32 @@ pipeimpl_new (void) pimpl->refcnt = 1; pimpl->buffer_size = 512; pimpl->buffer = malloc (pimpl->buffer_size); + if (!pimpl->buffer) + { + DeleteCriticalSection (&pimpl->critsect); + free (pimpl); + return NULL; + } pimpl->buffer_len = 0; pimpl->buffer_pos = 0; pimpl->flags = 0; pimpl->space_available = CreateEvent (NULL, FALSE, FALSE, NULL); + if (!pimpl->space_available) + { + free (pimpl->buffer); + DeleteCriticalSection (&pimpl->critsect); + free (pimpl); + return NULL; + } pimpl->data_available = CreateEvent (NULL, FALSE, FALSE, NULL); + if (!pimpl->data_available) + { + CloseHandle (pimpl->space_available); + free (pimpl->buffer); + DeleteCriticalSection (&pimpl->critsect); + free (pimpl); + return NULL; + } pimpl->monitor_proc = INVALID_HANDLE_VALUE; pimpl->monitor_access = 0; pimpl->monitor_rvid = 0; |