[prelude-cvslog] r9818 - libprelude/trunk/src

noreply at prelude-ids.org noreply at prelude-ids.org
Fri Aug 17 18:59:25 CEST 2007


Author: yoann
Date: 2007-08-17 18:59:21 +0200 (Fri, 17 Aug 2007)
New Revision: 9818

Modified:
   libprelude/trunk/src/prelude-io.c
Log:
Protect against bad prelude-io usage.


Modified: libprelude/trunk/src/prelude-io.c
===================================================================
--- libprelude/trunk/src/prelude-io.c	2007-08-17 16:54:22 UTC (rev 9817)
+++ libprelude/trunk/src/prelude-io.c	2007-08-17 16:59:21 UTC (rev 9818)
@@ -220,6 +220,7 @@
          * ferror / clearerror can be macro that might dereference fd_ptr.
          */
         fd = pio->fd_ptr;
+        prelude_return_val_if_fail(fd, -1);
 
         ret = fread(buf, count, 1, fd);
         if ( ret <= 0 ) {
@@ -240,6 +241,8 @@
 {
         size_t ret;
 
+        prelude_return_val_if_fail(pio->fd_ptr, -1);
+
         ret = fwrite(buf, count, 1, pio->fd_ptr);
         if ( ret <= 0 )
                 return ret;
@@ -254,6 +257,7 @@
 
 static int file_close(prelude_io_t *pio)
 {
+        prelude_return_val_if_fail(pio->fd_ptr, -1);
         return fclose(pio->fd_ptr);
 }
 
@@ -476,7 +480,7 @@
  */
 ssize_t prelude_io_read(prelude_io_t *pio, void *buf, size_t count)
 {
-        prelude_return_val_if_fail(pio && buf, -1);
+        prelude_return_val_if_fail(pio && pio->read && buf, -1);
         return pio->read(pio, buf, count);
 }
 
@@ -610,7 +614,7 @@
  */
 ssize_t prelude_io_write(prelude_io_t *pio, const void *buf, size_t count)
 {
-        prelude_return_val_if_fail(pio && buf, -1);
+        prelude_return_val_if_fail(pio && pio->write && buf, -1);
         return pio->write(pio, buf, count);
 }
 
@@ -678,7 +682,7 @@
  */
 int prelude_io_close(prelude_io_t *pio)
 {
-        prelude_return_val_if_fail(pio, -1);
+        prelude_return_val_if_fail(pio && pio->close, -1);
         return pio->close(pio);
 }
 
@@ -695,7 +699,7 @@
  */
 int prelude_io_new(prelude_io_t **ret)
 {
-        *ret = malloc(sizeof(**ret));
+        *ret = calloc(1, sizeof(**ret));
         if ( ! *ret )
                 return prelude_error_from_errno(errno);
 




More information about the Prelude-cvslog mailing list