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

Reply via email to