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


Ignore:
Timestamp:
Oct 24, 2026, 11:14:36 PM (3 weeks ago)
Author:
stuerze
Message:

Some fixes from security point of view

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

Legend:

Unmodified
Added
Removed
  • trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_rtcm_new.cpp

    r11124 r11126  
    472472      for (i = 0; i < md->NumEntries; i++) {
    473473        E_MODEL_CORRECTION_TYPE_INDICATOR(md->Entries[i].TypeIndicator)
    474         E_ADDITIONAL_MODEL_PARAMETER_INDICATOR(md->Entries[i].ApplicationIndicator)
     474        E_MODEL_CORRECTION_APPLICATION_INDICATOR(md->Entries[i].ApplicationIndicator)
    475475        E_NON_DEFAULT_MODEL_CORRECTION_INDICATOR(md->Entries[i].nonDefaultIndicator)
    476476        if (md->Entries[i].nonDefaultIndicator) {
    … …  
    489489        if (md->Entries[i].nonDefaultIndicator &&
    490490            md->Entries[i].additionalParameterIndicator) {
    491           E_ADDITIONAL_MODEL_PARAMETER_DATA(md->Entries[i].additionalParameterData, md->Entries[i].additionalParameterNumBits)       
     491          /* up to 255 bits, only 32 stored (leading bits zero); in pieces of
     492             16 bits, as ADDBITS cannot handle more than 30 bits */
     493          unsigned int k = md->Entries[i].additionalParameterNumBits;
     494          while (k) {
     495            unsigned int n = (k > 16) ? 16 : k;
     496            k -= n;
     497            E_ADDITIONAL_MODEL_PARAMETER_DATA((k < 32) ? (md->Entries[i].additionalParameterData >> k) : 0, n)
     498          }
    492499      }
    493500    }
  • trunk/BNC/src/RTCM3/crsEncoder.cpp

    r10551 r11126  
    1111using namespace std;
    1212
     13// Length of a name for the 5-bit length field: up to the terminating 0,
     14// at most 31 characters
     15////////////////////////////////////////////////////////////////////////////
     16static int nameLength(const char* name, size_t bufSize) {
     17  size_t n = strnlen(name, bufSize);
     18  return (n > 31) ? 31 : int(n);
     19}
     20
    1321// build up RTCM3 for serviceCrs
    1422////////////////////////////////////////////////////////////////////////////
    … …  
    1725  INITBLOCK
    1826  ADDBITS(12, 1300)
    19   int N = sizeof(serviceCrs._name) / sizeof(serviceCrs._name[0]);
    20   if (N > 31) {N = 31;}
     27  int N = nameLength(serviceCrs._name, sizeof(serviceCrs._name));
    2128  ADDBITS(5, N)
    2229  for(int i = 0; i < N; i++) {
    … …  
    3542
    3643  ADDBITS(12, 1302)
    37   int N = sizeof(rtcmCrs._name) / sizeof(rtcmCrs._name[0]);
    38   if (N > 31) {N = 31;}
     44  int N = nameLength(rtcmCrs._name, sizeof(rtcmCrs._name));
    3945  ADDBITS(5, N)
    4046  for(int i = 0; i < N; i++) {
    … …  
    4450  ADDBITS(5, rtcmCrs._plateNumber)
    4551  int dblinknum = rtcmCrs._databaseLinks.size();
     52  if (dblinknum > 7) {dblinknum = 7;} // 3 bits
    4653  ADDBITS(3, dblinknum);
    47   if (dblinknum) {
    48     for(int d = 0; d < dblinknum; d++) {
    49       N = sizeof(rtcmCrs._databaseLinks[d]) / sizeof(rtcmCrs._databaseLinks[d][0]);
    50       for(int i = 0; i < N; i++) {
    51         ADDBITS(8, rtcmCrs._databaseLinks[d].toLatin1()[i])
    52       }
     54  for(int d = 0; d < dblinknum; d++) {
     55    QByteArray dblink = rtcmCrs._databaseLinks[d].toLatin1();
     56    N = nameLength(dblink.constData(), dblink.size());
     57    ADDBITS(5, N)
     58    for(int i = 0; i < N; i++) {
     59      ADDBITS(8, dblink[i])
    5360    }
    5461  }
    … …  
    6572
    6673  ADDBITS(12, 1301)
    67   int N = sizeof(helmertPar._sourceName) / sizeof(helmertPar._sourceName[0]);
    68   if (N > 31) {N = 31;}
     74  int N = nameLength(helmertPar._sourceName, sizeof(helmertPar._sourceName));
    6975  ADDBITS(5, N)
    7076  for(int i = 0; i < N; i++) {
    7177    ADDBITS(8, helmertPar._sourceName[i])
    7278  }
    73   N = sizeof(helmertPar._targetName) / sizeof(helmertPar._targetName[0]);
    74   if (N > 31) {N = 31;}
     79  N = nameLength(helmertPar._targetName, sizeof(helmertPar._targetName));
    7580  ADDBITS(5, N)
    7681  for(int i = 0; i < N; i++) {
Note: See TracChangeset for help on using the changeset viewer.