trafficserver-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From a..@apache.org
Subject trafficserver git commit: Coverity issues: making the sanity check calls useful!
Date Tue, 11 Aug 2015 21:18:30 GMT
Repository: trafficserver
Updated Branches:
  refs/heads/master f65b867bd -> 3d0d2564c


Coverity issues: making the sanity check calls useful!


Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/3d0d2564
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/3d0d2564
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/3d0d2564

Branch: refs/heads/master
Commit: 3d0d2564cc91bcb32174f1b8a61d903a30eda8b5
Parents: f65b867
Author: Syeda Persia Aziz <persia.aziz@yahoo.com>
Authored: Mon Jul 20 18:16:17 2015 -0500
Committer: Alan M. Carroll <amc@apache.org>
Committed: Tue Aug 11 16:00:59 2015 -0500

----------------------------------------------------------------------
 iocore/cache/RamCacheCLFUS.cc                   |  2 +
 lib/atscppapi/src/Plugin.cc                     |  3 +-
 lib/ts/ParseRules.cc                            | 83 --------------------
 lib/ts/ParseRules.h                             |  2 -
 mgmt/Alarms.cc                                  |  1 +
 mgmt/LocalManager.cc                            |  2 +-
 mgmt/MultiFile.cc                               |  1 +
 mgmt/api/EventCallback.cc                       | 82 ++++++++++---------
 .../stale_while_revalidate.c                    |  1 +
 proxy/InkAPI.cc                                 | 20 ++---
 proxy/SocksProxy.cc                             |  6 +-
 proxy/congest/CongestionTest.cc                 |  5 ++
 proxy/http/HttpClientSession.cc                 |  2 +-
 proxy/http2/Http2ClientSession.cc               |  1 +
 proxy/logging/Log.cc                            |  1 +
 15 files changed, 72 insertions(+), 140 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/3d0d2564/iocore/cache/RamCacheCLFUS.cc
----------------------------------------------------------------------
diff --git a/iocore/cache/RamCacheCLFUS.cc b/iocore/cache/RamCacheCLFUS.cc
index 0e051b2..8eb72ce 100644
--- a/iocore/cache/RamCacheCLFUS.cc
+++ b/iocore/cache/RamCacheCLFUS.cc
@@ -310,6 +310,8 @@ RamCacheCLFUS::tick()
     return;
   e = lru[1].dequeue();
 Lfree:
+  if (!e) // e may be NULL after e= lru[1].dequeue()
+    return;
   e->flag_bits.lru = 0;
   history--;
   uint32_t b = e->key.slice32(3) % nbuckets;

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/3d0d2564/lib/atscppapi/src/Plugin.cc
----------------------------------------------------------------------
diff --git a/lib/atscppapi/src/Plugin.cc b/lib/atscppapi/src/Plugin.cc
index 6de4391..176a030 100644
--- a/lib/atscppapi/src/Plugin.cc
+++ b/lib/atscppapi/src/Plugin.cc
@@ -34,5 +34,6 @@ atscppapi::RegisterGlobalPlugin(std::string name, std::string vendor, std::strin
   info.plugin_name = const_cast<char *>(name.c_str());
   info.vendor_name = const_cast<char *>(vendor.c_str());
   info.support_email = const_cast<char *>(email.c_str());
-  TSPluginRegister(&info);
+  if (TSPluginRegister(&info) != TS_SUCCESS)
+    TSError("[Plugin.cc] Plugin registration failed.");
 }

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/3d0d2564/lib/ts/ParseRules.cc
----------------------------------------------------------------------
diff --git a/lib/ts/ParseRules.cc b/lib/ts/ParseRules.cc
index ffc4a4e..6bd61b7 100644
--- a/lib/ts/ParseRules.cc
+++ b/lib/ts/ParseRules.cc
@@ -41,89 +41,6 @@ const char parseRulesCTypeToLower[256] = {
 #include "ParseRulesCTypeToLower"
 };
 
-unsigned char *
-ParseRules::scan_while(unsigned char *ptr, unsigned int n, uint32_t bitmask)
-{
-  unsigned int i;
-  uint32_t *wptr;
-  unsigned char *align_ptr;
-  uintptr_t f_bytes, b_bytes, words, align_off;
-
-  align_off = ((uintptr_t)ptr & 3);
-  align_ptr = (unsigned char *)(((uintptr_t)ptr) & ~3);
-
-  f_bytes = (align_off ? 4 - align_off : 0);
-
-  words = (n - f_bytes) >> 2;
-
-  if (words == 0) {
-    for (i = 0; i < n; i++)
-      if (!is_type(ptr[i], bitmask))
-        return (&ptr[i]);
-  } else {
-    wptr = ((uint32_t *)align_ptr) + (align_off ? 1 : 0);
-    switch (align_off) {
-    case 1:
-      if (!is_type(align_ptr[1], bitmask))
-        return (&ptr[1]);
-    case 2:
-      if (!is_type(align_ptr[2], bitmask))
-        return (&ptr[2]);
-    case 3:
-      if (!is_type(align_ptr[3], bitmask))
-        return (&ptr[3]);
-      break;
-    default:
-      break;
-    }
-
-    b_bytes = n - ((words << 2) + f_bytes);
-
-    for (i = 0; i < words; i++) {
-      uint32_t word = wptr[i];
-      uint32_t result = (is_type(((word >> 0) & 0xFF), bitmask) & is_type(((word
>> 8) & 0xFF), bitmask) &
-                         is_type(((word >> 16) & 0xFF), bitmask) & is_type(((word
>> 24) & 0xFF), bitmask));
-      if (result == 0) {
-        unsigned char *cptr = (unsigned char *)&(wptr[i]);
-        if (!is_type(cptr[0], bitmask))
-          return (&cptr[0]);
-        if (!is_type(cptr[1], bitmask))
-          return (&cptr[1]);
-        if (!is_type(cptr[2], bitmask))
-          return (&cptr[2]);
-        return (&cptr[3]);
-      }
-    }
-
-    align_ptr = (unsigned char *)&(wptr[words]);
-
-    switch (b_bytes) {
-    case 1:
-      if (!is_type(align_ptr[0], bitmask))
-        return (&align_ptr[0]);
-      break;
-    case 2:
-      if (!is_type(align_ptr[0], bitmask))
-        return (&align_ptr[0]);
-      if (!is_type(align_ptr[1], bitmask))
-        return (&align_ptr[1]);
-      break;
-    case 3:
-      if (!is_type(align_ptr[0], bitmask))
-        return (&align_ptr[0]);
-      if (!is_type(align_ptr[1], bitmask))
-        return (&align_ptr[1]);
-      if (!is_type(align_ptr[2], bitmask))
-        return (&align_ptr[2]);
-      break;
-    default:
-      break;
-    }
-  }
-  return 0;
-}
-
-
 void
 ParseRules::ink_tolower_buffer(char *ptr, unsigned int n)
 {

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/3d0d2564/lib/ts/ParseRules.h
----------------------------------------------------------------------
diff --git a/lib/ts/ParseRules.h b/lib/ts/ParseRules.h
index 4045b6d..ae248de 100644
--- a/lib/ts/ParseRules.h
+++ b/lib/ts/ParseRules.h
@@ -162,8 +162,6 @@ public:
   static const char *memchr(const char *s, char c, int max_length);
   static const char *strchr(const char *s, char c);
 
-  static unsigned char *scan_while(unsigned char *ptr, unsigned int n, uint32_t bitmask);
-
 private:
   ParseRules(const ParseRules &);
   ParseRules &operator=(const ParseRules &);

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/3d0d2564/mgmt/Alarms.cc
----------------------------------------------------------------------
diff --git a/mgmt/Alarms.cc b/mgmt/Alarms.cc
index 7bfee8a..3511b70 100644
--- a/mgmt/Alarms.cc
+++ b/mgmt/Alarms.cc
@@ -413,6 +413,7 @@ Alarms::constructAlarmMessage(const AppVersionInfo &version, char
*ip, char *mes
       if (max >= 1) {
         message[0] = '\0';
       }
+      ink_mutex_release(&mutex);
       return;
     }
     ink_strlcpy(&message[n], "alarm: none\n", max - n);

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/3d0d2564/mgmt/LocalManager.cc
----------------------------------------------------------------------
diff --git a/mgmt/LocalManager.cc b/mgmt/LocalManager.cc
index 30f8cac..9d41a8a 100644
--- a/mgmt/LocalManager.cc
+++ b/mgmt/LocalManager.cc
@@ -601,7 +601,7 @@ LocalManager::handleMgmtMsgFromProcesses(MgmtMessageHdr *mh)
                 data_raw);
       break;
     }
-  }
+  } break;
   case MGMT_SIGNAL_LOG_FILES_ROLLED: {
     Debug("lm", "Rolling logs %s", (char *)data_raw);
     break;

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/3d0d2564/mgmt/MultiFile.cc
----------------------------------------------------------------------
diff --git a/mgmt/MultiFile.cc b/mgmt/MultiFile.cc
index 9bd04d3..a0c8773 100644
--- a/mgmt/MultiFile.cc
+++ b/mgmt/MultiFile.cc
@@ -125,6 +125,7 @@ MultiFile::WalkFiles(ExpandingArray *fileList)
     } else {
       if (stat(records_config_filePath, &records_config_fileInfo) < 0) {
         delete[] filePath;
+        delete[] records_config_filePath;
         continue;
       }
       // Ignore ., .., and any dot files

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/3d0d2564/mgmt/api/EventCallback.cc
----------------------------------------------------------------------
diff --git a/mgmt/api/EventCallback.cc b/mgmt/api/EventCallback.cc
index f9736d8..c86ad3f 100644
--- a/mgmt/api/EventCallback.cc
+++ b/mgmt/api/EventCallback.cc
@@ -213,18 +213,20 @@ cb_table_register(CallbackTable *cb_table, const char *event_name, TSEventSignal
   } else { // register callback for specific alarm
     // printf("[EventSignalCbRegister] Register callback for %s\n", event_name);
     id = get_event_id(event_name);
-    if (!cb_table->event_callback_l[id]) {
-      cb_table->event_callback_l[id] = create_queue();
-      first_time = 1;
-    }
+    if (id != -1) {
+      if (!cb_table->event_callback_l[id]) {
+        cb_table->event_callback_l[id] = create_queue();
+        first_time = 1;
+      }
 
-    if (!cb_table->event_callback_l[id]) {
-      ink_mutex_release(&cb_table->event_callback_lock);
-      return TS_ERR_SYS_CALL;
+      if (!cb_table->event_callback_l[id]) {
+        ink_mutex_release(&cb_table->event_callback_lock);
+        return TS_ERR_SYS_CALL;
+      }
+      // now add to list
+      event_cb = create_event_callback(func, data);
+      enqueue(cb_table->event_callback_l[id], event_cb);
     }
-    // now add to list
-    event_cb = create_event_callback(func, data);
-    enqueue(cb_table->event_callback_l[id], event_cb);
   }
 
   // release lock on callback table
@@ -301,41 +303,43 @@ cb_table_unregister(CallbackTable *cb_table, const char *event_name,
TSEventSign
   } else {
     // unregister for specific event
     int id = get_event_id(event_name);
-    if (cb_table->event_callback_l[id]) {
-      int queue_depth;
-
-      queue_depth = queue_len(cb_table->event_callback_l[id]);
-      // func == NULL means unregister all functions associated with alarm
-      if (func == NULL) {
-        while (!queue_is_empty(cb_table->event_callback_l[id])) {
-          event_cb = (EventCallbackT *)dequeue(cb_table->event_callback_l[id]);
-          delete_event_callback(event_cb);
-        }
-
-        // clean up queue and set to NULL
-        delete_queue(cb_table->event_callback_l[id]);
-        cb_table->event_callback_l[id] = NULL;
-      } else {
-        // remove this function
-        for (int j = 0; j < queue_depth; j++) {
-          event_cb = (EventCallbackT *)dequeue(cb_table->event_callback_l[id]);
-          cb_fun = event_cb->func;
+    if (id != -1) {
+      if (cb_table->event_callback_l[id]) {
+        int queue_depth;
 
-          // the pointers are the same
-          if (*cb_fun == *func) {
+        queue_depth = queue_len(cb_table->event_callback_l[id]);
+        // func == NULL means unregister all functions associated with alarm
+        if (func == NULL) {
+          while (!queue_is_empty(cb_table->event_callback_l[id])) {
+            event_cb = (EventCallbackT *)dequeue(cb_table->event_callback_l[id]);
             delete_event_callback(event_cb);
-            continue;
           }
 
-          enqueue(cb_table->event_callback_l[id], event_cb);
-        }
-
-        // is queue empty now?
-        if (queue_is_empty(cb_table->event_callback_l[id])) {
+          // clean up queue and set to NULL
           delete_queue(cb_table->event_callback_l[id]);
           cb_table->event_callback_l[id] = NULL;
-        }
-      } // end if NULL else
+        } else {
+          // remove this function
+          for (int j = 0; j < queue_depth; j++) {
+            event_cb = (EventCallbackT *)dequeue(cb_table->event_callback_l[id]);
+            cb_fun = event_cb->func;
+
+            // the pointers are the same
+            if (*cb_fun == *func) {
+              delete_event_callback(event_cb);
+              continue;
+            }
+
+            enqueue(cb_table->event_callback_l[id], event_cb);
+          }
+
+          // is queue empty now?
+          if (queue_is_empty(cb_table->event_callback_l[id])) {
+            delete_queue(cb_table->event_callback_l[id]);
+            cb_table->event_callback_l[id] = NULL;
+          }
+        } // end if NULL else
+      }
     }
   }
 

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/3d0d2564/plugins/experimental/stale_while_revalidate/stale_while_revalidate.c
----------------------------------------------------------------------
diff --git a/plugins/experimental/stale_while_revalidate/stale_while_revalidate.c b/plugins/experimental/stale_while_revalidate/stale_while_revalidate.c
index 5eab951..c130af4 100644
--- a/plugins/experimental/stale_while_revalidate/stale_while_revalidate.c
+++ b/plugins/experimental/stale_while_revalidate/stale_while_revalidate.c
@@ -268,6 +268,7 @@ consume_resource(TSCont cont, TSEvent event ATS_UNUSED, void *edata ATS_UNUSED)
   case TS_EVENT_VCONN_WRITE_READY:
     // We shouldn't get here because we specify the exact size of the buffer.
     TSDebug(PLUGIN_NAME, "Write Ready");
+    break;
   case TS_EVENT_VCONN_WRITE_COMPLETE:
     TSDebug(PLUGIN_NAME, "Write Complete");
     // TSDebug(PLUGIN_NAME, "TSVConnShutdown()");

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/3d0d2564/proxy/InkAPI.cc
----------------------------------------------------------------------
diff --git a/proxy/InkAPI.cc b/proxy/InkAPI.cc
index 6c4129e..f634d52 100644
--- a/proxy/InkAPI.cc
+++ b/proxy/InkAPI.cc
@@ -4007,7 +4007,7 @@ TSCacheHttpInfoReqGet(TSCacheHttpInfo infop, TSMBuffer *bufp, TSMLoc
*obj)
 
   *(reinterpret_cast<HTTPHdr **>(bufp)) = info->request_get();
   *obj = reinterpret_cast<TSMLoc>(info->request_get()->m_http);
-  sdk_sanity_check_mbuffer(*bufp);
+  sdk_assert(sdk_sanity_check_mbuffer(*bufp) == TS_SUCCESS);
 }
 
 
@@ -4018,7 +4018,7 @@ TSCacheHttpInfoRespGet(TSCacheHttpInfo infop, TSMBuffer *bufp, TSMLoc
*obj)
 
   *(reinterpret_cast<HTTPHdr **>(bufp)) = info->response_get();
   *obj = reinterpret_cast<TSMLoc>(info->response_get()->m_http);
-  sdk_sanity_check_mbuffer(*bufp);
+  sdk_assert(sdk_sanity_check_mbuffer(*bufp) == TS_SUCCESS);
 }
 
 time_t
@@ -4592,7 +4592,7 @@ TSHttpTxnClientRespGet(TSHttpTxn txnp, TSMBuffer *bufp, TSMLoc *obj)
   if (hptr->valid()) {
     *(reinterpret_cast<HTTPHdr **>(bufp)) = hptr;
     *obj = reinterpret_cast<TSMLoc>(hptr->m_http);
-    sdk_sanity_check_mbuffer(*bufp);
+    sdk_assert(sdk_sanity_check_mbuffer(*bufp) == TS_SUCCESS);
     return TS_SUCCESS;
   }
 
@@ -4613,7 +4613,7 @@ TSHttpTxnServerReqGet(TSHttpTxn txnp, TSMBuffer *bufp, TSMLoc *obj)
   if (hptr->valid()) {
     *(reinterpret_cast<HTTPHdr **>(bufp)) = hptr;
     *obj = reinterpret_cast<TSMLoc>(hptr->m_http);
-    sdk_sanity_check_mbuffer(*bufp);
+    sdk_assert(sdk_sanity_check_mbuffer(*bufp) == TS_SUCCESS);
     return TS_SUCCESS;
   }
 
@@ -4633,7 +4633,7 @@ TSHttpTxnServerRespGet(TSHttpTxn txnp, TSMBuffer *bufp, TSMLoc *obj)
   if (hptr->valid()) {
     *(reinterpret_cast<HTTPHdr **>(bufp)) = hptr;
     *obj = reinterpret_cast<TSMLoc>(hptr->m_http);
-    sdk_sanity_check_mbuffer(*bufp);
+    sdk_assert(sdk_sanity_check_mbuffer(*bufp) == TS_SUCCESS);
     return TS_SUCCESS;
   }
 
@@ -4673,7 +4673,7 @@ TSHttpTxnCachedReqGet(TSHttpTxn txnp, TSMBuffer *bufp, TSMLoc *obj)
 
   *(reinterpret_cast<HdrHeapSDKHandle **>(bufp)) = *handle;
   *obj = reinterpret_cast<TSMLoc>(cached_hdr->m_http);
-  sdk_sanity_check_mbuffer(*bufp);
+  sdk_assert(sdk_sanity_check_mbuffer(*bufp) == TS_SUCCESS);
 
   return TS_SUCCESS;
 }
@@ -4711,7 +4711,7 @@ TSHttpTxnCachedRespGet(TSHttpTxn txnp, TSMBuffer *bufp, TSMLoc *obj)
 
   *(reinterpret_cast<HdrHeapSDKHandle **>(bufp)) = *handle;
   *obj = reinterpret_cast<TSMLoc>(cached_hdr->m_http);
-  sdk_sanity_check_mbuffer(*bufp);
+  sdk_assert(sdk_sanity_check_mbuffer(*bufp) == TS_SUCCESS);
 
   return TS_SUCCESS;
 }
@@ -4745,7 +4745,7 @@ TSHttpTxnCachedRespModifiableGet(TSHttpTxn txnp, TSMBuffer *bufp, TSMLoc
*obj)
   ink_assert(c_resp != NULL && c_resp->valid());
   *(reinterpret_cast<HTTPHdr **>(bufp)) = c_resp;
   *obj = reinterpret_cast<TSMLoc>(c_resp->m_http);
-  sdk_sanity_check_mbuffer(*bufp);
+  sdk_assert(sdk_sanity_check_mbuffer(*bufp) == TS_SUCCESS);
 
   return TS_SUCCESS;
 }
@@ -8671,13 +8671,13 @@ TSHttpTxnIsCacheable(TSHttpTxn txnp, TSMBuffer request, TSMBuffer
response)
   // We allow for either request or response to be empty (or both), in
   // which case we default to the transactions request or response.
   if (request) {
-    sdk_sanity_check_mbuffer(request);
+    sdk_assert(sdk_sanity_check_mbuffer(request) == TS_SUCCESS);
     req = reinterpret_cast<HTTPHdr *>(request);
   } else {
     req = &(sm->t_state.hdr_info.client_request);
   }
   if (response) {
-    sdk_sanity_check_mbuffer(response);
+    sdk_assert(sdk_sanity_check_mbuffer(response) == TS_SUCCESS);
     resp = reinterpret_cast<HTTPHdr *>(response);
   } else {
     resp = &(sm->t_state.hdr_info.server_response);

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/3d0d2564/proxy/SocksProxy.cc
----------------------------------------------------------------------
diff --git a/proxy/SocksProxy.cc b/proxy/SocksProxy.cc
index 9d8d48b..1ff2f78 100644
--- a/proxy/SocksProxy.cc
+++ b/proxy/SocksProxy.cc
@@ -467,9 +467,9 @@ SocksProxy::setupHttpRequest(unsigned char *p)
     // just use the last 4 octets as IPv4 addr:
     a->type = SOCKS_ATYPE_IPV4;
     a->addr.ipv4[0] = p[16];
-    a->addr.ipv4[0] = p[17];
-    a->addr.ipv4[0] = p[18];
-    a->addr.ipv4[0] = p[19];
+    a->addr.ipv4[1] = p[17];
+    a->addr.ipv4[2] = p[18];
+    a->addr.ipv4[3] = p[19];
 
     break;
   default:

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/3d0d2564/proxy/congest/CongestionTest.cc
----------------------------------------------------------------------
diff --git a/proxy/congest/CongestionTest.cc b/proxy/congest/CongestionTest.cc
index 1e0dcb8..f546f54 100644
--- a/proxy/congest/CongestionTest.cc
+++ b/proxy/congest/CongestionTest.cc
@@ -84,11 +84,13 @@ EXCLUSIVE_REGRESSION_TEST(Congestion_HashTable)(RegressionTest *t, int
/* atype
     if (i % 2 == 1 && data == 0) {
       rprintf(t, "verify content failed: key(%d) deleted\n", i);
       *pstatus = REGRESSION_TEST_FAILED;
+      delete htable;
       return;
     }
     if (data != 0 && data != i) {
       rprintf(t, "verify content failed: key(%d) data(%d)\n", i, data);
       *pstatus = REGRESSION_TEST_FAILED;
+      delete htable;
       return;
     }
     if (i % (count / 50) == 0)
@@ -128,6 +130,7 @@ EXCLUSIVE_REGRESSION_TEST(Congestion_HashTable)(RegressionTest *t, int
/* atype
       if (data != htable->lookup_entry(data)) {
         rprintf(t, "verify content failed: key(%d) data(%d)\n", data, htable->lookup_entry(data));
         *pstatus = REGRESSION_TEST_FAILED;
+        delete htable;
         return;
       }
     }
@@ -137,6 +140,7 @@ EXCLUSIVE_REGRESSION_TEST(Congestion_HashTable)(RegressionTest *t, int
/* atype
   if (new_count != 0) {
     rprintf(t, "there are %d extra entries in the table\n", new_count);
     *pstatus = REGRESSION_TEST_FAILED;
+    delete htable;
     return;
   }
 
@@ -157,6 +161,7 @@ EXCLUSIVE_REGRESSION_TEST(Congestion_HashTable)(RegressionTest *t, int
/* atype
   if (new_count != 0) {
     rprintf(t, "there are %d extra entries in the table\n", new_count);
     *pstatus = REGRESSION_TEST_FAILED;
+    delete htable;
     return;
   }
 

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/3d0d2564/proxy/http/HttpClientSession.cc
----------------------------------------------------------------------
diff --git a/proxy/http/HttpClientSession.cc b/proxy/http/HttpClientSession.cc
index f02834c..0ba1e54 100644
--- a/proxy/http/HttpClientSession.cc
+++ b/proxy/http/HttpClientSession.cc
@@ -313,7 +313,7 @@ HttpClientSession::do_io_close(int alerrno)
     if (ssl_vc) {
       ssl_vc->set_ssl_iobuf(NULL);
     }
-    if (upgrade_to_h2c) {
+    if (upgrade_to_h2c && this->current_reader) {
       Http2ClientSession *h2_session = http2ClientSessionAllocator.alloc();
 
       h2_session->set_upgrade_context(&current_reader->t_state.hdr_info.client_request);

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/3d0d2564/proxy/http2/Http2ClientSession.cc
----------------------------------------------------------------------
diff --git a/proxy/http2/Http2ClientSession.cc b/proxy/http2/Http2ClientSession.cc
index 0ea6fca..386195b 100644
--- a/proxy/http2/Http2ClientSession.cc
+++ b/proxy/http2/Http2ClientSession.cc
@@ -138,6 +138,7 @@ Http2ClientSession::set_upgrade_context(HTTPHdr *h)
   upgrade_context.req_header->copy(h);
 
   MIMEField *settings = upgrade_context.req_header->field_find(MIME_FIELD_HTTP2_SETTINGS,
MIME_LEN_HTTP2_SETTINGS);
+  ink_release_assert(settings != NULL);
   int svlen;
   const char *sv = settings->value_get(&svlen);
 

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/3d0d2564/proxy/logging/Log.cc
----------------------------------------------------------------------
diff --git a/proxy/logging/Log.cc b/proxy/logging/Log.cc
index 598ec6b..03ef392 100644
--- a/proxy/logging/Log.cc
+++ b/proxy/logging/Log.cc
@@ -1432,6 +1432,7 @@ Log::match_logobject(LogBufferHeader *header)
         obj = NULL;
       }
     }
+    delete fmt;
   }
   return obj;
 }


Mime
View raw message