diff options
author | Ilia Alshanetsky <iliaa@php.net> | 2004-11-17 23:43:31 +0000 |
---|---|---|
committer | Ilia Alshanetsky <iliaa@php.net> | 2004-11-17 23:43:31 +0000 |
commit | 4bd84a5e6946f3d103919900d73a3c4c80b9defb (patch) | |
tree | 6d75f5abbe4da908902484332930fdbcfbd9044c | |
parent | b5d739b88b229c7457dc658533647bf4a031114a (diff) | |
download | php-git-4bd84a5e6946f3d103919900d73a3c4c80b9defb.tar.gz |
MFH: Gracefully handle allocation failure.
-rw-r--r-- | ext/dio/dio.c | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/ext/dio/dio.c b/ext/dio/dio.c index 5315ef69b3..e81e966696 100644 --- a/ext/dio/dio.c +++ b/ext/dio/dio.c @@ -79,8 +79,10 @@ ZEND_GET_MODULE(dio) static void _dio_close_fd(zend_rsrc_list_entry *rsrc TSRMLS_DC) { php_fd_t *f = (php_fd_t *) rsrc->ptr; - close(f->fd); - free(f); + if (f) { + close(f->fd); + free(f); + } } #define RDIOC(c) REGISTER_LONG_CONSTANT(#c, c, CONST_CS | CONST_PERSISTENT) @@ -142,10 +144,13 @@ PHP_MINFO_FUNCTION(dio) php_info_print_table_end(); } -static void new_php_fd(php_fd_t **f, int fd) +static int new_php_fd(php_fd_t **f, int fd) { - *f = malloc(sizeof(php_fd_t)); + if (!(*f = malloc(sizeof(php_fd_t)))) { + return 0; + } (*f)->fd = fd; + return 1; } /* {{{ proto resource dio_open(string filename, int flags[, int mode]) @@ -179,7 +184,10 @@ PHP_FUNCTION(dio_open) RETURN_FALSE; } - new_php_fd(&f, fd); + + if (!new_php_fd(&f, fd)) { + RETURN_FALSE; + } ZEND_REGISTER_RESOURCE(return_value, f, le_fd); } /* }}} */ @@ -421,7 +429,9 @@ PHP_FUNCTION(dio_fcntl) RETURN_FALSE; } - new_php_fd(&new_f, fcntl(f->fd, cmd, Z_LVAL_P(arg))); + if (!new_php_fd(&new_f, fcntl(f->fd, cmd, Z_LVAL_P(arg)))) { + RETURN_FALSE; + } ZEND_REGISTER_RESOURCE(return_value, new_f, le_fd); break; } |