Repository: trafficserver
Updated Branches:
  refs/heads/master 326bf1059 -> e7d02d92a


TS-3287: fix a minor traffic_via memory leak

Fix a minor traffic_via memory leak when given a bad Via string.
Add a simple set of golden-output tests.

Coverity CID #1226154, #1226155


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

Branch: refs/heads/master
Commit: e7d02d92a8e55523043154129a3fccc5577105dd
Parents: 326bf10
Author: James Peach <[email protected]>
Authored: Wed Jan 21 12:57:13 2015 -0800
Committer: James Peach <[email protected]>
Committed: Thu Jan 29 19:25:29 2015 -0800

----------------------------------------------------------------------
 cmd/traffic_via/Makefile.am                     |  3 ++
 cmd/traffic_via/test_traffic_via                | 30 ++++++++++++++++++++
 .../tests/[u c s f p eS:tNc  i p s ]            | 14 +++++++++
 .../tests/[uIcRs f p eN:t cCHi p s ]            | 14 +++++++++
 .../tests/[uIcRs f p eN:t cCNi p s ]            | 14 +++++++++
 .../tests/[uScMsSf pSeN:t cCMi p sS]            | 14 +++++++++
 .../tests/[uScRs f p eN:t cCHi p s ]            | 14 +++++++++
 cmd/traffic_via/tests/long rubbish via code 24  | 20 +++++++++++++
 cmd/traffic_via/tests/rubbish                   |  4 +++
 cmd/traffic_via/tests/short                     |  7 +++++
 cmd/traffic_via/traffic_via.cc                  |  8 ++++--
 11 files changed, 139 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/e7d02d92/cmd/traffic_via/Makefile.am
----------------------------------------------------------------------
diff --git a/cmd/traffic_via/Makefile.am b/cmd/traffic_via/Makefile.am
index c9482e2..c7f0888 100644
--- a/cmd/traffic_via/Makefile.am
+++ b/cmd/traffic_via/Makefile.am
@@ -32,3 +32,6 @@ traffic_via_LDFLAGS = @EXTRA_CXX_LDFLAGS@ @LIBTOOL_LINK_FLAGS@
 traffic_via_LDADD = \
   $(top_builddir)/lib/ts/libtsutil.la \
   @LIBTCL@
+
+TESTS = \
+  test_traffic_via

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/e7d02d92/cmd/traffic_via/test_traffic_via
----------------------------------------------------------------------
diff --git a/cmd/traffic_via/test_traffic_via b/cmd/traffic_via/test_traffic_via
new file mode 100755
index 0000000..667fa02
--- /dev/null
+++ b/cmd/traffic_via/test_traffic_via
@@ -0,0 +1,30 @@
+#! /usr/bin/env bash
+#
+#  Licensed to the Apache Software Foundation (ASF) under one
+#  or more contributor license agreements.  See the NOTICE file
+#  distributed with this work for additional information
+#  regarding copyright ownership.  The ASF licenses this file
+#  to you under the Apache License, Version 2.0 (the
+#  "License"); you may not use this file except in compliance
+#  with the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+
+set -e # exit on error
+
+TMPDIR=${TMPDIR:-/tmp}
+tmpfile=$(mktemp "$TMPDIR/via.XXXXXX")
+srcdir=$(cd $srcdir && pwd)
+
+find $srcdir/tests -type f |
+while read f ; do
+    name=$(basename "$f")
+    ./traffic_via "$name" > "$tmpfile" 2>&1 || true
+    diff -u "$tmpfile" "$srcdir/tests/$name"
+done

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/e7d02d92/cmd/traffic_via/tests/[u
 c s f p eS:tNc  i p s ]
----------------------------------------------------------------------
diff --git a/cmd/traffic_via/tests/[u c s f p eS:tNc  i p s ] 
b/cmd/traffic_via/tests/[u c s f p eS:tNc  i p s ]
new file mode 100644
index 0000000..8195fd8
--- /dev/null
+++ b/cmd/traffic_via/tests/[u c s f p eS:tNc  i p s ]  
@@ -0,0 +1,14 @@
+Via header is [u c s f p eS:tNc  i p s ], Length is 26
+Via Header Details:
+Request headers received from client                   :unknown
+Result of Traffic Server cache lookup for URL          :no cache lookup
+Response information received from origin server       :no server connection 
needed
+Result of document write-to-cache:                     :no cache write 
performed
+Proxy operation result                                 :unknown
+Error codes (if any)                                   :server related error
+Tunnel info                                            :tunneling due to no 
forward
+Cache Type                                             :unknown
+Cache Lookup Result                                    :cache miss or no cache 
lookup
+ICP status                                             :no icp
+Parent proxy connection status                         :no parent proxy or 
unknown
+Origin server connection status                        :no server connection 
needed

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/e7d02d92/cmd/traffic_via/tests/[uIcRs
 f p eN:t cCHi p s ]
----------------------------------------------------------------------
diff --git a/cmd/traffic_via/tests/[uIcRs f p eN:t cCHi p s ] 
b/cmd/traffic_via/tests/[uIcRs f p eN:t cCHi p s ]
new file mode 100644
index 0000000..73a2f47
--- /dev/null
+++ b/cmd/traffic_via/tests/[uIcRs f p eN:t cCHi p s ]  
@@ -0,0 +1,14 @@
+Via header is [uIcRs f p eN:t cCHi p s ], Length is 26
+Via Header Details:
+Request headers received from client                   :IMS
+Result of Traffic Server cache lookup for URL          :in cache, fresh Ram 
hit (a cache "HIT")
+Response information received from origin server       :no server connection 
needed
+Result of document write-to-cache:                     :no cache write 
performed
+Proxy operation result                                 :unknown
+Error codes (if any)                                   :no error
+Tunnel info                                            :no tunneling
+Cache Type                                             :cache
+Cache Lookup Result                                    :cache hit
+ICP status                                             :no icp
+Parent proxy connection status                         :no parent proxy or 
unknown
+Origin server connection status                        :no server connection 
needed

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/e7d02d92/cmd/traffic_via/tests/[uIcRs
 f p eN:t cCNi p s ]
----------------------------------------------------------------------
diff --git a/cmd/traffic_via/tests/[uIcRs f p eN:t cCNi p s ] 
b/cmd/traffic_via/tests/[uIcRs f p eN:t cCNi p s ]
new file mode 100644
index 0000000..00a38f3
--- /dev/null
+++ b/cmd/traffic_via/tests/[uIcRs f p eN:t cCNi p s ]  
@@ -0,0 +1,14 @@
+Via header is [uIcRs f p eN:t cCNi p s ], Length is 26
+Via Header Details:
+Request headers received from client                   :IMS
+Result of Traffic Server cache lookup for URL          :in cache, fresh Ram 
hit (a cache "HIT")
+Response information received from origin server       :no server connection 
needed
+Result of document write-to-cache:                     :no cache write 
performed
+Proxy operation result                                 :unknown
+Error codes (if any)                                   :no error
+Tunnel info                                            :no tunneling
+Cache Type                                             :cache
+Cache Lookup Result                                    :conditional hit 
(client sent conditional, doc fresh in cache, returned 304)
+ICP status                                             :no icp
+Parent proxy connection status                         :no parent proxy or 
unknown
+Origin server connection status                        :no server connection 
needed

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/e7d02d92/cmd/traffic_via/tests/[uScMsSf
 pSeN:t cCMi p sS]
----------------------------------------------------------------------
diff --git a/cmd/traffic_via/tests/[uScMsSf pSeN:t cCMi p sS] 
b/cmd/traffic_via/tests/[uScMsSf pSeN:t cCMi p sS]
new file mode 100644
index 0000000..a69506f
--- /dev/null
+++ b/cmd/traffic_via/tests/[uScMsSf pSeN:t cCMi p sS]  
@@ -0,0 +1,14 @@
+Via header is [uScMsSf pSeN:t cCMi p sS], Length is 26
+Via Header Details:
+Request headers received from client                   :simple request (not 
conditional)
+Result of Traffic Server cache lookup for URL          :miss (a cache "MISS")
+Response information received from origin server       :connection opened 
successfully
+Result of document write-to-cache:                     :no cache write 
performed
+Proxy operation result                                 :served or connection 
opened successfully
+Error codes (if any)                                   :no error
+Tunnel info                                            :no tunneling
+Cache Type                                             :cache
+Cache Lookup Result                                    :cache miss (url not in 
cache)
+ICP status                                             :no icp
+Parent proxy connection status                         :no parent proxy or 
unknown
+Origin server connection status                        :connection opened 
successfully

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/e7d02d92/cmd/traffic_via/tests/[uScRs
 f p eN:t cCHi p s ]
----------------------------------------------------------------------
diff --git a/cmd/traffic_via/tests/[uScRs f p eN:t cCHi p s ] 
b/cmd/traffic_via/tests/[uScRs f p eN:t cCHi p s ]
new file mode 100644
index 0000000..ff62044
--- /dev/null
+++ b/cmd/traffic_via/tests/[uScRs f p eN:t cCHi p s ]  
@@ -0,0 +1,14 @@
+Via header is [uScRs f p eN:t cCHi p s ], Length is 26
+Via Header Details:
+Request headers received from client                   :simple request (not 
conditional)
+Result of Traffic Server cache lookup for URL          :in cache, fresh Ram 
hit (a cache "HIT")
+Response information received from origin server       :no server connection 
needed
+Result of document write-to-cache:                     :no cache write 
performed
+Proxy operation result                                 :unknown
+Error codes (if any)                                   :no error
+Tunnel info                                            :no tunneling
+Cache Type                                             :cache
+Cache Lookup Result                                    :cache hit
+ICP status                                             :no icp
+Parent proxy connection status                         :no parent proxy or 
unknown
+Origin server connection status                        :no server connection 
needed

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/e7d02d92/cmd/traffic_via/tests/long
 rubbish via code 24
----------------------------------------------------------------------
diff --git a/cmd/traffic_via/tests/long rubbish via code 24 
b/cmd/traffic_via/tests/long rubbish via code 24
new file mode 100644
index 0000000..164f97e
--- /dev/null
+++ b/cmd/traffic_via/tests/long rubbish via code 24    
@@ -0,0 +1,20 @@
+traffic_via: Invalid VIA header character: l
+traffic_via: Invalid VIA header character: o
+traffic_via: Invalid VIA header character: n
+traffic_via: Invalid VIA header character: g
+traffic_via: Invalid VIA header character: r
+traffic_via: Invalid VIA header character: b
+traffic_via: Invalid VIA header character: b
+traffic_via: Invalid VIA header character: i
+traffic_via: Invalid VIA header character: h
+traffic_via: Invalid VIA header character: v
+traffic_via: Invalid VIA header character: i
+traffic_via: Invalid VIA header character: a
+traffic_via: Invalid VIA header character: o
+traffic_via: Invalid VIA header character: d
+Via header is long rubbish via code 24, Length is 24
+Via Header Details:
+(null)                                                 :(null)
+(null)                                                 :no server connection 
needed
+(null)                                                 :no server connection 
needed
+Error codes (if any)                                   :unknown

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/e7d02d92/cmd/traffic_via/tests/rubbish
----------------------------------------------------------------------
diff --git a/cmd/traffic_via/tests/rubbish b/cmd/traffic_via/tests/rubbish
new file mode 100644
index 0000000..f3de8e9
--- /dev/null
+++ b/cmd/traffic_via/tests/rubbish
@@ -0,0 +1,4 @@
+Via header is rubbish, Length is 7
+
+Invalid VIA header. VIA header length should be 6 or 24 characters
+Valid via header format is 
[u<client-stuff>c<cache-lookup-stuff>s<server-stuff>f<cache-fill-stuff>p<proxy-stuff>]e<error-codes>:t<tunneling-info>c<cache
 
type><cache-lookup-result>i<icp-conn-info>p<parent-proxy-conn-info>s<server-conn-info>]
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/e7d02d92/cmd/traffic_via/tests/short
----------------------------------------------------------------------
diff --git a/cmd/traffic_via/tests/short b/cmd/traffic_via/tests/short
new file mode 100644
index 0000000..9779b50
--- /dev/null
+++ b/cmd/traffic_via/tests/short
@@ -0,0 +1,7 @@
+traffic_via: Invalid VIA header character: h
+traffic_via: Invalid VIA header character: o
+traffic_via: Invalid VIA header character: r
+traffic_via: Invalid VIA header character: t
+Via header is short, Length is 5
+Via Header Details:
+(null)                                                 :no server connection 
needed

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/e7d02d92/cmd/traffic_via/traffic_via.cc
----------------------------------------------------------------------
diff --git a/cmd/traffic_via/traffic_via.cc b/cmd/traffic_via/traffic_via.cc
index 1321f1e..4d99a6a 100644
--- a/cmd/traffic_via/traffic_via.cc
+++ b/cmd/traffic_via/traffic_via.cc
@@ -61,7 +61,7 @@ struct VIA
 static VIA *
 detailViaLookup(char flag)
 {
-  VIA * viaTable = new VIA();
+  VIA * viaTable;
 
   //Detailed via codes after ":"
   switch (flag) {
@@ -117,9 +117,11 @@ detailViaLookup(char flag)
     viaTable->viaData[(unsigned char) 'F'] = "connection open failed";
     break;
   default:
+    viaTable = new VIA();
     fprintf(stderr, "%s: %s: %c\n", appVersionInfo.AppStr, "Invalid VIA header 
character",flag);
     break;
   }
+
   return viaTable;
 }
 
@@ -129,8 +131,6 @@ standardViaLookup(char flag)
 {
   VIA * viaTable;
 
-  viaTable = new VIA();
-
   //Via codes before ":"
   switch (flag) {
     case 'u':
@@ -186,9 +186,11 @@ standardViaLookup(char flag)
       viaTable->viaData[(unsigned char) ' '] = "unknown";
       break;
     default:
+      viaTable = new VIA();
       fprintf(stderr, "%s: %s: %c\n", appVersionInfo.AppStr, "Invalid VIA 
header character",flag);
       break;
   }
+
   return viaTable;
 }
 

Reply via email to