Author: rhuijben
Date: Sat Oct 31 22:51:40 2015
New Revision: 1711703

URL: http://svn.apache.org/viewvc?rev=1711703&view=rev
Log:
Avoid using data and *data when a read returns 0 bytes. Several
buckets don't set data in this case.

* buckets/hpack_buckets.c
  (hpack_process): Be a bit more careful.

* protocols/http2_stream.c
  (serf_http2__stream_processor): Don't use *data when len is 0.
    Most buckets don't set *data in this case on error paths.
    Solves segfault during testing.

Modified:
    serf/trunk/buckets/hpack_buckets.c
    serf/trunk/protocols/http2_stream.c

Modified: serf/trunk/buckets/hpack_buckets.c
URL: 
http://svn.apache.org/viewvc/serf/trunk/buckets/hpack_buckets.c?rev=1711703&r1=1711702&r2=1711703&view=diff
==============================================================================
--- serf/trunk/buckets/hpack_buckets.c (original)
+++ serf/trunk/buckets/hpack_buckets.c Sat Oct 31 22:51:40 2015
@@ -1295,8 +1295,9 @@ hpack_process(serf_bucket_t *bucket)
 
                   if (!SERF_BUCKET_READ_ERROR(status))
                     {
-                      memcpy(&ctx->buffer[ctx->buffer_used],
-                             data, len);
+                      if (len > 0)
+                        memcpy(&ctx->buffer[ctx->buffer_used],
+                               data, len);
                       ctx->buffer_used += len;
                     }
                   else
@@ -1374,8 +1375,10 @@ hpack_process(serf_bucket_t *bucket)
 
                   if (!SERF_BUCKET_READ_ERROR(status))
                     {
-                      memcpy(&ctx->buffer[ctx->buffer_used],
-                             data, len);
+                      if (len > 0)
+                        memcpy(&ctx->buffer[ctx->buffer_used],
+                               data, len);
+
                       ctx->buffer_used += len;
                     }
                   else

Modified: serf/trunk/protocols/http2_stream.c
URL: 
http://svn.apache.org/viewvc/serf/trunk/protocols/http2_stream.c?rev=1711703&r1=1711702&r2=1711703&view=diff
==============================================================================
--- serf/trunk/protocols/http2_stream.c (original)
+++ serf/trunk/protocols/http2_stream.c Sat Oct 31 22:51:40 2015
@@ -251,22 +251,26 @@ serf_http2__stream_processor(void *baton
 
       if (!SERF_BUCKET_READ_ERROR(status))
         {
-          char *printable = serf_bstrmemdup(bucket->allocator, data, len);
-          char *c;
+          if (len > 0)
+          {
+            char *printable = serf_bstrmemdup(bucket->allocator, data, len);
+            char *c;
 
-          for (c = printable; *c; c++)
-            {
-              if (((*c < ' ') || (*c > '\x7E')) && !strchr("\r\n", *c)) /* 
Poor mans isctrl*/
+            for (c = printable; *c; c++)
+              {
+                /* Poor mans isctrl */
+                if (((*c < ' ') || (*c > '\x7E')) && !strchr("\r\n", *c))
                 {
                   *c = ' ';
                 }
-            }
+              }
 
 #ifdef _DEBUG
-          fputs(printable, stdout);
+            fputs(printable, stdout);
 #endif
 
-          serf_bucket_mem_free(bucket->allocator, printable);
+            serf_bucket_mem_free(bucket->allocator, printable);
+          }
         }
     }
 


Reply via email to