Changeset 11126 in ntrip for trunk/BNC/src/RTCM3/crsEncoder.cpp


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

Some fixes from security point of view

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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.