Changeset 11128 in ntrip for trunk/BNC/src/bncnetqueryudp0.cpp


Ignore:
Timestamp:
Oct 24, 2026, 11:37:52 PM (33 hours ago)
Author:
stuerze
Message:

Some fixes from security point of view

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/BNC/src/bncnetqueryudp0.cpp

    r6787 r11128  
    1414 *
    1515 * -----------------------------------------------------------------------*/
     16
     17#include <QHostInfo>
    1618
    1719#include "bncnetqueryudp0.h"
    … …  
    4749void bncNetQueryUdp0::waitForReadyRead(QByteArray& outData) {
    4850
    49   // Wait Loop
    50   // ---------
    51   if (!_udpSocket->hasPendingDatagrams()) {
    52     _eventLoop->exec();
     51  if (!_udpSocket) {
     52    return;
    5353  }
    5454
    55   // Append Data
    56   // -----------
    57   QByteArray datagram;
    58   datagram.resize(_udpSocket->pendingDatagramSize());
    59   _udpSocket->readDatagram(datagram.data(), datagram.size());
     55  while (true) {
    6056
    61   outData.append(datagram);
     57    // Wait Loop
     58    // ---------
     59    if (!_udpSocket->hasPendingDatagrams()) {
     60      _eventLoop->exec();
     61      if (!_udpSocket->hasPendingDatagrams()) { // stopped
     62        return;
     63      }
     64    }
     65
     66    // Append Data, only from the accepted senders
     67    // -------------------------------------------
     68    QByteArray datagram;
     69    QHostAddress sender;
     70    datagram.resize(_udpSocket->pendingDatagramSize());
     71    _udpSocket->readDatagram(datagram.data(), datagram.size(), &sender);
     72    bool accepted = _senders.isEmpty();
     73    for (int ii = 0; !accepted && ii < _senders.size(); ii++) {
     74      accepted = sender.isEqual(_senders[ii], QHostAddress::ConvertV4MappedToIPv4);
     75    }
     76    if (accepted) {
     77      outData.append(datagram);
     78      return;
     79    }
     80  }
    6281}
    6382
    … …  
    6786
    6887  _status = running;
     88
     89  // Host of the URL: sender whose datagrams are accepted; 127.0.0.1 (as
     90  // written by the 'Add Stream - Coming from UDP Port' dialog), localhost
     91  // or 0.0.0.0: datagrams from any sender
     92  _senders.clear();
     93  QString host = url.host();
     94  if (!host.isEmpty() && host != "127.0.0.1" && host != "localhost" && host != "0.0.0.0") {
     95    QHostAddress address;
     96    if (address.setAddress(host)) {
     97      _senders << address;
     98    }
     99    else {
     100      _senders = QHostInfo::fromName(host).addresses();
     101      if (_senders.isEmpty()) {
     102        emit newMessage(url.path().toLatin1().replace(0,1,"") +
     103                        ": Cannot resolve UDP sender " + host.toLatin1(), true);
     104        _status = error;
     105        return;
     106      }
     107    }
     108  }
    69109
    70110  delete _udpSocket;
Note: See TracChangeset for help on using the changeset viewer.