dovecot: T_FRAME() changes caused infinite looping.

dovecot at dovecot.org dovecot at dovecot.org
Tue Dec 18 13:46:38 EET 2007


details:   http://hg.dovecot.org/dovecot/rev/0008fb28e62b
changeset: 6997:0008fb28e62b
user:      Timo Sirainen <tss at iki.fi>
date:      Tue Dec 18 13:46:33 2007 +0200
description:
T_FRAME() changes caused infinite looping.

diffstat:

1 file changed, 7 insertions(+), 6 deletions(-)
src/plugins/acl/acl-backend-vfile.c |   13 +++++++------

diffs (43 lines):

diff -r 021b6900a900 -r 0008fb28e62b src/plugins/acl/acl-backend-vfile.c
--- a/src/plugins/acl/acl-backend-vfile.c	Mon Dec 17 17:32:26 2007 +0200
+++ b/src/plugins/acl/acl-backend-vfile.c	Tue Dec 18 13:46:33 2007 +0200
@@ -292,7 +292,7 @@ acl_backend_vfile_read(struct acl_object
 	struct stat st;
 	const char *line;
 	unsigned int linenum;
-	int fd, ret = 1;
+	int fd, ret = 0;
 
 	*is_dir_r = FALSE;
 
@@ -360,24 +360,25 @@ acl_backend_vfile_read(struct acl_object
 			break;
 	}
 
-	if (input->stream_errno != 0) {
+	if (ret < 0) {
+		/* parsing failure */
+	} else if (input->stream_errno != 0) {
 		if (input->stream_errno == ESTALE && try_retry)
 			ret = 0;
 		else {
 			ret = -1;
 			i_error("read(%s) failed: %m", path);
 		}
-	}
-
-	if (ret > 0) {
+	} else {
 		if (fstat(fd, &st) < 0) {
 			if (errno == ESTALE && try_retry)
 				ret = 0;
 			else {
 				ret = -1;
-				i_error("read(%s) failed: %m", path);
+				i_error("fstat(%s) failed: %m", path);
 			}
 		} else {
+			ret = 1;
 			validity->last_read_time = ioloop_time;
 			validity->last_mtime = st.st_mtime;
 			validity->last_size = st.st_size;


More information about the dovecot-cvs mailing list