]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Merge pull request #997 in SNORT/snort3 from port_table_cruft to master
authorRuss Combs (rucombs) <rucombs@cisco.com>
Fri, 25 Aug 2017 12:39:46 +0000 (08:39 -0400)
committerRuss Combs (rucombs) <rucombs@cisco.com>
Fri, 25 Aug 2017 12:39:46 +0000 (08:39 -0400)
Squashed commit of the following:

commit d52c5cac7ed64dc56f80f2b78f10e065c88d1320
Author: Victor Roemer <viroemer@cisco.com>
Date:   Wed Aug 23 15:42:04 2017 -0400

    snort: disallow invalid port range !:65535 (!any)

commit dd620176da4daaccee9a56827f00d2a0e73bcfd3
Author: Victor Roemer <viroemer@cisco.com>
Date:   Wed Aug 23 15:01:02 2017 -0400

    snort: remove port object cruft

src/parser/parse_ports.cc
src/ports/port_object.cc
src/ports/port_object.h
src/ports/port_table.cc

index 58e86f9b2a7933a9c434c496909fdd379d9330e8..06bc461a90e5da4fd7c58d87d2a5a4fcef9d3d11 100644 (file)
@@ -293,7 +293,7 @@ static PortObject* _POParsePort(POParser* pop)
         {
             /* Open ended range, highport is 65k */
             hport = MAX_PORTS-1;
-            PortObjectAddRange(po, lport, hport, 0);
+            PortObjectAddRange(po, lport, hport);
             return po;
         }
 
@@ -319,11 +319,11 @@ static PortObject* _POParsePort(POParser* pop)
             return NULL;
         }
 
-        PortObjectAddRange(po, lport, hport, 0);
+        PortObjectAddRange(po, lport, hport);
     }
     else
     {
-        PortObjectAddPort(po, lport, 0);
+        PortObjectAddPort(po, lport);
     }
 
     return po;
@@ -488,20 +488,20 @@ PortObject* PortObjectParseString(PortVarTable* pvTable, POParser* pop,
     POParserInit(pop, s, pvTable);
 
     po = PortObjectNew();
-    if (!po)
+    if ( !po )
     {
-        pop->errflag=POPERR_MALLOC_FAILED;
-        return 0;
+        pop->errflag = POPERR_MALLOC_FAILED;
+        return nullptr;
     }
 
     if ( nameflag ) /* parse a name */
     {
         po->name = POParserName(pop);
-        if (!po->name )
+        if ( !po->name )
         {
-            pop->errflag=POPERR_NO_NAME;
+            pop->errflag = POPERR_NO_NAME;
             PortObjectFree(po);
-            return 0;
+            return nullptr;
         }
     }
     else
@@ -516,19 +516,28 @@ PortObject* PortObjectParseString(PortVarTable* pvTable, POParser* pop,
 
     potmp = _POParseString(pop);
 
-    if (!potmp)
+    if ( !potmp )
     {
         PortObjectFree(po);
-        return NULL;
+        return nullptr;
     }
 
     PortObjectNormalize(potmp);
 
-    if (PortObjectAddPortObject(po, potmp, &pop->errflag))
+    // Catches !:65535
+    if ( sflist_count(potmp->item_list) == 0 )
     {
         PortObjectFree(po);
         PortObjectFree(potmp);
-        return NULL;
+        pop->errflag = POPERR_INVALID_RANGE;
+        return nullptr;
+    }
+
+    if ( PortObjectAddPortObject(po, potmp, &pop->errflag) )
+    {
+        PortObjectFree(po);
+        PortObjectFree(potmp);
+        return nullptr;
     }
 
     PortObjectFree(potmp);
index 655b131454d037da1d0faa1bda938dad329ff248..cc63acd1c769402937a91d6ba05fd54ee6f237fd 100644 (file)
@@ -153,12 +153,12 @@ int PortObjectAddPortObject(PortObject* podst, PortObject* posrc, int* errflag)
     return ret;
 }
 
-int PortObjectAddPort(PortObject* po, int port, int not_flag)
+int PortObjectAddPort(PortObject* po, int port)
 {
-    return PortObjectAddRange(po, port, port, not_flag);
+    return PortObjectAddRange(po, port, port);
 }
 
-int PortObjectAddRange(PortObject* po, int lport, int hport, int not_flag)
+int PortObjectAddRange(PortObject* po, int lport, int hport)
 {
     PortObjectItem* poi = PortObjectItemNew();
 
@@ -168,8 +168,6 @@ int PortObjectAddRange(PortObject* po, int lport, int hport, int not_flag)
     poi->lport = (unsigned short)lport;
     poi->hport = (unsigned short)hport;
 
-    poi->negate = not_flag != 0;
-
     sflist_add_tail(po->item_list, poi);
     return 0;
 }
@@ -198,7 +196,7 @@ int PortObjectAddPortAny(PortObject* po)
     if (!po->name)
         po->name = snort_strdup("any");
 
-    return PortObjectAddRange(po, 0, SFPO_MAX_PORTS-1, 0);
+    return PortObjectAddRange(po, 0, SFPO_MAX_PORTS-1);
 }
 
 /*
index f1c152fafaf26f27028f17cbf1b37541c7b96079..2af69dd575131549f49ab76feea2a380aa2a44f8 100644 (file)
@@ -51,8 +51,8 @@ void PortObjectFinalize(PortObject*);
 int PortObjectSetName(PortObject*, const char* name);
 int PortObjectAddItem(PortObject*, PortObjectItem*, int* errflag);
 int PortObjectAddPortObject(PortObject* podst, PortObject* posrc, int* errflag);
-int PortObjectAddPort(PortObject*, int port, int not_flag);
-int PortObjectAddRange(PortObject*, int lport, int hport, int not_flag);
+int PortObjectAddPort(PortObject*, int port);
+int PortObjectAddRange(PortObject*, int lport, int hport);
 int PortObjectAddRule(PortObject*, int rule);
 int PortObjectAddPortAny(PortObject*);
 
index 561ab88403697757c5839c78cc9bc8449b889a8c..04ad0665f64eb732b7ce4d175a2915bd0b417e48 100644 (file)
@@ -530,51 +530,26 @@ static inline void add_port_object(Port port, PortObject* po, SF_LIST** parray)
 // Update port object lists
 static inline void update_port_lists(PortObject* po, SF_LIST** parray)
 {
-    bool not_flag_set = false;
-
     PortObjectItem* poi;
     SF_LNODE* lpos;
     for ( poi = (PortObjectItem*)sflist_first(po->item_list, &lpos);
           poi;
           poi = (PortObjectItem*)sflist_next(&lpos) )
     {
+        assert(!poi->negate);
+
         if( poi->any())
             return;
 
         else if( poi->one() )
-        {
-            if (poi->negate )
-            {
-                not_flag_set = true;
-                break;
-            }
-
             add_port_object(poi->lport, po, parray);
-        }
-        else
-        {
-            if (poi->negate )
-            {
-                not_flag_set = true;
-                break;
-            }
 
+        else
             for( int port = poi->lport; port <= poi->hport; port++ )
-            {
                 add_port_object(port, po, parray);
-            }
-        }
 
         add_port_object(poi->lport, po, parray);
     }
-
-    if (not_flag_set)
-    {
-        for( int port = 0; port < SFPO_MAX_PORTS; port++ )
-        {
-            add_port_object(port, po, parray);
-        }
-    }
 }
 
 // Create optimized port lists per port