iliaa Wed Nov 17 18:42:14 2004 EDT Modified files: /php-src/ext/dio dio.c Log: Gracefully handle allocation failure. http://cvs.php.net/diff.php/php-src/ext/dio/dio.c?r1=1.37&r2=1.38&ty=u Index: php-src/ext/dio/dio.c diff -u php-src/ext/dio/dio.c:1.37 php-src/ext/dio/dio.c:1.38 --- php-src/ext/dio/dio.c:1.37 Thu Sep 2 23:35:22 2004 +++ php-src/ext/dio/dio.c Wed Nov 17 18:42:14 2004 @@ -88,8 +88,10 @@ 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) @@ -158,10 +160,13 @@ 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]) @@ -194,7 +199,10 @@ RETURN_FALSE; } - new_php_fd(&f, fd); + + if (!new_php_fd(&f, fd)) { + RETURN_FALSE; + } ZEND_REGISTER_RESOURCE(return_value, f, le_fd); } /* }}} */ @@ -436,7 +444,9 @@ 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; }
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php