Skip to content

Commit

Permalink
fix: [core] BitArray fromString parsing error reports
Browse files Browse the repository at this point in the history
This technically breaks the core API, but the old fromString parameters were non-functional
  • Loading branch information
hello-adam committed Jun 19, 2021
1 parent 90acccd commit 4b176de
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 9 deletions.
14 changes: 10 additions & 4 deletions src/hobbits-core/bitarray.cpp
Expand Up @@ -702,7 +702,7 @@ QByteArray BitArray::readBytesNoSync(qint64 byteOffset, qint64 maxBytes) const
return m_dataFile.read(maxBytes);
}

QSharedPointer<BitArray> BitArray::fromString(QString bitArraySpec, QStringList parseErrors)
QSharedPointer<BitArray> BitArray::fromString(QString bitArraySpec, QStringList *parseErrors)
{
int size = 0;
if (bitArraySpec.startsWith("0x")) {
Expand All @@ -718,7 +718,9 @@ QSharedPointer<BitArray> BitArray::fromString(QString bitArraySpec, QStringList
return QSharedPointer<BitArray>(new BitArray(bytes, size));
}
else {
parseErrors.append(QString("Expected only hex digits in '0x'-prefixed data - got '%1'").arg(bitArraySpec));
if (parseErrors != nullptr) {
parseErrors->append(QString("Expected only hex digits in '0x'-prefixed data - got '%1'").arg(bitArraySpec));
}
return QSharedPointer<BitArray>(new BitArray());
}
}
Expand All @@ -731,10 +733,12 @@ QSharedPointer<BitArray> BitArray::fromString(QString bitArraySpec, QStringList
int val = bitArraySpec.mid(i, 1).toInt(&parseOk, 8);

if (!parseOk) {
parseErrors.append(
if (parseErrors != nullptr) {
parseErrors->append(
QString("Expected octal digit in '0o'-prefixed data - got %1").arg(
bitArraySpec.at(
i)));
}
continue;
}

Expand All @@ -752,8 +756,10 @@ QSharedPointer<BitArray> BitArray::fromString(QString bitArraySpec, QStringList
bits->set(i - 2, true);
}
else if (bitArraySpec.at(i) != '0') {
parseErrors.append(
if (parseErrors != nullptr) {
parseErrors->append(
QString("Expected '1' or '0' in '0b'-prefixed data - got '%1'").arg(bitArraySpec.at(i)));
}
}
}
return bits;
Expand Down
2 changes: 1 addition & 1 deletion src/hobbits-core/bitarray.h
Expand Up @@ -69,7 +69,7 @@ class HOBBITSCORESHARED_EXPORT BitArray
static BitArray* deserialize(QDataStream &stream);
void serialize(QDataStream &stream) const;

static QSharedPointer<BitArray> fromString(QString bitArraySpec, QStringList parseErrors = QStringList());
static QSharedPointer<BitArray> fromString(QString bitArraySpec, QStringList *parseErrors = nullptr);

private:
void writeToStream(QDataStream &dataStream) const; // private for use by serializer and writeTo
Expand Down
8 changes: 7 additions & 1 deletion src/hobbits-plugins/analyzers/Find/find.cpp
Expand Up @@ -54,7 +54,13 @@ QSharedPointer<const AnalyzerResult> Find::analyzeBits(
return AnalyzerResult::error(QString("Invalid parameters passed to %1:\n%2").arg(name()).arg(invalidations.join("\n")));
}

auto findBits = BitArray::fromString(parameters.value("search_string").toString());
QStringList parseErrors;
QString searchString = parameters.value("search_string").toString();
auto findBits = BitArray::fromString(searchString, &parseErrors);
if (!parseErrors.isEmpty()) {
return AnalyzerResult::error(QString("Failed to parse search term:\n%1").arg(parseErrors.mid(0, 10).join("\n")));
}

auto bits = container->bits();

if (findBits->sizeInBits() < 1) {
Expand Down
Expand Up @@ -99,7 +99,7 @@ QString HeaderFramerForm::getHeaderString()
}

QStringList parseErrors;
QSharedPointer<BitArray> header = BitArray::fromString(ui->le_header->text(), parseErrors);
QSharedPointer<BitArray> header = BitArray::fromString(ui->le_header->text(), &parseErrors);
if (!parseErrors.isEmpty()) {
return QString();
}
Expand Down
Expand Up @@ -95,8 +95,8 @@ QSharedPointer<const OperatorResult> SymbolRemapper::operateOnBits(

QStringList parseErrors;

auto oldBits = BitArray::fromString("0b" + oldVal, parseErrors);
QSharedPointer<BitArray> newBits = BitArray::fromString("0b" + newVal, parseErrors);
auto oldBits = BitArray::fromString("0b" + oldVal, &parseErrors);
QSharedPointer<BitArray> newBits = BitArray::fromString("0b" + newVal, &parseErrors);

if (!parseErrors.isEmpty()) {
return nullResult;
Expand Down

0 comments on commit 4b176de

Please sign in to comment.