diff options
author | Michael Laß | 2021-05-13 22:13:59 +0200 |
---|---|---|
committer | Michael Laß | 2021-05-13 22:13:59 +0200 |
commit | 97fcdf4c46b570e55abc4c64483d0264ac9b28c4 (patch) | |
tree | 0764d9a60902b704852f74cf8e4e4624bd4ddc18 | |
parent | fce13ea8286c4eef4c5853de95a84005ac304d60 (diff) | |
download | aur-97fcdf4c46b570e55abc4c64483d0264ac9b28c4.tar.gz |
Add a couple of patches (mainly stability fixes)
-rw-r--r-- | .SRCINFO | 10 | ||||
-rw-r--r-- | 0001-mot_dir-changes.patch | 150 | ||||
-rw-r--r-- | 0002-padHandler-verify-data-length.patch | 42 | ||||
-rw-r--r-- | 0003-padHandler-correct-valid-range-for-last.patch | 30 | ||||
-rw-r--r-- | 0004-hackrf-update-gain-display-when-restoring-settings.patch | 56 | ||||
-rw-r--r-- | PKGBUILD | 22 |
6 files changed, 306 insertions, 4 deletions
@@ -1,7 +1,7 @@ pkgbase = qt-dab pkgdesc = Software DAB decoder for use with various SDR devices pkgver = 3.72 - pkgrel = 1 + pkgrel = 2 url = https://www.sdr-j.tk/ arch = x86_64 license = GPL2 @@ -19,7 +19,15 @@ pkgbase = qt-dab optdepends = rtl-sdr: Support for RTL-SDR optdepends = libsdrplay: Support for SDRplay source = https://github.com/JvanKatwijk/qt-dab/archive/refs/tags/Qt-DAB3.72.tar.gz + source = 0001-mot_dir-changes.patch + source = 0002-padHandler-verify-data-length.patch + source = 0003-padHandler-correct-valid-range-for-last.patch + source = 0004-hackrf-update-gain-display-when-restoring-settings.patch sha256sums = 8e90bd7e35a2fb6e3f3f3aee61ee65d3c37ead5731ba0146fa29883685167ed4 + sha256sums = f4f60612d82afffbbd99b5549a4e4ddcd9745e046da9974fe373091251ace85c + sha256sums = f20e66cd0a2f29ee90e20bcdf8aa6ca5b2f06e554e3373ef9118823d5b2ca9d6 + sha256sums = 170fe2ce981e1d7bc4a7ea5924862887a5c752822375887935f67ea5c34341d6 + sha256sums = 09ee42c73a928688e710d961c16d46f5d804fb00f7037e24109823b0898d22d4 pkgname = qt-dab diff --git a/0001-mot_dir-changes.patch b/0001-mot_dir-changes.patch new file mode 100644 index 000000000000..b0ccae1503d8 --- /dev/null +++ b/0001-mot_dir-changes.patch @@ -0,0 +1,150 @@ +From c59f0f924e5808b9f5d9ad9a223c22d22c254872 Mon Sep 17 00:00:00 2001 +From: JvanKatwijk <J.vanKatwijk@gmail.com> +Date: Thu, 13 May 2021 12:11:32 +0200 +Subject: [PATCH 1/4] mot_dir changes + +--- + dab-maxi/main.cpp | 6 +++--- + includes/backend/data/mot/mot-dir.h | 5 +++-- + src/backend/data/mot/mot-dir.cpp | 27 ++++++++++++++------------- + src/backend/data/mot/mot-handler.cpp | 3 ++- + 4 files changed, 22 insertions(+), 19 deletions(-) + +diff --git a/dab-maxi/main.cpp b/dab-maxi/main.cpp +index 26ef9d4..c303ed6 100755 +--- a/dab-maxi/main.cpp ++++ b/dab-maxi/main.cpp +@@ -160,7 +160,7 @@ int fmFrequency = 110000; + } + + void setTranslator (QString Language) { +-QTranslator Translator; ++QTranslator *Translator = new QTranslator; + + // German is special (as always) + if ((Language == "de_AT") || (Language == "de_CH")) +@@ -168,9 +168,9 @@ QTranslator Translator; + // + // what about Dutch? + bool TranslatorLoaded = +- Translator. load (QString(":/i18n/") + Language); ++ Translator -> load (QString(":/i18n/") + Language); + qDebug() << "main:" << "Set language" << Language; +- QCoreApplication::installTranslator (&Translator); ++ QCoreApplication::installTranslator (Translator); + + if (!TranslatorLoaded) { + qDebug() << "main:" << "Error while loading language specifics" << Language << "use English \"en_GB\" instead"; +diff --git a/includes/backend/data/mot/mot-dir.h b/includes/backend/data/mot/mot-dir.h +index a549898..6a43cf7 100755 +--- a/includes/backend/data/mot/mot-dir.h ++++ b/includes/backend/data/mot/mot-dir.h +@@ -28,6 +28,7 @@ + + #include "mot-object.h" + #include <QString> ++#include <vector> + class RadioInterface; + + class motDirectory { +@@ -52,7 +53,7 @@ private: + uint16_t transportId; + + RadioInterface *myRadioInterface; +- uint8_t *dir_segments; ++ std::vector<uint8_t> dir_segments; + bool marked [512]; + int16_t dir_segmentSize; + int16_t num_dirSegments; +@@ -63,7 +64,7 @@ private: + uint16_t transportId; + motObject *motSlide; + } motComponentType; +- motComponentType *motComponents; ++ std::vector<motComponentType> motComponents; + }; + + #endif +diff --git a/src/backend/data/mot/mot-dir.cpp b/src/backend/data/mot/mot-dir.cpp +index 8f1c2c0..59cd71e 100755 +--- a/src/backend/data/mot/mot-dir.cpp ++++ b/src/backend/data/mot/mot-dir.cpp +@@ -43,22 +43,23 @@ int16_t i; + this -> dir_segmentSize = segmentSize; + fprintf (stderr, "dirSize %d, numObjects %d, segmentSize %d\n", + dirSize, objects, segmentSize); +- dir_segments = new uint8_t [dirSize]; +- motComponents = new motComponentType [objects]; +- for (i = 0; i < objects; i ++) ++ dir_segments. resize (dirSize); ++ motComponents. resize (objects); ++ for (i = 0; i < objects; i ++) { + motComponents [i]. inUse = false; ++ motComponents [i]. motSlide = nullptr; ++ } + memcpy (&dir_segments [0], segment, segmentSize); + marked [0] = true; +- } ++} + + motDirectory::~motDirectory() { + int i; +- delete [] dir_segments; + + for (i = 0; i < numObjects; i ++) +- if (motComponents [i]. inUse) +- delete [] motComponents [i]. motSlide; +- delete [] motComponents; ++ if (motComponents [i]. inUse && ++ (motComponents [i]. motSlide != nullptr)) ++ delete motComponents [i]. motSlide; + } + + motObject *motDirectory::getHandle (uint16_t transportId) { +@@ -118,18 +119,18 @@ int16_t i; + + void motDirectory::analyse_theDirectory() { + uint32_t currentBase = 11; // in bytes +-uint8_t *data = dir_segments; ++//uint8_t *data = dir_segments; + uint16_t extensionLength = (dir_segments [currentBase] << 8) | +- data [currentBase + 1]; ++ dir_segments [currentBase + 1]; + + currentBase += 2 + extensionLength; + for (int i = 0; i < numObjects; i ++) { +- uint16_t transportId = (data [currentBase] << 8) | +- data [currentBase + 1]; ++ uint16_t transportId = (dir_segments [currentBase] << 8) | ++ dir_segments [currentBase + 1]; + if (transportId == 0) // just a dummy + break; + +- uint8_t *segment = &data [currentBase + 2]; ++ uint8_t *segment = &dir_segments [currentBase + 2]; + motObject *handle = new motObject (myRadioInterface, + true, + transportId, +diff --git a/src/backend/data/mot/mot-handler.cpp b/src/backend/data/mot/mot-handler.cpp +index f505cd4..6b8b082 100755 +--- a/src/backend/data/mot/mot-handler.cpp ++++ b/src/backend/data/mot/mot-handler.cpp +@@ -48,13 +48,14 @@ struct motTable_ { + motHandler::~motHandler() { + int i; + +- for (i = 0; i < 15; i ++) ++ for (i = 0; i < 15; i ++) { + if (motTable [i]. orderNumber > 0) { + if (motTable [i]. motSlide != nullptr) { + delete motTable [i]. motSlide; + motTable [i]. motSlide = nullptr; + } + } ++ } + if (theDirectory != nullptr) + delete theDirectory; + } +-- +2.31.1 + diff --git a/0002-padHandler-verify-data-length.patch b/0002-padHandler-verify-data-length.patch new file mode 100644 index 000000000000..9296fb594293 --- /dev/null +++ b/0002-padHandler-verify-data-length.patch @@ -0,0 +1,42 @@ +From 3a2adddfb7e1c5c77b231d3d245a011ee35773cf Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Michael=20La=C3=9F?= <bevan@bi-co.net> +Date: Thu, 13 May 2021 12:33:32 +0200 +Subject: [PATCH 2/4] padHandler: verify data length + +Make sure to never compute negative offsets for array accesses. +--- + src/backend/data/pad-handler.cpp | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/src/backend/data/pad-handler.cpp b/src/backend/data/pad-handler.cpp +index 19517ac..570bb2e 100755 +--- a/src/backend/data/pad-handler.cpp ++++ b/src/backend/data/pad-handler.cpp +@@ -193,6 +193,12 @@ std::vector<uint8_t> data; // for the local addition + // the size of the latest xpadfield that had a CI_flag != 0 + if (CI_flag == 0) { + if (mscGroupElement && (xpadLength > 0)) { ++ ++ if (last < xpadLength) { ++ fprintf(stderr, "handle_variablePAD: last < xpadLength\n"); ++ return; ++ } ++ + data. resize (xpadLength); + for (j = 0; j < xpadLength; j ++) + data [j] = b [last - j]; +@@ -407,6 +413,11 @@ void padHandler::build_MSC_segment (std::vector<uint8_t> data) { + // is + int32_t size = data. size() < (uint32_t)dataGroupLength ? data. size() : + dataGroupLength; ++ ++if (size < 2) { ++ fprintf (stderr, "build_MSC_segment: data size < 2\n"); ++ return; ++} + + uint8_t groupType = data [0] & 0xF; + //uint8_t continuityIndex = (data [1] & 0xF0) >> 4; +-- +2.31.1 + diff --git a/0003-padHandler-correct-valid-range-for-last.patch b/0003-padHandler-correct-valid-range-for-last.patch new file mode 100644 index 000000000000..407b5e52799e --- /dev/null +++ b/0003-padHandler-correct-valid-range-for-last.patch @@ -0,0 +1,30 @@ +From 8d0826759666dd0c207790b4ce8ac548bec760b8 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Michael=20La=C3=9F?= <bevan@bi-co.net> +Date: Thu, 13 May 2021 13:22:57 +0200 +Subject: [PATCH 3/4] padHandler: correct valid range for last + +3a2addd introduced a check for last in padHandler::handle_variablePAD. +However, j only runs until xpadLength-1, so last being xpadLength-1 is +totally fine. +--- + src/backend/data/pad-handler.cpp | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/backend/data/pad-handler.cpp b/src/backend/data/pad-handler.cpp +index 570bb2e..c694fea 100755 +--- a/src/backend/data/pad-handler.cpp ++++ b/src/backend/data/pad-handler.cpp +@@ -194,8 +194,8 @@ std::vector<uint8_t> data; // for the local addition + if (CI_flag == 0) { + if (mscGroupElement && (xpadLength > 0)) { + +- if (last < xpadLength) { +- fprintf(stderr, "handle_variablePAD: last < xpadLength\n"); ++ if (last < xpadLength - 1) { ++ fprintf(stderr, "handle_variablePAD: last < xpadLength - 1\n"); + return; + } + +-- +2.31.1 + diff --git a/0004-hackrf-update-gain-display-when-restoring-settings.patch b/0004-hackrf-update-gain-display-when-restoring-settings.patch new file mode 100644 index 000000000000..5f79a14293d7 --- /dev/null +++ b/0004-hackrf-update-gain-display-when-restoring-settings.patch @@ -0,0 +1,56 @@ +From 665f8840df98c050adc64a9e4e64cd9e3a6c0378 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Michael=20La=C3=9F?= <bevan@bi-co.net> +Date: Thu, 13 May 2021 15:31:20 +0200 +Subject: [PATCH 4/4] hackrf: update gain display when restoring settings + +So far, only the sliders are updated and not the LCD type numeric +displays. Since signal emission is disabled during restore, the updates +do not automatically propagate to the numeric displays. + +This commit also removes leftover definitions of __KEEP_GAIN_SETTINGS__ +in qt-dab.pro since this setting is gone since qt-dab 3.5. +--- + dab-maxi/qt-dab.pro | 2 -- + dab-maxi/qt-devices/hackrf-handler/hackrf-handler.cpp | 4 ++++ + 2 files changed, 4 insertions(+), 2 deletions(-) + +diff --git a/dab-maxi/qt-dab.pro b/dab-maxi/qt-dab.pro +index dd91bcc..a2a83fd 100755 +--- a/dab-maxi/qt-dab.pro ++++ b/dab-maxi/qt-dab.pro +@@ -346,7 +346,6 @@ CONFIG += PC + #CONFIG += RPI + #DEFINES += SHOW_MISSING + DEFINES += __DUMP_SNR__ # for experiments only +-DEFINES +=__KEEP_GAIN_SETTINGS__ + } + + +@@ -430,7 +429,6 @@ CONFIG += faad + + CONFIG += try-epg # do not use + DEFINES += __DUMP_SNR__ # for experiments only +-DEFINES +=__KEEP_GAIN_SETTINGS__ + } + # devices + # +diff --git a/dab-maxi/qt-devices/hackrf-handler/hackrf-handler.cpp b/dab-maxi/qt-devices/hackrf-handler/hackrf-handler.cpp +index cb41ec9..4a9da5d 100755 +--- a/dab-maxi/qt-devices/hackrf-handler/hackrf-handler.cpp ++++ b/dab-maxi/qt-devices/hackrf-handler/hackrf-handler.cpp +@@ -208,8 +208,12 @@ int res; + AmpEnableButton, SLOT (setChecked (bool))); + connect (this, SIGNAL (new_vgaValue (int)), + vgaGainSlider, SLOT (setValue (int))); ++ connect (this, SIGNAL (new_vgaValue (int)), ++ vgagainDisplay, SLOT (display (int))); + connect (this, SIGNAL (new_lnaValue (int)), + lnaGainSlider, SLOT (setValue (int))); ++ connect (this, SIGNAL (new_lnaValue (int)), ++ lnagainDisplay, SLOT (display (int))); + xmlDumper = nullptr; + dumping. store (false); + running. store (false); +-- +2.31.1 + @@ -6,7 +6,7 @@ pkgname=qt-dab _pkgname=Qt-DAB pkgver=3.72 -pkgrel=1 +pkgrel=2 pkgdesc="Software DAB decoder for use with various SDR devices" arch=(x86_64) url="https://www.sdr-j.tk/" @@ -18,12 +18,28 @@ optdepends=('airspy: Support for Airspy' 'libad9361: Support for Pluto' 'rtl-sdr: Support for RTL-SDR' 'libsdrplay: Support for SDRplay') -source=("https://github.com/JvanKatwijk/${pkgname}/archive/refs/tags/${_pkgname}${pkgver}.tar.gz") -sha256sums=('8e90bd7e35a2fb6e3f3f3aee61ee65d3c37ead5731ba0146fa29883685167ed4') +source=("https://github.com/JvanKatwijk/${pkgname}/archive/refs/tags/${_pkgname}${pkgver}.tar.gz" + 0001-mot_dir-changes.patch + 0002-padHandler-verify-data-length.patch + 0003-padHandler-correct-valid-range-for-last.patch + 0004-hackrf-update-gain-display-when-restoring-settings.patch) +sha256sums=('8e90bd7e35a2fb6e3f3f3aee61ee65d3c37ead5731ba0146fa29883685167ed4' + 'f4f60612d82afffbbd99b5549a4e4ddcd9745e046da9974fe373091251ace85c' + 'f20e66cd0a2f29ee90e20bcdf8aa6ca5b2f06e554e3373ef9118823d5b2ca9d6' + '170fe2ce981e1d7bc4a7ea5924862887a5c752822375887935f67ea5c34341d6' + '09ee42c73a928688e710d961c16d46f5d804fb00f7037e24109823b0898d22d4') prepare() { cd "${pkgname}-${_pkgname}${pkgver}" + # Some stability fixes + patch -p1 < "$srcdir"/0001-mot_dir-changes.patch + patch -p1 < "$srcdir"/0002-padHandler-verify-data-length.patch + patch -p1 < "$srcdir"/0003-padHandler-correct-valid-range-for-last.patch + + # Fix for gain display for hackrf + patch -p1 < "$srcdir"/0004-hackrf-update-gain-display-when-restoring-settings.patch + # The program is officially called Qt-DAB. sed -i 's/Qt_DAB/Qt-DAB/g' dab-maxi/${pkgname}.desktop } |