Changeset 11124 in ntrip for trunk/BNC/src/RTCM3


Ignore:
Timestamp:
Oct 24, 2026, 10:10:29 PM (5 days ago)
Author:
stuerze
Message:

Some fixes regarding memory corruption from stream data, credential exposure,

Location:
trunk/BNC/src/RTCM3
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/BNC/src/RTCM3/RTCM3Decoder.cpp

    r11084 r11124  
    21732173    for (int i = 0; i < dblinksnum; i++) {
    21742174      int dblinknum = -1;
    2175       char dblinkname[31];
     2175      char dblinkname[32]; // up to 31 characters (5-bit length) + terminating 0
    21762176      GETBITS(dblinknum, 5)
    21772177      if (dblinknum > -1 && dblinknum <= 31) {
  • trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit.h

    r11048 r11124  
    454454      unsigned int Degree; /* 1-16 */
    455455      unsigned int Order;  /* 1-16 */
    456       double Sinus[VTEC_MAXIONODEGREE][VTEC_MAXIONOORDER];
    457       double Cosinus[VTEC_MAXIONODEGREE][VTEC_MAXIONOORDER];
     456      /* indices 0 .. Degree / 0 .. Order, both up to 16 */
     457      double Sinus[VTEC_MAXIONODEGREE+1][VTEC_MAXIONOORDER+1];
     458      double Cosinus[VTEC_MAXIONODEGREE+1][VTEC_MAXIONOORDER+1];
    458459    } Layers[VTEC_NUMIONOLAYERS];
    459460  };
  • trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_rtcm_new.cpp

    r11046 r11124  
    637637      fprintf(stderr, "ssrIod %d providerId %d solId %d numEntries %d \n",
    638638      md->SSRIOD, md->SSRProviderID, md->SSRSolutionID, md->NumEntries);
    639 #endif
     639#endif
     640    if (md->NumEntries > META_MAXNUMENTRIES) { /* DF+063 is 5 bits wide */
     641      md->NumEntries = 0;
     642      return GCOBR_DATAMISMATCH;
     643    }
    640644    for (i = 0; i < md->NumEntries; i++) {
    641645      unsigned int additionalBits;
    … …  
    687691      if (md->Entries[i].nonDefaultIndicator &&
    688692        md->Entries[i].additionalParameterIndicator) {
    689         D_ADDITIONAL_MODEL_PARAMETER_DATA(md->Entries[i].additionalParameterData, additionalBits)
     693        /* DF+071 allows up to 255 bits, only 32 can be stored: skip the
     694           leading excess bits, keep the trailing 32 */
     695        while (additionalBits > 32) {
     696          unsigned int n = (additionalBits - 32 > 32) ? 32 : additionalBits - 32;
     697          SKIPSSRBITS(n)
     698          additionalBits -= n;
     699        }
     700        if (additionalBits)
     701          D_ADDITIONAL_MODEL_PARAMETER_DATA(md->Entries[i].additionalParameterData, additionalBits)
    690702#ifdef BNC_DEBUG_SSR
    691703        fprintf(stderr, "- additional-data-parameter-data     : %d\n", md->Entries[i].additionalParameterData);
  • trunk/BNC/src/RTCM3/crs.h

    r10545 r11124  
    2424  }
    2525  void clear(void) {
    26     memset(_name, '\0', 31 * sizeof(char));
     26    memset(_name, '\0', sizeof(_name));
    2727    _coordinateEpoch = 0;
    2828    _CE              = 0;
    … …  
    3838    void setCoordinateEpochFromCE() {(!_CE) ? _coordinateEpoch = 0.0 : _coordinateEpoch = 1900 + _CE; }
    3939    void setCEFromCoordinateEpoch() {(!_coordinateEpoch) ? _CE = 0 : _CE = _coordinateEpoch -1900; }
    40     char     _name[31];
     40    char     _name[32]; // up to 31 characters (5-bit length) + terminating 0
    4141    double   _coordinateEpoch;
    4242    double   _CE;
    … …  
    5555    }
    5656    void clear() {
    57       memset(_name, '\0', 31 * sizeof(char));
     57      memset(_name, '\0', sizeof(_name));
    5858      _anchor = 0;
    5959      _plateNumber = 0;
    … …  
    7171      }
    7272    }
    73     char             _name[31];
     73    char             _name[32]; // up to 31 characters (5-bit length) + terminating 0
    7474    int              _anchor;           // 0.. global CRS (=> Plate number 0), 1.. plate-fixed CRS
    7575    int              _plateNumber;      // 0.. unknown, 7.. Eurasia
    … …  
    171171       cout << endl;
    172172     }
    173      char           _sourceName[31];
    174      char           _targetName[31];
     173     char           _sourceName[32]; // up to 31 characters (5-bit length) + terminating 0
     174     char           _targetName[32];
    175175     int            _sysIdentNum;
    176176     int            _utilTrafoMessageIndicator;
Note: See TracChangeset for help on using the changeset viewer.