From e3b07202959ebec7e744323763a04becde73ab64 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Mon, 13 Jul 2015 19:32:03 +0200 Subject: [PATCH] Made value object regular expressions thread safe (note: which is important because the RegEx is static) --- src/blackmisc/aviation/aircrafticaocode.cpp | 12 +++++++++--- src/blackmisc/aviation/airlineicaocode.cpp | 5 ++++- src/blackmisc/aviation/callsign.cpp | 5 ++++- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/blackmisc/aviation/aircrafticaocode.cpp b/src/blackmisc/aviation/aircrafticaocode.cpp index 0c5f9b7a8..b192faf43 100644 --- a/src/blackmisc/aviation/aircrafticaocode.cpp +++ b/src/blackmisc/aviation/aircrafticaocode.cpp @@ -150,15 +150,21 @@ namespace BlackMisc bool CAircraftIcaoCode::isValidDesignator(const QString &designator) { - static const QRegularExpression regexp("^[A-Z]+[A-Z0-9]*$"); if (designator.length() < 2 || designator.length() > 5) { return false; } + + static QThreadStorage tsRegex; + if (! tsRegex.hasLocalData()) { tsRegex.setLocalData(QRegularExpression("^[A-Z]+[A-Z0-9]*$")); } + const QRegularExpression ®exp = tsRegex.localData(); return (regexp.match(designator).hasMatch()); } bool CAircraftIcaoCode::isValidCombinedType(const QString &combinedType) { - static const QRegularExpression regexp("^[A-Z][0-9][A-Z]$"); - if (combinedType.length() != 3) return false; + if (combinedType.length() != 3) { return false; } + + static QThreadStorage tsRegex; + if (! tsRegex.hasLocalData()) { tsRegex.setLocalData(QRegularExpression("^[A-Z][0-9][A-Z]$")); } + const QRegularExpression ®exp = tsRegex.localData(); return (regexp.match(combinedType).hasMatch()); } diff --git a/src/blackmisc/aviation/airlineicaocode.cpp b/src/blackmisc/aviation/airlineicaocode.cpp index b992d1d6f..56b637646 100644 --- a/src/blackmisc/aviation/airlineicaocode.cpp +++ b/src/blackmisc/aviation/airlineicaocode.cpp @@ -106,8 +106,11 @@ namespace BlackMisc bool CAirlineIcaoCode::isValidAirlineDesignator(const QString &airline) { - static QRegularExpression regexp("^[A-Z]+[A-Z0-9]*$"); if (airline.length() < 2 || airline.length() > 5) return false; + + static QThreadStorage tsRegex; + if (! tsRegex.hasLocalData()) { tsRegex.setLocalData(QRegularExpression("^[A-Z]+[A-Z0-9]*$")); } + const QRegularExpression ®exp = tsRegex.localData(); return (regexp.match(airline).hasMatch()); } diff --git a/src/blackmisc/aviation/callsign.cpp b/src/blackmisc/aviation/callsign.cpp index 73fd4c572..f3d7cccb1 100644 --- a/src/blackmisc/aviation/callsign.cpp +++ b/src/blackmisc/aviation/callsign.cpp @@ -168,8 +168,11 @@ namespace BlackMisc bool CCallsign::isValidCallsign(const QString &callsign) { // We allow all number callsigns - static QRegularExpression regexp("^[A-Z0-9]*$"); if (callsign.length() < 2 || callsign.length() > 10) { return false; } + + static QThreadStorage tsRegex; + if (! tsRegex.hasLocalData()) { tsRegex.setLocalData(QRegularExpression("^[A-Z0-9]*$")); } + const QRegularExpression ®exp = tsRegex.localData(); return (regexp.match(callsign).hasMatch()); }