]> granicus.if.org Git - apache/commitdiff
eos_bucket->read() no longer returns AP_END_OF_BRIGADE, so check for
authorJeff Trawick <trawick@apache.org>
Thu, 14 Sep 2000 15:31:58 +0000 (15:31 +0000)
committerJeff Trawick <trawick@apache.org>
Thu, 14 Sep 2000 15:31:58 +0000 (15:31 +0000)
eos in a different manner.

Catch bad retcodes from bucket->read().

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@86226 13f79535-47bb-0310-9956-ffa450edef68

modules/experimental/mod_charset_lite.c

index dc22897d4a3662bcfdb35f1177bcb4a7deb88ab1..d1d54e09352de38b42aea7a5865bbc2e6d79d39b 100644 (file)
@@ -97,6 +97,7 @@ typedef enum {
     EES_INIT = 0,   /* no error info yet; value must be 0 for easy init */
     EES_LIMIT,      /* built-in restriction encountered */
     EES_INCOMPLETE_CHAR, /* incomplete multi-byte char at end of content */
+    EES_BUCKET_READ,
     EES_BAD_INPUT   /* input data invalid */
 } ees_t;
 
@@ -472,6 +473,9 @@ static void log_xlate_error(ap_filter_t *f, apr_status_t rv)
     case EES_BAD_INPUT:
         msg = "xlate_filter() - an input character was invalid";
         break;
+    case EES_BUCKET_READ:
+        msg = "xlate_filter() - bucket read routine failed";
+        break;
     case EES_INCOMPLETE_CHAR:
         strcpy(msgbuf, "xlate_filter() - incomplete char at end of input - ");
         cur = 0;
@@ -531,10 +535,16 @@ static apr_status_t xlate_filter(ap_filter_t *f, ap_bucket_brigade *bb)
                 ap_bucket_destroy(consumed_bucket);
                 consumed_bucket = NULL;
             }
-            if (dptr == AP_BRIGADE_SENTINEL(bb) ||
-                dptr->read(dptr, &cur_str, &cur_len, 0) == AP_END_OF_BRIGADE) {
+            if (dptr == AP_BRIGADE_SENTINEL(bb)) {
+                done = 1;
+                break;
+            }
+            if (dptr->type == AP_BUCKET_EOS) {
                 done = 1;
-                if (dptr != AP_BRIGADE_SENTINEL(bb) && ctx->saved) {
+                cur_len = AP_END_OF_BRIGADE; /* XXX yuck, but that tells us to send
+                                 * eos down; when we minimize our bb construction
+                                 * we'll fix this crap */
+                if (ctx->saved) {
                     /* Oops... we have a partial char from the previous bucket
                      * that won't be completed because there's no more data.
                      */
@@ -543,6 +553,12 @@ static apr_status_t xlate_filter(ap_filter_t *f, ap_bucket_brigade *bb)
                 }
                 break;
             }
+            rv = dptr->read(dptr, &cur_str, &cur_len, 0);
+            if (rv != APR_SUCCESS) {
+                done = 1;
+                ctx->ees = EES_BUCKET_READ;
+                break;
+            }
             consumed_bucket = dptr; /* for axing when we're done reading it */
             dptr = AP_BUCKET_NEXT(dptr); /* get ready for when we access the 
                                           * next bucket */