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


TS-3287: Fix segfault in traffic_via

Initialize viaData to 0 and make sure it is valid before printing.

Return NULL on invalid ViaLookup.

Fix tests to match corrected output.


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

Branch: refs/heads/master
Commit: ec864547cbe352d04fab122526a4dd090d3a9e81
Parents: e7d02d9
Author: Phil Sorber <[email protected]>
Authored: Fri Jan 30 01:56:38 2015 -0700
Committer: Phil Sorber <[email protected]>
Committed: Fri Jan 30 02:00:12 2015 -0700

----------------------------------------------------------------------
 cmd/traffic_via/tests/long rubbish via code 24 |  3 ---
 cmd/traffic_via/tests/short                    |  1 -
 cmd/traffic_via/traffic_via.cc                 | 10 +++++-----
 3 files changed, 5 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/ec864547/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
index 164f97e..536f4ad 100644
--- a/cmd/traffic_via/tests/long rubbish via code 24    
+++ b/cmd/traffic_via/tests/long rubbish via code 24    
@@ -14,7 +14,4 @@ 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/ec864547/cmd/traffic_via/tests/short
----------------------------------------------------------------------
diff --git a/cmd/traffic_via/tests/short b/cmd/traffic_via/tests/short
index 9779b50..c0f098c 100644
--- a/cmd/traffic_via/tests/short
+++ b/cmd/traffic_via/tests/short
@@ -4,4 +4,3 @@ 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/ec864547/cmd/traffic_via/traffic_via.cc
----------------------------------------------------------------------
diff --git a/cmd/traffic_via/traffic_via.cc b/cmd/traffic_via/traffic_via.cc
index 4d99a6a..b326bbb 100644
--- a/cmd/traffic_via/traffic_via.cc
+++ b/cmd/traffic_via/traffic_via.cc
@@ -45,8 +45,8 @@ static AppVersionInfo appVersionInfo;
 
 struct VIA
 {
-  VIA() : title(NULL), next(NULL) { }
-  VIA(const char * t) : title(t), next(NULL) { }
+  VIA() : title(NULL), next(NULL) { memset(viaData, 0, sizeof(viaData)); }
+  VIA(const char * t) : title(t), next(NULL) { memset(viaData, 0, 
sizeof(viaData)); }
 
   ~VIA() {
     delete next;
@@ -117,7 +117,7 @@ detailViaLookup(char flag)
     viaTable->viaData[(unsigned char) 'F'] = "connection open failed";
     break;
   default:
-    viaTable = new VIA();
+    viaTable = NULL;
     fprintf(stderr, "%s: %s: %c\n", appVersionInfo.AppStr, "Invalid VIA header 
character",flag);
     break;
   }
@@ -186,7 +186,7 @@ standardViaLookup(char flag)
       viaTable->viaData[(unsigned char) ' '] = "unknown";
       break;
     default:
-      viaTable = new VIA();
+      viaTable = NULL;
       fprintf(stderr, "%s: %s: %c\n", appVersionInfo.AppStr, "Invalid VIA 
header character",flag);
       break;
   }
@@ -219,7 +219,7 @@ printViaHeader(const char * header)
       // This is a one of the sequence of (uppercase) VIA codes.
       if (viaEntry) {
         printf("%-55s:", viaEntry->title);
-        printf("%s\n", viaEntry->viaData[(unsigned char)*c]);
+        printf("%s\n", viaEntry->viaData[(unsigned char)*c] ? 
viaEntry->viaData[(unsigned char)*c] : "Invalid sequence");
         viaEntry = viaEntry->next;
       }
     }

Reply via email to