Updated code to support newer Qt versions (#237)

This commit is contained in:
Vampire Cat 2021-04-04 11:09:23 +02:00 committed by GitHub
parent d1e47539fc
commit 34c8ad8dcc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
28 changed files with 358 additions and 94 deletions

2
.gitignore vendored
View file

@ -248,3 +248,5 @@ DerivedData
compile_commands.json compile_commands.json
CMakeScripts CMakeScripts
UEFITool/qrc_uefitool.cpp UEFITool/qrc_uefitool.cpp
XcodeQT5
XcodeQT6

View file

@ -29,7 +29,12 @@ USTATUS FfsFinder::findHexPattern(const UModelIndex & index, const UByteArray &
bool hasChildren = (model->rowCount(index) > 0); bool hasChildren = (model->rowCount(index) > 0);
for (int i = 0; i < model->rowCount(index); i++) { for (int i = 0; i < model->rowCount(index); i++) {
#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5)
findHexPattern(index.child(i, index.column()), hexPattern, mode); findHexPattern(index.child(i, index.column()), hexPattern, mode);
#else
findHexPattern(index.model()->index(i, index.column(), index), hexPattern, mode);
#endif
} }
UByteArray data; UByteArray data;
@ -49,9 +54,22 @@ USTATUS FfsFinder::findHexPattern(const UModelIndex & index, const UByteArray &
} }
UString hexBody = UString(data.toHex()); UString hexBody = UString(data.toHex());
#if QT_VERSION_MAJOR >= 6
QRegularExpression regexp = QRegularExpression(UString(hexPattern));
regexp.setPatternOptions((QRegularExpression::PatternOptions)0x1);
QRegularExpressionMatch regexpmatch;
INT32 offset = 0;
while ((offset = (INT32)hexBody.indexOf(regexp, (qsizetype)offset, &regexpmatch)) != -1)
{
#else
QRegExp regexp = QRegExp(UString(hexPattern), Qt::CaseInsensitive); QRegExp regexp = QRegExp(UString(hexPattern), Qt::CaseInsensitive);
INT32 offset = regexp.indexIn(hexBody); INT32 offset = regexp.indexIn(hexBody);
while (offset >= 0) { while (offset >= 0) {
#endif
if (offset % 2 == 0) { if (offset % 2 == 0) {
// For patterns that cross header|body boundary, skip patterns entirely located in body, since // For patterns that cross header|body boundary, skip patterns entirely located in body, since
// children search above has already found them. // children search above has already found them.
@ -64,7 +82,12 @@ USTATUS FfsFinder::findHexPattern(const UModelIndex & index, const UByteArray &
index); index);
} }
} }
#if QT_VERSION_MAJOR >= 6
offset += 1;
#else
offset = regexp.indexIn(hexBody, offset + 1); offset = regexp.indexIn(hexBody, offset + 1);
#endif
} }
return U_SUCCESS; return U_SUCCESS;
@ -80,7 +103,11 @@ USTATUS FfsFinder::findGuidPattern(const UModelIndex & index, const UByteArray &
bool hasChildren = (model->rowCount(index) > 0); bool hasChildren = (model->rowCount(index) > 0);
for (int i = 0; i < model->rowCount(index); i++) { for (int i = 0; i < model->rowCount(index); i++) {
#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5)
findGuidPattern(index.child(i, index.column()), guidPattern, mode); findGuidPattern(index.child(i, index.column()), guidPattern, mode);
#else
findGuidPattern(index.model()->index(i, index.column(), index), guidPattern, mode);
#endif
} }
UByteArray data; UByteArray data;
@ -121,8 +148,19 @@ USTATUS FfsFinder::findGuidPattern(const UModelIndex & index, const UByteArray &
if (hexPattern.count('.') == hexPattern.length()) if (hexPattern.count('.') == hexPattern.length())
return U_SUCCESS; return U_SUCCESS;
#if QT_VERSION_MAJOR >= 6
QRegularExpression regexp((QString)UString(hexPattern));
regexp.setPatternOptions((QRegularExpression::PatternOptions)0x1);
QRegularExpressionMatch regexpmatch;
INT32 offset = 0;
offset = (INT32)hexBody.indexOf(regexp, (qsizetype)offset, &regexpmatch);
#else
QRegExp regexp(UString(hexPattern), Qt::CaseInsensitive); QRegExp regexp(UString(hexPattern), Qt::CaseInsensitive);
INT32 offset = regexp.indexIn(hexBody); INT32 offset = regexp.indexIn(hexBody);
#endif
while (offset >= 0) { while (offset >= 0) {
if (offset % 2 == 0) { if (offset % 2 == 0) {
msg(UString("GUID pattern \"") + UString(guidPattern) msg(UString("GUID pattern \"") + UString(guidPattern)
@ -132,7 +170,12 @@ USTATUS FfsFinder::findGuidPattern(const UModelIndex & index, const UByteArray &
+ usprintf(" at %s-offset %02Xh", mode == SEARCH_MODE_BODY ? "body" : "header", offset / 2), + usprintf(" at %s-offset %02Xh", mode == SEARCH_MODE_BODY ? "body" : "header", offset / 2),
index); index);
} }
#if QT_VERSION_MAJOR >= 6
offset = (INT32)hexBody.indexOf(regexp, (qsizetype)offset + 1, &regexpmatch);
#else
offset = regexp.indexIn(hexBody, offset + 1); offset = regexp.indexIn(hexBody, offset + 1);
#endif
} }
return U_SUCCESS; return U_SUCCESS;
@ -148,7 +191,11 @@ USTATUS FfsFinder::findTextPattern(const UModelIndex & index, const UString & pa
bool hasChildren = (model->rowCount(index) > 0); bool hasChildren = (model->rowCount(index) > 0);
for (int i = 0; i < model->rowCount(index); i++) { for (int i = 0; i < model->rowCount(index); i++) {
#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5)
findTextPattern(index.child(i, index.column()), pattern, mode, unicode, caseSensitive); findTextPattern(index.child(i, index.column()), pattern, mode, unicode, caseSensitive);
#else
findTextPattern(index.model()->index(i, index.column(), index), pattern, mode, unicode, caseSensitive);
#endif
} }
UByteArray body; UByteArray body;
@ -167,12 +214,16 @@ USTATUS FfsFinder::findTextPattern(const UModelIndex & index, const UString & pa
UString data; UString data;
if (unicode) if (unicode)
data = UString::fromUtf16((const ushort*)body.constData(), body.length() / 2); #if QT_VERSION_MAJOR >= 6
data = UString::fromUtf16((const char16_t*)body.constData(), (int)(body.length() / 2));
#else
data = UString::fromUtf16((const ushort*)body.constData(), (int)(body.length() / 2));
#endif
else else
data = UString::fromLatin1((const char*)body.constData(), body.length()); data = UString::fromLatin1((const char*)body.constData(), body.length());
int offset = -1; int offset = -1;
while ((offset = data.indexOf(pattern, offset + 1, caseSensitive)) >= 0) { while ((offset = (int)data.indexOf(pattern, (int)(offset + 1), caseSensitive)) >= 0) {
msg((unicode ? UString("Unicode") : UString("ASCII")) + UString(" text \"") + UString(pattern) msg((unicode ? UString("Unicode") : UString("ASCII")) + UString(" text \"") + UString(pattern)
+ UString("\" in ") + model->name(model->parent(index)) + UString("\" in ") + model->name(model->parent(index))

View file

@ -15,7 +15,12 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#define FFSFINDER_H #define FFSFINDER_H
#include <vector> #include <vector>
#if QT_VERSION_MAJOR >= 6
#include <QRegularExpression>
#else
#include <QRegExp> #include <QRegExp>
#endif
#include "../common/ubytearray.h" #include "../common/ubytearray.h"
#include "../common/ustring.h" #include "../common/ustring.h"

View file

@ -15,7 +15,11 @@
#include <QDebug> #include <QDebug>
HexSpinBox::HexSpinBox(QWidget *parent) : HexSpinBox::HexSpinBox(QWidget *parent) :
#if QT_VERSION_MAJOR >= 6
QSpinBox(parent), validator(QRegularExpression("0x([0-9a-fA-F]){1,8}"))
#else
QSpinBox(parent), validator(QRegExp("0x([0-9a-fA-F]){1,8}")) QSpinBox(parent), validator(QRegExp("0x([0-9a-fA-F]){1,8}"))
#endif
{ {
this->setRange(INT_MIN, INT_MAX); this->setRange(INT_MIN, INT_MAX);
this->setPrefix("0x"); this->setPrefix("0x");

View file

@ -15,7 +15,12 @@
#define HEXSPINBOX_H #define HEXSPINBOX_H
#include <QSpinBox> #include <QSpinBox>
#if QT_VERSION_MAJOR >= 6
#include <QRegularExpressionValidator>
#else
#include <QRegExpValidator> #include <QRegExpValidator>
#endif
class HexSpinBox : public QSpinBox class HexSpinBox : public QSpinBox
{ {
@ -30,7 +35,11 @@ protected:
QString textFromValue(int value) const; QString textFromValue(int value) const;
private: private:
#if QT_VERSION_MAJOR >= 6
QRegularExpressionValidator validator;
#else
QRegExpValidator validator; QRegExpValidator validator;
#endif
}; };
#endif // HEXSPINBOX_H #endif // HEXSPINBOX_H

Binary file not shown.

View file

@ -95,11 +95,11 @@ QByteArray Chunks::data(qint64 pos, qint64 maxSize, QByteArray *highlighted)
count = maxSize; count = maxSize;
if (count > 0) if (count > 0)
{ {
buffer += chunk.data.mid(chunkOfs, (int)count); buffer += chunk.data.mid((int)chunkOfs, (int)count);
maxSize -= count; maxSize -= count;
pos += count; pos += count;
if (highlighted) if (highlighted)
*highlighted += chunk.dataChanged.mid(chunkOfs, (int)count); *highlighted += chunk.dataChanged.mid((int)chunkOfs, (int)count);
} }
} }
} }
@ -176,7 +176,7 @@ qint64 Chunks::indexOf(const QByteArray &ba, qint64 from)
for (qint64 pos=from; (pos < _size) && (result < 0); pos += BUFFER_SIZE) for (qint64 pos=from; (pos < _size) && (result < 0); pos += BUFFER_SIZE)
{ {
buffer = data(pos, BUFFER_SIZE + ba.size() - 1); buffer = data(pos, BUFFER_SIZE + ba.size() - 1);
int findPos = buffer.indexOf(ba); int findPos = (int)buffer.indexOf(ba);
if (findPos >= 0) if (findPos >= 0)
result = pos + (qint64)findPos; result = pos + (qint64)findPos;
} }
@ -194,7 +194,7 @@ qint64 Chunks::lastIndexOf(const QByteArray &ba, qint64 from)
if (sPos < 0) if (sPos < 0)
sPos = 0; sPos = 0;
buffer = data(sPos, pos - sPos); buffer = data(sPos, pos - sPos);
int findPos = buffer.lastIndexOf(ba); int findPos = (int)buffer.lastIndexOf(ba);
if (findPos >= 0) if (findPos >= 0)
result = sPos + (qint64)findPos; result = sPos + (qint64)findPos;
} }
@ -214,8 +214,8 @@ bool Chunks::insert(qint64 pos, char b)
else else
chunkIdx = getChunkIndex(pos); chunkIdx = getChunkIndex(pos);
qint64 posInBa = pos - _chunks[chunkIdx].absPos; qint64 posInBa = pos - _chunks[chunkIdx].absPos;
_chunks[chunkIdx].data.insert(posInBa, b); _chunks[chunkIdx].data.insert((int)posInBa, b);
_chunks[chunkIdx].dataChanged.insert(posInBa, char(1)); _chunks[chunkIdx].dataChanged.insert((int)posInBa, char(1));
for (int idx=chunkIdx+1; idx < _chunks.size(); idx++) for (int idx=chunkIdx+1; idx < _chunks.size(); idx++)
_chunks[idx].absPos += 1; _chunks[idx].absPos += 1;
_size += 1; _size += 1;
@ -241,8 +241,8 @@ bool Chunks::removeAt(qint64 pos)
return false; return false;
int chunkIdx = getChunkIndex(pos); int chunkIdx = getChunkIndex(pos);
qint64 posInBa = pos - _chunks[chunkIdx].absPos; qint64 posInBa = pos - _chunks[chunkIdx].absPos;
_chunks[chunkIdx].data.remove(posInBa, 1); _chunks[chunkIdx].data.remove((int)posInBa, 1);
_chunks[chunkIdx].dataChanged.remove(posInBa, 1); _chunks[chunkIdx].dataChanged.remove((int)posInBa, 1);
for (int idx=chunkIdx+1; idx < _chunks.size(); idx++) for (int idx=chunkIdx+1; idx < _chunks.size(); idx++)
_chunks[idx].absPos -= 1; _chunks[idx].absPos -= 1;
_size -= 1; _size -= 1;

View file

@ -408,7 +408,13 @@ QString QHexEdit::selectionToReadableString()
void QHexEdit::setFont(const QFont &font) void QHexEdit::setFont(const QFont &font)
{ {
QWidget::setFont(font); QWidget::setFont(font);
#if ((QT_VERSION_MINOR >= 11) && (QT_VERSION_MAJOR == 5)) || (QT_VERSION_MAJOR >= 6)
_pxCharWidth = fontMetrics().horizontalAdvance('2');
#else
_pxCharWidth = fontMetrics().width(QLatin1Char('2')); _pxCharWidth = fontMetrics().width(QLatin1Char('2'));
#endif
_pxCharHeight = fontMetrics().height(); _pxCharHeight = fontMetrics().height();
_pxGapAdr = _pxCharWidth / 2; _pxGapAdr = _pxCharWidth / 2;
_pxGapAdrHex = _pxCharWidth; _pxGapAdrHex = _pxCharWidth;
@ -573,7 +579,7 @@ void QHexEdit::keyPressEvent(QKeyEvent *event)
{ {
QByteArray ba = _chunks->data(getSelectionBegin(), getSelectionEnd() - getSelectionBegin()).toHex(); QByteArray ba = _chunks->data(getSelectionBegin(), getSelectionEnd() - getSelectionBegin()).toHex();
for (qint64 idx = 32; idx < ba.size(); idx +=33) for (qint64 idx = 32; idx < ba.size(); idx +=33)
ba.insert(idx, "\n"); ba.insert((int)idx, "\n");
QClipboard *clipboard = QApplication::clipboard(); QClipboard *clipboard = QApplication::clipboard();
clipboard->setText(ba); clipboard->setText(ba);
if (_overwriteMode) if (_overwriteMode)
@ -596,7 +602,7 @@ void QHexEdit::keyPressEvent(QKeyEvent *event)
QByteArray ba = QByteArray().fromHex(clipboard->text().toLatin1()); QByteArray ba = QByteArray().fromHex(clipboard->text().toLatin1());
if (_overwriteMode) if (_overwriteMode)
{ {
ba = ba.left(std::min<qint64>(ba.size(), (_chunks->size() - _bPosCurrent))); ba = ba.left((int)std::min<qint64>(ba.size(), (_chunks->size() - _bPosCurrent)));
replace(_bPosCurrent, ba.size(), ba); replace(_bPosCurrent, ba.size(), ba);
} }
else else
@ -746,7 +752,7 @@ void QHexEdit::keyPressEvent(QKeyEvent *event)
{ {
QByteArray ba = _chunks->data(getSelectionBegin(), getSelectionEnd() - getSelectionBegin()).toHex(); QByteArray ba = _chunks->data(getSelectionBegin(), getSelectionEnd() - getSelectionBegin()).toHex();
for (qint64 idx = 32; idx < ba.size(); idx += 33) for (qint64 idx = 32; idx < ba.size(); idx += 33)
ba.insert(idx, "\n"); ba.insert((int)idx, "\n");
if(_upperCase) if(_upperCase)
ba = ba.toUpper(); ba = ba.toUpper();
QClipboard *clipboard = QApplication::clipboard(); QClipboard *clipboard = QApplication::clipboard();
@ -875,7 +881,7 @@ void QHexEdit::paintEvent(QPaintEvent *event)
else else
r.setRect(pxPosX - _pxCharWidth, pxPosY - _pxCharHeight + _pxSelectionSub, 3*_pxCharWidth, _pxCharHeight); r.setRect(pxPosX - _pxCharWidth, pxPosY - _pxCharHeight + _pxSelectionSub, 3*_pxCharWidth, _pxCharHeight);
painter.fillRect(r, c); painter.fillRect(r, c);
hex = _hexDataShown.mid((bPosLine + colIdx) * 2, 2); hex = _hexDataShown.mid((int)((bPosLine + colIdx) * 2), 2);
// upper or lower case // upper or lower case
if (_upperCase) if (_upperCase)
@ -887,7 +893,7 @@ void QHexEdit::paintEvent(QPaintEvent *event)
// render ascii value // render ascii value
if (_asciiArea) if (_asciiArea)
{ {
int ch = (uchar)_dataShown.at(bPosLine + colIdx); int ch = (uchar)_dataShown.at((int)(bPosLine + colIdx));
if ( ch < 0x20 ) if ( ch < 0x20 )
ch = '.'; ch = '.';
r.setRect(pxPosAsciiX2, pxPosY - _pxCharHeight + _pxSelectionSub, _pxCharWidth, _pxCharHeight); r.setRect(pxPosAsciiX2, pxPosY - _pxCharHeight + _pxSelectionSub, _pxCharWidth, _pxCharHeight);
@ -977,12 +983,12 @@ void QHexEdit::setSelection(qint64 pos)
int QHexEdit::getSelectionBegin() int QHexEdit::getSelectionBegin()
{ {
return _bSelectionBegin; return (int)_bSelectionBegin;
} }
int QHexEdit::getSelectionEnd() int QHexEdit::getSelectionEnd()
{ {
return _bSelectionEnd; return (int)_bSelectionEnd;
} }
// ********************************************************************** Private utility functions // ********************************************************************** Private utility functions

View file

@ -16,8 +16,13 @@
SearchDialog::SearchDialog(QWidget *parent) : SearchDialog::SearchDialog(QWidget *parent) :
QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint), QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint),
ui(new Ui::SearchDialog), ui(new Ui::SearchDialog),
#if QT_VERSION_MAJOR >= 6
hexValidator(QRegularExpression("([0-9a-fA-F\\. ])*")),
guidValidator(QRegularExpression("[0-9a-fA-F\\.]{8}-[0-9a-fA-F\\.]{4}-[0-9a-fA-F\\.]{4}-[0-9a-fA-F\\.]{4}-[0-9a-fA-F\\.]{12}"))
#else
hexValidator(QRegExp("([0-9a-fA-F\\. ])*")), hexValidator(QRegExp("([0-9a-fA-F\\. ])*")),
guidValidator(QRegExp("[0-9a-fA-F\\.]{8}-[0-9a-fA-F\\.]{4}-[0-9a-fA-F\\.]{4}-[0-9a-fA-F\\.]{4}-[0-9a-fA-F\\.]{12}")) guidValidator(QRegExp("[0-9a-fA-F\\.]{8}-[0-9a-fA-F\\.]{4}-[0-9a-fA-F\\.]{4}-[0-9a-fA-F\\.]{4}-[0-9a-fA-F\\.]{12}"))
#endif
{ {
// Create UI // Create UI
ui->setupUi(this); ui->setupUi(this);

View file

@ -15,7 +15,13 @@
#define SEARCHDIALOG_H #define SEARCHDIALOG_H
#include <QDialog> #include <QDialog>
#if QT_VERSION_MAJOR >= 6
#include <QRegularExpressionValidator>
#else
#include <QRegExpValidator> #include <QRegExpValidator>
#endif
#include "ui_searchdialog.h" #include "ui_searchdialog.h"
class SearchDialog : public QDialog class SearchDialog : public QDialog
@ -31,8 +37,13 @@ private slots:
void setEditFocus(int index); void setEditFocus(int index);
private: private:
#if QT_VERSION_MAJOR >= 6
QRegularExpressionValidator hexValidator;
QRegularExpressionValidator guidValidator;
#else
QRegExpValidator hexValidator; QRegExpValidator hexValidator;
QRegExpValidator guidValidator; QRegExpValidator guidValidator;
#endif
}; };
#endif // SEARCHDIALOG_H #endif // SEARCHDIALOG_H

View file

@ -390,7 +390,12 @@ void UEFITool::goToData()
} }
for (int j = i + 1; j < model->rowCount(parent); j++) { for (int j = i + 1; j < model->rowCount(parent); j++) {
#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5)
QModelIndex currentIndex = parent.child(j, 0); QModelIndex currentIndex = parent.child(j, 0);
#else
QModelIndex currentIndex = parent.model()->index(j, 0, parent);
#endif
if (model->hasEmptyParsingData(currentIndex)) if (model->hasEmptyParsingData(currentIndex))
continue; continue;
@ -788,8 +793,14 @@ void UEFITool::showParserMessages()
return; return;
std::vector<std::pair<QString, QModelIndex> > messages = ffsParser->getMessages(); std::vector<std::pair<QString, QModelIndex> > messages = ffsParser->getMessages();
#if QT_VERSION_MAJOR < 6
std::pair<QString, QModelIndex> msg; std::pair<QString, QModelIndex> msg;
foreach (msg, messages) { foreach (msg, messages) {
#else
for (const auto &msg : messages) {
#endif
QListWidgetItem* item = new QListWidgetItem(msg.first, NULL, 0); QListWidgetItem* item = new QListWidgetItem(msg.first, NULL, 0);
item->setData(Qt::UserRole, QByteArray((const char*)&msg.second, sizeof(msg.second))); item->setData(Qt::UserRole, QByteArray((const char*)&msg.second, sizeof(msg.second)));
ui->parserMessagesListWidget->addItem(item); ui->parserMessagesListWidget->addItem(item);
@ -806,8 +817,14 @@ void UEFITool::showFinderMessages()
return; return;
std::vector<std::pair<QString, QModelIndex> > messages = ffsFinder->getMessages(); std::vector<std::pair<QString, QModelIndex> > messages = ffsFinder->getMessages();
#if QT_VERSION_MAJOR < 6
std::pair<QString, QModelIndex> msg; std::pair<QString, QModelIndex> msg;
foreach (msg, messages) { foreach (msg, messages) {
#else
for (const auto &msg : messages) {
#endif
QListWidgetItem* item = new QListWidgetItem(msg.first, NULL, 0); QListWidgetItem* item = new QListWidgetItem(msg.first, NULL, 0);
item->setData(Qt::UserRole, QByteArray((const char*)&msg.second, sizeof(msg.second)));; item->setData(Qt::UserRole, QByteArray((const char*)&msg.second, sizeof(msg.second)));;
ui->finderMessagesListWidget->addItem(item); ui->finderMessagesListWidget->addItem(item);
@ -825,8 +842,14 @@ void UEFITool::showBuilderMessages()
return; return;
std::vector<std::pair<QString, QModelIndex> > messages = ffsBuilder->getMessages(); std::vector<std::pair<QString, QModelIndex> > messages = ffsBuilder->getMessages();
#if QT_VERSION_MAJOR < 6
std::pair<QString, QModelIndex> msg; std::pair<QString, QModelIndex> msg;
foreach (msg, messages) { foreach (msg, messages) {
#else
for (const auto &msg : messages) {
#endif
QListWidgetItem* item = new QListWidgetItem(msg.first, NULL, 0); QListWidgetItem* item = new QListWidgetItem(msg.first, NULL, 0);
item->setData(Qt::UserRole, QByteArray((const char*)&msg.second, sizeof(msg.second))); item->setData(Qt::UserRole, QByteArray((const char*)&msg.second, sizeof(msg.second)));
ui->builderMessagesListWidget->addItem(item); ui->builderMessagesListWidget->addItem(item);

View file

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.assets.movies.read-write</key>
<true/>
<key>com.apple.security.assets.music.read-write</key>
<true/>
<key>com.apple.security.assets.pictures.read-write</key>
<true/>
<key>com.apple.security.files.downloads.read-write</key>
<true/>
<key>com.apple.security.files.user-selected.read-write</key>
<true/>
<key>com.apple.security.print</key>
<true/>
</dict>
</plist>

View file

@ -697,9 +697,9 @@ int CBString::find (const CBString& b, int pos) const {
int CBString::find (const char * b, int pos) const { int CBString::find (const char * b, int pos) const {
int ii, j; int ii, j;
unsigned char c0; unsigned char c0;
register int i, l; int i, l;
register unsigned char cx; unsigned char cx;
register unsigned char * pdata; unsigned char * pdata;
if (NULL == b) { if (NULL == b) {
#ifdef BSTRLIB_THROWS_EXCEPTIONS #ifdef BSTRLIB_THROWS_EXCEPTIONS

View file

@ -92,7 +92,12 @@ USTATUS FfsBuilder::buildCapsule(const UModelIndex & index, UByteArray & capsule
} }
// Build image // Build image
#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5)
UModelIndex imageIndex = index.child(0, 0); UModelIndex imageIndex = index.child(0, 0);
#else
UModelIndex imageIndex = index.model()->index(0, 0, index);
#endif
UByteArray imageData; UByteArray imageData;
// Check image type // Check image type
@ -123,8 +128,8 @@ USTATUS FfsBuilder::buildCapsule(const UModelIndex & index, UByteArray & capsule
} }
// Check size of reconstructed capsule body, it must remain the same // Check size of reconstructed capsule body, it must remain the same
UINT32 newSize = capsule.size(); UINT32 newSize = (UINT32)capsule.size();
UINT32 oldSize = model->body(index).size(); UINT32 oldSize = (UINT32)model->body(index).size();
if (newSize > oldSize) { if (newSize > oldSize) {
msg(usprintf("buildCapsule: new capsule size %Xh (%u) is bigger than the original %Xh (%u)", newSize, newSize, oldSize, oldSize), index); msg(usprintf("buildCapsule: new capsule size %Xh (%u) is bigger than the original %Xh (%u)", newSize, newSize, oldSize, oldSize), index);
return U_INVALID_CAPSULE; return U_INVALID_CAPSULE;
@ -165,11 +170,19 @@ USTATUS FfsBuilder::buildIntelImage(const UModelIndex & index, UByteArray & inte
// Rebuild // Rebuild
else if (model->action(index) == Actions::Rebuild) { else if (model->action(index) == Actions::Rebuild) {
// First child will always be descriptor for this type of image, and it's read only for now // First child will always be descriptor for this type of image, and it's read only for now
#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5)
intelImage = model->header(index.child(0, 0)) + model->body(index.child(0, 0)) + model->tail(index.child(0, 0)); intelImage = model->header(index.child(0, 0)) + model->body(index.child(0, 0)) + model->tail(index.child(0, 0));
#else
intelImage = model->header(index.model()->index(0, 0, index)) + model->body(index.model()->index(0, 0, index)) + model->tail(index.model()->index(0, 0, index));
#endif
// Process other regions // Process other regions
for (int i = 1; i < model->rowCount(index); i++) { for (int i = 1; i < model->rowCount(index); i++) {
#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5)
UModelIndex currentRegion = index.child(i, 0); UModelIndex currentRegion = index.child(i, 0);
#else
UModelIndex currentRegion = index.model()->index(i, 0, index);
#endif
// Skip regions with Remove action // Skip regions with Remove action
if (model->action(currentRegion) == Actions::Remove) if (model->action(currentRegion) == Actions::Remove)
@ -222,8 +235,8 @@ USTATUS FfsBuilder::buildIntelImage(const UModelIndex & index, UByteArray & inte
} }
// Check size of new image, it must be same as old one // Check size of new image, it must be same as old one
UINT32 newSize = intelImage.size(); UINT32 newSize = (UINT32)intelImage.size();
UINT32 oldSize = model->body(index).size(); UINT32 oldSize = (UINT32)model->body(index).size();
if (newSize > oldSize) { if (newSize > oldSize) {
msg(usprintf("buildIntelImage: new image size %Xh (%u) is bigger than the original %Xh (%u)", newSize, newSize, oldSize, oldSize), index); msg(usprintf("buildIntelImage: new image size %Xh (%u) is bigger than the original %Xh (%u)", newSize, newSize, oldSize, oldSize), index);
return U_INVALID_IMAGE; return U_INVALID_IMAGE;
@ -269,7 +282,13 @@ USTATUS FfsBuilder::buildRawArea(const UModelIndex & index, UByteArray & rawArea
// Build children // Build children
for (int i = 0; i < model->rowCount(index); i++) { for (int i = 0; i < model->rowCount(index); i++) {
USTATUS result = U_SUCCESS; USTATUS result = U_SUCCESS;
#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5)
UModelIndex currentChild = index.child(i, 0); UModelIndex currentChild = index.child(i, 0);
#else
UModelIndex currentChild = index.model()->index(i, 0, index);
#endif
UByteArray currentData; UByteArray currentData;
// Check child type // Check child type
if (model->type(currentChild) == Types::Volume) { if (model->type(currentChild) == Types::Volume) {
@ -292,8 +311,8 @@ USTATUS FfsBuilder::buildRawArea(const UModelIndex & index, UByteArray & rawArea
} }
// Check size of new raw area, it must be same as original one // Check size of new raw area, it must be same as original one
UINT32 newSize = rawArea.size(); UINT32 newSize = (UINT32)rawArea.size();
UINT32 oldSize = model->body(index).size(); UINT32 oldSize = (UINT32)model->body(index).size();
if (newSize > oldSize) { if (newSize > oldSize) {
msg(usprintf("buildRawArea: new area size %Xh (%u) is bigger than the original %Xh (%u)", newSize, newSize, oldSize, oldSize), index); msg(usprintf("buildRawArea: new area size %Xh (%u) is bigger than the original %Xh (%u)", newSize, newSize, oldSize, oldSize), index);
return U_INVALID_RAW_AREA; return U_INVALID_RAW_AREA;

View file

@ -44,8 +44,13 @@ USTATUS FfsOperations::extract(const UModelIndex & index, UString & name, UByteA
extracted.clear(); extracted.clear();
// There is no need to redo decompression, we can use child items // There is no need to redo decompression, we can use child items
for (int i = 0; i < model->rowCount(index); i++) { for (int i = 0; i < model->rowCount(index); i++) {
UModelIndex childIndex = index.child(i, 0); #if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5)
// Ensure 4-byte alignment of current section UModelIndex childIndex = index.child(i, 0);
#else
UModelIndex childIndex = index.model()->index(i, 0, index);
#endif
// Ensure 4-byte alignment of current section
extracted += UByteArray(ALIGN4((UINT32)extracted.size()) - (UINT32)extracted.size(), '\x00'); extracted += UByteArray(ALIGN4((UINT32)extracted.size()) - (UINT32)extracted.size(), '\x00');
// Add current section header, body and tail // Add current section header, body and tail
extracted += model->header(childIndex); extracted += model->header(childIndex);

View file

@ -478,7 +478,7 @@ USTATUS FfsParser::parseIntelImage(const UByteArray & intelImage, const UINT32 l
// Check for padding after the last region // Check for padding after the last region
if ((UINT64)regions.back().offset + (UINT64)regions.back().length < (UINT64)intelImage.size()) { if ((UINT64)regions.back().offset + (UINT64)regions.back().length < (UINT64)intelImage.size()) {
region.offset = regions.back().offset + regions.back().length; region.offset = regions.back().offset + regions.back().length;
region.length = intelImage.size() - region.offset; region.length = (UINT32)(intelImage.size() - region.offset);
region.data = intelImage.mid(region.offset, region.length); region.data = intelImage.mid(region.offset, region.length);
region.type = getPaddingType(region.data); region.type = getPaddingType(region.data);
regions.push_back(region); regions.push_back(region);
@ -718,10 +718,10 @@ USTATUS FfsParser::parseMeRegion(const UByteArray & me, const UINT32 localOffset
} }
else { else {
// Search for new signature // Search for new signature
INT32 versionOffset = me.indexOf(ME_VERSION_SIGNATURE2); INT32 versionOffset = (INT32)me.indexOf(ME_VERSION_SIGNATURE2);
if (versionOffset < 0){ // New signature not found if (versionOffset < 0){ // New signature not found
// Search for old signature // Search for old signature
versionOffset = me.indexOf(ME_VERSION_SIGNATURE); versionOffset = (INT32)me.indexOf(ME_VERSION_SIGNATURE);
if (versionOffset < 0){ if (versionOffset < 0){
info += ("\nVersion: unknown"); info += ("\nVersion: unknown");
versionFound = false; versionFound = false;
@ -848,7 +848,7 @@ USTATUS FfsParser::parseRawArea(const UModelIndex & index)
// Get item data // Get item data
UByteArray data = model->body(index); UByteArray data = model->body(index);
UINT32 headerSize = model->header(index).size(); UINT32 headerSize = (UINT32)model->header(index).size();
USTATUS result; USTATUS result;
UString name; UString name;
@ -919,7 +919,7 @@ USTATUS FfsParser::parseRawArea(const UModelIndex & index)
// Update variables // Update variables
prevItemOffset = itemOffset; prevItemOffset = itemOffset;
prevItemSize = padding.size(); prevItemSize = (UINT32)padding.size();
break; break;
} }
@ -992,7 +992,12 @@ USTATUS FfsParser::parseRawArea(const UModelIndex & index)
// Parse bodies // Parse bodies
for (int i = 0; i < model->rowCount(index); i++) { for (int i = 0; i < model->rowCount(index); i++) {
#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5)
UModelIndex current = index.child(i, 0); UModelIndex current = index.child(i, 0);
#else
UModelIndex current = index.model()->index(i, 0, index);
#endif
switch (model->type(current)) { switch (model->type(current)) {
case Types::Volume: case Types::Volume:
parseVolumeBody(current); parseVolumeBody(current);
@ -1122,7 +1127,7 @@ USTATUS FfsParser::parseVolumeHeader(const UByteArray & volume, const UINT32 loc
// Check for AppleCRC32 and UsedSpace in ZeroVector // Check for AppleCRC32 and UsedSpace in ZeroVector
bool hasAppleCrc32 = false; bool hasAppleCrc32 = false;
UINT32 volumeSize = volume.size(); UINT32 volumeSize = (UINT32)volume.size();
UINT32 appleCrc32 = *(UINT32*)(volume.constData() + 8); UINT32 appleCrc32 = *(UINT32*)(volume.constData() + 8);
UINT32 usedSpace = *(UINT32*)(volume.constData() + 12); UINT32 usedSpace = *(UINT32*)(volume.constData() + 12);
if (appleCrc32 != 0) { if (appleCrc32 != 0) {
@ -1295,7 +1300,7 @@ BOOLEAN FfsParser::microcodeHeaderValid(const INTEL_MICROCODE_HEADER* ucodeHeade
USTATUS FfsParser::findNextRawAreaItem(const UModelIndex & index, const UINT32 localOffset, UINT8 & nextItemType, UINT32 & nextItemOffset, UINT32 & nextItemSize, UINT32 & nextItemAlternativeSize) USTATUS FfsParser::findNextRawAreaItem(const UModelIndex & index, const UINT32 localOffset, UINT8 & nextItemType, UINT32 & nextItemOffset, UINT32 & nextItemSize, UINT32 & nextItemAlternativeSize)
{ {
UByteArray data = model->body(index); UByteArray data = model->body(index);
UINT32 dataSize = data.size(); UINT32 dataSize = (UINT32)data.size();
if (dataSize < sizeof(UINT32)) if (dataSize < sizeof(UINT32))
return U_STORES_NOT_FOUND; return U_STORES_NOT_FOUND;
@ -1435,7 +1440,7 @@ USTATUS FfsParser::parseVolumeBody(const UModelIndex & index)
// Get volume header size and body // Get volume header size and body
UByteArray volumeBody = model->body(index); UByteArray volumeBody = model->body(index);
UINT32 volumeHeaderSize = model->header(index).size(); UINT32 volumeHeaderSize = (UINT32)model->header(index).size();
// Parse VSS NVRAM volumes with a dedicated function // Parse VSS NVRAM volumes with a dedicated function
if (model->subtype(index) == Subtypes::NvramVolume) { if (model->subtype(index) == Subtypes::NvramVolume) {
@ -1466,7 +1471,7 @@ USTATUS FfsParser::parseVolumeBody(const UModelIndex & index)
} }
// Search for and parse all files // Search for and parse all files
UINT32 volumeBodySize = volumeBody.size(); UINT32 volumeBodySize = (UINT32)volumeBody.size();
UINT32 fileOffset = 0; UINT32 fileOffset = 0;
while (fileOffset < volumeBodySize) { while (fileOffset < volumeBodySize) {
@ -1496,7 +1501,7 @@ USTATUS FfsParser::parseVolumeBody(const UModelIndex & index)
if (freeSpace.count(emptyByte) != freeSpace.size()) { if (freeSpace.count(emptyByte) != freeSpace.size()) {
// Search for the first non-empty byte // Search for the first non-empty byte
UINT32 i; UINT32 i;
UINT32 size = freeSpace.size(); UINT32 size = (UINT32)freeSpace.size();
const UINT8* current = (UINT8*)freeSpace.constData(); const UINT8* current = (UINT8*)freeSpace.constData();
for (i = 0; i < size; i++) { for (i = 0; i < size; i++) {
if (*current++ != emptyByte) { if (*current++ != emptyByte) {
@ -1559,7 +1564,12 @@ USTATUS FfsParser::parseVolumeBody(const UModelIndex & index)
// Check for duplicate GUIDs // Check for duplicate GUIDs
for (int i = 0; i < model->rowCount(index); i++) { for (int i = 0; i < model->rowCount(index); i++) {
#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5)
UModelIndex current = index.child(i, 0); UModelIndex current = index.child(i, 0);
#else
UModelIndex current = index.model()->index(i, 0, index);
#endif
// Skip non-file entries and pad files // Skip non-file entries and pad files
if (model->type(current) != Types::File || model->subtype(current) == EFI_FV_FILETYPE_PAD) { if (model->type(current) != Types::File || model->subtype(current) == EFI_FV_FILETYPE_PAD) {
continue; continue;
@ -1570,7 +1580,11 @@ USTATUS FfsParser::parseVolumeBody(const UModelIndex & index)
// Check files after current for having an equal GUID // Check files after current for having an equal GUID
for (int j = i + 1; j < model->rowCount(index); j++) { for (int j = i + 1; j < model->rowCount(index); j++) {
#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5)
UModelIndex another = index.child(j, 0); UModelIndex another = index.child(j, 0);
#else
UModelIndex another = index.model()->index(j, 0, index);
#endif
// Skip non-file entries // Skip non-file entries
if (model->type(another) != Types::File) { if (model->type(another) != Types::File) {
@ -1589,7 +1603,12 @@ USTATUS FfsParser::parseVolumeBody(const UModelIndex & index)
// Parse bodies // Parse bodies
for (int i = 0; i < model->rowCount(index); i++) { for (int i = 0; i < model->rowCount(index); i++) {
#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5)
UModelIndex current = index.child(i, 0); UModelIndex current = index.child(i, 0);
#else
UModelIndex current = index.model()->index(i, 0, index);
#endif
switch (model->type(current)) { switch (model->type(current)) {
case Types::File: case Types::File:
parseFileBody(current); parseFileBody(current);
@ -1704,7 +1723,7 @@ USTATUS FfsParser::parseFileHeader(const UByteArray & file, const UINT32 localOf
} }
// Check header checksum // Check header checksum
UINT8 calculatedHeader = 0x100 - (calculateSum8((const UINT8*)header.constData(), header.size()) - fileHeader->IntegrityCheck.Checksum.Header - fileHeader->IntegrityCheck.Checksum.File - fileHeader->State); UINT8 calculatedHeader = 0x100 - (calculateSum8((const UINT8*)header.constData(), (UINT32)header.size()) - fileHeader->IntegrityCheck.Checksum.Header - fileHeader->IntegrityCheck.Checksum.File - fileHeader->State);
bool msgInvalidHeaderChecksum = false; bool msgInvalidHeaderChecksum = false;
if (fileHeader->IntegrityCheck.Checksum.Header != calculatedHeader) { if (fileHeader->IntegrityCheck.Checksum.Header != calculatedHeader) {
msgInvalidHeaderChecksum = true; msgInvalidHeaderChecksum = true;
@ -1715,7 +1734,7 @@ USTATUS FfsParser::parseFileHeader(const UByteArray & file, const UINT32 localOf
bool msgInvalidDataChecksum = false; bool msgInvalidDataChecksum = false;
UINT8 calculatedData = 0; UINT8 calculatedData = 0;
if (fileHeader->Attributes & FFS_ATTRIB_CHECKSUM) { if (fileHeader->Attributes & FFS_ATTRIB_CHECKSUM) {
calculatedData = calculateChecksum8((const UINT8*)body.constData(), body.size()); calculatedData = calculateChecksum8((const UINT8*)body.constData(), (UINT32)body.size());
} }
// Data checksum must be one of predefined values // Data checksum must be one of predefined values
else if (volumeRevision == 1) { else if (volumeRevision == 1) {
@ -1907,7 +1926,7 @@ USTATUS FfsParser::parsePadFileBody(const UModelIndex & index)
// Search for the first non-empty byte // Search for the first non-empty byte
UINT32 nonEmptyByteOffset; UINT32 nonEmptyByteOffset;
UINT32 size = body.size(); UINT32 size = (UINT32)body.size();
const UINT8* current = (const UINT8*)body.constData(); const UINT8* current = (const UINT8*)body.constData();
for (nonEmptyByteOffset = 0; nonEmptyByteOffset < size; nonEmptyByteOffset++) { for (nonEmptyByteOffset = 0; nonEmptyByteOffset < size; nonEmptyByteOffset++) {
if (*current++ != emptyByte) if (*current++ != emptyByte)
@ -1915,7 +1934,7 @@ USTATUS FfsParser::parsePadFileBody(const UModelIndex & index)
} }
// Add all bytes before as free space... // Add all bytes before as free space...
UINT32 headerSize = model->header(index).size(); UINT32 headerSize = (UINT32)model->header(index).size();
if (nonEmptyByteOffset >= 8) { if (nonEmptyByteOffset >= 8) {
// Align free space to 8 bytes boundary // Align free space to 8 bytes boundary
if (nonEmptyByteOffset != ALIGN8(nonEmptyByteOffset)) if (nonEmptyByteOffset != ALIGN8(nonEmptyByteOffset))
@ -1959,8 +1978,8 @@ USTATUS FfsParser::parseSections(const UByteArray & sections, const UModelIndex
return U_INVALID_PARAMETER; return U_INVALID_PARAMETER;
// Search for and parse all sections // Search for and parse all sections
UINT32 bodySize = sections.size(); UINT32 bodySize = (UINT32)sections.size();
UINT32 headerSize = model->header(index).size(); UINT32 headerSize = (UINT32)model->header(index).size();
UINT32 sectionOffset = 0; UINT32 sectionOffset = 0;
USTATUS result = U_SUCCESS; USTATUS result = U_SUCCESS;
@ -2019,7 +2038,12 @@ USTATUS FfsParser::parseSections(const UByteArray & sections, const UModelIndex
// Parse bodies, will be skipped if insertIntoTree is not required // Parse bodies, will be skipped if insertIntoTree is not required
for (int i = 0; i < model->rowCount(index); i++) { for (int i = 0; i < model->rowCount(index); i++) {
#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5)
UModelIndex current = index.child(i, 0); UModelIndex current = index.child(i, 0);
#else
UModelIndex current = index.model()->index(i, 0, index);
#endif
switch (model->type(current)) { switch (model->type(current)) {
case Types::Section: case Types::Section:
parseSectionBody(current); parseSectionBody(current);
@ -2278,7 +2302,7 @@ USTATUS FfsParser::parseGuidedSectionHeader(const UByteArray & section, const UI
UINT32 crc = *(UINT32*)(section.constData() + headerSize); UINT32 crc = *(UINT32*)(section.constData() + headerSize);
additionalInfo += UString("\nChecksum type: CRC32"); additionalInfo += UString("\nChecksum type: CRC32");
// Calculate CRC32 of section data // Calculate CRC32 of section data
UINT32 calculated = (UINT32)crc32(0, (const UINT8*)section.constData() + dataOffset, section.size() - dataOffset); UINT32 calculated = (UINT32)crc32(0, (const UINT8*)section.constData() + dataOffset, (uInt)(section.size() - dataOffset));
if (crc == calculated) { if (crc == calculated) {
additionalInfo += usprintf("\nChecksum: %08Xh, valid", crc); additionalInfo += usprintf("\nChecksum: %08Xh, valid", crc);
} }
@ -2656,7 +2680,7 @@ USTATUS FfsParser::parseCompressedSectionBody(const UModelIndex & index)
// Obtain required information from parsing data // Obtain required information from parsing data
UINT8 compressionType = EFI_NOT_COMPRESSED; UINT8 compressionType = EFI_NOT_COMPRESSED;
UINT32 uncompressedSize = model->body(index).size(); UINT32 uncompressedSize = (UINT32)model->body(index).size();
if (model->hasEmptyParsingData(index) == false) { if (model->hasEmptyParsingData(index) == false) {
UByteArray data = model->parsingData(index); UByteArray data = model->parsingData(index);
const COMPRESSED_SECTION_PARSING_DATA* pdata = (const COMPRESSED_SECTION_PARSING_DATA*)data.constData(); const COMPRESSED_SECTION_PARSING_DATA* pdata = (const COMPRESSED_SECTION_PARSING_DATA*)data.constData();
@ -2846,7 +2870,11 @@ USTATUS FfsParser::parseVersionSectionBody(const UModelIndex & index)
return U_INVALID_PARAMETER; return U_INVALID_PARAMETER;
// Add info // Add info
#if QT_VERSION_MAJOR >= 6
model->addInfo(index, UString("\nVersion string: ") + UString::fromUtf16((const char16_t*)model->body(index).constData()));
#else
model->addInfo(index, UString("\nVersion string: ") + UString::fromUtf16((const CHAR16*)model->body(index).constData())); model->addInfo(index, UString("\nVersion string: ") + UString::fromUtf16((const CHAR16*)model->body(index).constData()));
#endif
return U_SUCCESS; return U_SUCCESS;
} }
@ -2981,7 +3009,11 @@ USTATUS FfsParser::parseUiSectionBody(const UModelIndex & index)
if (!index.isValid()) if (!index.isValid())
return U_INVALID_PARAMETER; return U_INVALID_PARAMETER;
#if QT_VERSION_MAJOR >= 6
UString text = UString::fromUtf16((const char16_t*)model->body(index).constData());
#else
UString text = UString::fromUtf16((const CHAR16*)model->body(index).constData()); UString text = UString::fromUtf16((const CHAR16*)model->body(index).constData());
#endif
// Add info // Add info
model->addInfo(index, UString("\nText: ") + text); model->addInfo(index, UString("\nText: ") + text);
@ -2999,7 +3031,7 @@ USTATUS FfsParser::parseAprioriRawSection(const UByteArray & body, UString & par
msg(usprintf("%s: apriori file has size is not a multiple of 16", __FUNCTION__)); msg(usprintf("%s: apriori file has size is not a multiple of 16", __FUNCTION__));
} }
parsed.clear(); parsed.clear();
UINT32 count = body.size() / sizeof(EFI_GUID); UINT32 count = (UINT32)(body.size() / sizeof(EFI_GUID));
if (count > 0) { if (count > 0) {
for (UINT32 i = 0; i < count; i++) { for (UINT32 i = 0; i < count; i++) {
const EFI_GUID* guid = (const EFI_GUID*)body.constData() + i; const EFI_GUID* guid = (const EFI_GUID*)body.constData() + i;
@ -3207,7 +3239,7 @@ USTATUS FfsParser::performSecondPass(const UModelIndex & index)
} }
// Calculate address difference // Calculate address difference
const UINT32 vtfSize = model->header(lastVtf).size() + model->body(lastVtf).size() + model->tail(lastVtf).size(); const UINT32 vtfSize = (const UINT32)(model->header(lastVtf).size() + model->body(lastVtf).size() + model->tail(lastVtf).size());
addressDiff = 0xFFFFFFFFULL - model->base(lastVtf) - vtfSize + 1; addressDiff = 0xFFFFFFFFULL - model->base(lastVtf) - vtfSize + 1;
// Parse reset vector data // Parse reset vector data
@ -3280,7 +3312,7 @@ USTATUS FfsParser::checkTeImageBase(const UModelIndex & index)
if (originalImageBase != 0 || adjustedImageBase != 0) { if (originalImageBase != 0 || adjustedImageBase != 0) {
// Check data memory address to be equal to either OriginalImageBase or AdjustedImageBase // Check data memory address to be equal to either OriginalImageBase or AdjustedImageBase
UINT64 address = addressDiff + model->base(index); UINT64 address = addressDiff + model->base(index);
UINT32 base = (UINT32)address + model->header(index).size(); UINT32 base = (UINT32)(address + model->header(index).size());
if (originalImageBase == base) { if (originalImageBase == base) {
imageBaseType = EFI_IMAGE_TE_BASE_ORIGINAL; imageBaseType = EFI_IMAGE_TE_BASE_ORIGINAL;
@ -3318,7 +3350,11 @@ USTATUS FfsParser::checkTeImageBase(const UModelIndex & index)
// Process child items // Process child items
for (int i = 0; i < model->rowCount(index); i++) { for (int i = 0; i < model->rowCount(index); i++) {
#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5)
checkTeImageBase(index.child(i, 0)); checkTeImageBase(index.child(i, 0));
#else
checkTeImageBase(index.model()->index(i, 0, index));
#endif
} }
return U_SUCCESS; return U_SUCCESS;
@ -3339,7 +3375,7 @@ USTATUS FfsParser::addInfoRecursive(const UModelIndex & index)
// Add physical address of the whole item or it's header and data portions separately // Add physical address of the whole item or it's header and data portions separately
UINT64 address = addressDiff + model->base(index); UINT64 address = addressDiff + model->base(index);
if (address <= 0xFFFFFFFFUL) { if (address <= 0xFFFFFFFFUL) {
UINT32 headerSize = model->header(index).size(); UINT32 headerSize = (UINT32)model->header(index).size();
if (headerSize) { if (headerSize) {
model->addInfo(index, usprintf("Data address: %08Xh\n", address + headerSize),false); model->addInfo(index, usprintf("Data address: %08Xh\n", address + headerSize),false);
model->addInfo(index, usprintf("Header address: %08Xh\n", address), false); model->addInfo(index, usprintf("Header address: %08Xh\n", address), false);
@ -3355,7 +3391,11 @@ USTATUS FfsParser::addInfoRecursive(const UModelIndex & index)
// Process child items // Process child items
for (int i = 0; i < model->rowCount(index); i++) { for (int i = 0; i < model->rowCount(index); i++) {
#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5)
addInfoRecursive(index.child(i, 0)); addInfoRecursive(index.child(i, 0));
#else
addInfoRecursive(index.model()->index(i, 0, index));
#endif
} }
return U_SUCCESS; return U_SUCCESS;
@ -3443,7 +3483,7 @@ USTATUS FfsParser::checkProtectedRanges(const UModelIndex & index)
else else
{ {
bgProtectedRanges[i].Offset = model->base(dxeRootVolumeIndex); bgProtectedRanges[i].Offset = model->base(dxeRootVolumeIndex);
bgProtectedRanges[i].Size = model->header(dxeRootVolumeIndex).size() + model->body(dxeRootVolumeIndex).size() + model->tail(dxeRootVolumeIndex).size(); bgProtectedRanges[i].Size = (UINT32)(model->header(dxeRootVolumeIndex).size() + model->body(dxeRootVolumeIndex).size() + model->tail(dxeRootVolumeIndex).size());
protectedParts = openedImage.mid(bgProtectedRanges[i].Offset, bgProtectedRanges[i].Size); protectedParts = openedImage.mid(bgProtectedRanges[i].Offset, bgProtectedRanges[i].Size);
UByteArray digest(SHA256_DIGEST_SIZE, '\x00'); UByteArray digest(SHA256_DIGEST_SIZE, '\x00');
@ -3534,7 +3574,7 @@ USTATUS FfsParser::markProtectedRangeRecursive(const UModelIndex & index, const
// Mark normal items // Mark normal items
else { else {
UINT32 currentOffset = model->base(index); UINT32 currentOffset = model->base(index);
UINT32 currentSize = model->header(index).size() + model->body(index).size() + model->tail(index).size(); UINT32 currentSize = (UINT32)(model->header(index).size() + model->body(index).size() + model->tail(index).size());
if (std::min(currentOffset + currentSize, range.Offset + range.Size) > std::max(currentOffset, range.Offset)) { if (std::min(currentOffset + currentSize, range.Offset + range.Size) > std::max(currentOffset, range.Offset)) {
if (range.Offset <= currentOffset && currentOffset + currentSize <= range.Offset + range.Size) { // Mark as fully in range if (range.Offset <= currentOffset && currentOffset + currentSize <= range.Offset + range.Size) { // Mark as fully in range
@ -3552,7 +3592,11 @@ USTATUS FfsParser::markProtectedRangeRecursive(const UModelIndex & index, const
} }
for (int i = 0; i < model->rowCount(index); i++) { for (int i = 0; i < model->rowCount(index); i++) {
#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5)
markProtectedRangeRecursive(index.child(i, 0), range); markProtectedRangeRecursive(index.child(i, 0), range);
#else
markProtectedRangeRecursive(index.model()->index(i, 0, index), range);
#endif
} }
return U_SUCCESS; return U_SUCCESS;
@ -3856,7 +3900,12 @@ void FfsParser::findFitRecursive(const UModelIndex & index, UModelIndex & found,
// Process child items // Process child items
for (int i = 0; i < model->rowCount(index); i++) { for (int i = 0; i < model->rowCount(index); i++) {
#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5)
findFitRecursive(index.child(i, 0), found, fitOffset); findFitRecursive(index.child(i, 0), found, fitOffset);
#else
findFitRecursive(index.model()->index(i, 0, index), found, fitOffset);
#endif
if (found.isValid()) if (found.isValid())
return; return;
} }
@ -3864,11 +3913,11 @@ void FfsParser::findFitRecursive(const UModelIndex & index, UModelIndex & found,
// Check for all FIT signatures in item's body // Check for all FIT signatures in item's body
UByteArray lastVtfBody = model->body(lastVtf); UByteArray lastVtfBody = model->body(lastVtf);
UINT32 storedFitAddress = *(const UINT32*)(lastVtfBody.constData() + lastVtfBody.size() - FIT_POINTER_OFFSET); UINT32 storedFitAddress = *(const UINT32*)(lastVtfBody.constData() + lastVtfBody.size() - FIT_POINTER_OFFSET);
for (INT32 offset = model->body(index).indexOf(FIT_SIGNATURE); for (INT32 offset = (INT32)model->body(index).indexOf(FIT_SIGNATURE);
offset >= 0; offset >= 0;
offset = model->body(index).indexOf(FIT_SIGNATURE, offset + 1)) { offset = (INT32)model->body(index).indexOf(FIT_SIGNATURE, offset + 1)) {
// FIT candidate found, calculate it's physical address // FIT candidate found, calculate it's physical address
UINT32 fitAddress = model->base(index) + (UINT32)addressDiff + model->header(index).size() + (UINT32)offset; UINT32 fitAddress = (UINT32)(model->base(index) + (UINT32)addressDiff + model->header(index).size() + (UINT32)offset);
// Check FIT address to be stored in the last VTF // Check FIT address to be stored in the last VTF
if (fitAddress == storedFitAddress) { if (fitAddress == storedFitAddress) {
@ -4062,7 +4111,7 @@ USTATUS FfsParser::parseFitEntryBootGuardKeyManifest(const UByteArray & keyManif
USTATUS FfsParser::findNextBootGuardBootPolicyElement(const UByteArray & bootPolicy, const UINT32 elementOffset, UINT32 & nextElementOffset, UINT32 & nextElementSize) USTATUS FfsParser::findNextBootGuardBootPolicyElement(const UByteArray & bootPolicy, const UINT32 elementOffset, UINT32 & nextElementOffset, UINT32 & nextElementSize)
{ {
UINT32 dataSize = bootPolicy.size(); UINT32 dataSize = (UINT32)bootPolicy.size();
if (dataSize < sizeof(UINT64)) { if (dataSize < sizeof(UINT64)) {
return U_ELEMENTS_NOT_FOUND; return U_ELEMENTS_NOT_FOUND;
} }

View file

@ -49,7 +49,7 @@ USTATUS FfsReport::generateRecursive(std::vector<UString> & report, const UModel
// Calculate item CRC32 // Calculate item CRC32
UByteArray data = model->header(index) + model->body(index) + model->tail(index); UByteArray data = model->header(index) + model->body(index) + model->tail(index);
UINT32 crc = (UINT32)crc32(0, (const UINT8*)data.constData(), data.size()); UINT32 crc = (UINT32)crc32(0, (const UINT8*)data.constData(), (uInt)data.size());
// Information on current item // Information on current item
UString text = model->text(index); UString text = model->text(index);
@ -68,7 +68,11 @@ USTATUS FfsReport::generateRecursive(std::vector<UString> & report, const UModel
// Information on child items // Information on child items
for (int i = 0; i < model->rowCount(index); i++) { for (int i = 0; i < model->rowCount(index); i++) {
#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5)
generateRecursive(report, index.child(i,0), level + 1); generateRecursive(report, index.child(i,0), level + 1);
#else
generateRecursive(report, index.model()->index(i,0,index), level + 1);
#endif
} }
return U_SUCCESS; return U_SUCCESS;

View file

@ -40,7 +40,12 @@ USTATUS findFileRecursive(TreeModel *model, const UModelIndex index, const UStri
bool hasChildren = (model->rowCount(index) > 0); bool hasChildren = (model->rowCount(index) > 0);
for (int i = 0; i < model->rowCount(index); i++) { for (int i = 0; i < model->rowCount(index); i++) {
#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5)
findFileRecursive(model, index.child(i, index.column()), hexPattern, mode, files); findFileRecursive(model, index.child(i, index.column()), hexPattern, mode, files);
#else
findFileRecursive(model, index.model()->index(i, index.column(), index), hexPattern, mode, files);
#endif
} }
UByteArray data; UByteArray data;

View file

@ -116,7 +116,12 @@ GuidDatabase guidDatabaseFromTreeRecursive(TreeModel * model, const UModelIndex
return db; return db;
for (int i = 0; i < model->rowCount(index); i++) { for (int i = 0; i < model->rowCount(index); i++) {
#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5)
GuidDatabase tmpDb = guidDatabaseFromTreeRecursive(model, index.child(i, index.column())); GuidDatabase tmpDb = guidDatabaseFromTreeRecursive(model, index.child(i, index.column()));
#else
GuidDatabase tmpDb = guidDatabaseFromTreeRecursive(model, index.model()->index(i, index.column(), index));
#endif
db.insert(tmpDb.begin(), tmpDb.end()); db.insert(tmpDb.begin(), tmpDb.end());
} }

View file

@ -165,7 +165,7 @@ USTATUS MeParser::parseFptRegion(const UByteArray & region, const UModelIndex &
// Add partition table entries // Add partition table entries
std::vector<FPT_PARTITION_INFO> partitions; std::vector<FPT_PARTITION_INFO> partitions;
UINT32 offset = header.size(); UINT32 offset = (UINT32)header.size();
const FPT_HEADER_ENTRY* firstPtEntry = (const FPT_HEADER_ENTRY*)(region.constData() + offset); const FPT_HEADER_ENTRY* firstPtEntry = (const FPT_HEADER_ENTRY*)(region.constData() + offset);
for (UINT8 i = 0; i < ptHeader->NumEntries; i++) { for (UINT8 i = 0; i < ptHeader->NumEntries; i++) {
// Populate entry header // Populate entry header
@ -265,7 +265,7 @@ make_partition_table_consistent:
// Check for padding after the last region // Check for padding after the last region
if ((UINT32)partitions.back().ptEntry.Offset + (UINT32)partitions.back().ptEntry.Size < (UINT32)region.size()) { if ((UINT32)partitions.back().ptEntry.Offset + (UINT32)partitions.back().ptEntry.Size < (UINT32)region.size()) {
padding.ptEntry.Offset = partitions.back().ptEntry.Offset + partitions.back().ptEntry.Size; padding.ptEntry.Offset = partitions.back().ptEntry.Offset + partitions.back().ptEntry.Size;
padding.ptEntry.Size = region.size() - padding.ptEntry.Offset; padding.ptEntry.Size = (UINT32)(region.size() - padding.ptEntry.Offset);
padding.type = Types::Padding; padding.type = Types::Padding;
partitions.push_back(padding); partitions.push_back(padding);
} }
@ -422,7 +422,7 @@ make_partition_table_consistent:
// Check for padding after the last region // Check for padding after the last region
if ((UINT32)partitions.back().ptEntry.Offset + (UINT32)partitions.back().ptEntry.Size < (UINT32)region.size()) { if ((UINT32)partitions.back().ptEntry.Offset + (UINT32)partitions.back().ptEntry.Size < (UINT32)region.size()) {
padding.ptEntry.Offset = partitions.back().ptEntry.Offset + partitions.back().ptEntry.Size; padding.ptEntry.Offset = partitions.back().ptEntry.Offset + partitions.back().ptEntry.Size;
padding.ptEntry.Size = region.size() - padding.ptEntry.Offset; padding.ptEntry.Size = (UINT32)(region.size() - padding.ptEntry.Offset);
padding.type = Types::Padding; padding.type = Types::Padding;
partitions.push_back(padding); partitions.push_back(padding);
} }
@ -604,7 +604,7 @@ make_partition_table_consistent:
// Check for padding after the last region // Check for padding after the last region
if ((UINT32)partitions.back().ptEntry.Offset + (UINT32)partitions.back().ptEntry.Size < (UINT32)region.size()) { if ((UINT32)partitions.back().ptEntry.Offset + (UINT32)partitions.back().ptEntry.Size < (UINT32)region.size()) {
padding.ptEntry.Offset = partitions.back().ptEntry.Offset + partitions.back().ptEntry.Size; padding.ptEntry.Offset = partitions.back().ptEntry.Offset + partitions.back().ptEntry.Size;
padding.ptEntry.Size = region.size() - padding.ptEntry.Offset; padding.ptEntry.Size = (UINT32)(region.size() - padding.ptEntry.Offset);
padding.type = Types::Padding; padding.type = Types::Padding;
partitions.push_back(padding); partitions.push_back(padding);
} }

View file

@ -45,7 +45,7 @@ USTATUS NvramParser::parseNvarStore(const UModelIndex & index)
} }
// Get local offset // Get local offset
UINT32 localOffset = model->header(index).size(); UINT32 localOffset = (UINT32)model->header(index).size();
// Get item data // Get item data
const UByteArray data = model->body(index); const UByteArray data = model->body(index);
@ -121,7 +121,7 @@ USTATUS NvramParser::parseNvarStore(const UModelIndex & index)
guidArea.size(), guidArea.size(), guidArea.size(), guidArea.size(),
guidsInStore); guidsInStore);
// Add tree item // Add tree item
model->addItem(localOffset + offset + padding.size(), Types::Padding, getPaddingType(guidArea), name, UString(), info, UByteArray(), guidArea, UByteArray(), Fixed, index); model->addItem((UINT32)(localOffset + offset + padding.size()), Types::Padding, getPaddingType(guidArea), name, UString(), info, UByteArray(), guidArea, UByteArray(), Fixed, index);
return U_SUCCESS; return U_SUCCESS;
} }
@ -230,7 +230,12 @@ USTATUS NvramParser::parseNvarStore(const UModelIndex & index)
// Search previously added entries for a link to this variable // Search previously added entries for a link to this variable
// WARNING: O(n^2), may be very slow // WARNING: O(n^2), may be very slow
for (int i = model->rowCount(index) - 1; i >= 0; i--) { for (int i = model->rowCount(index) - 1; i >= 0; i--) {
#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5)
nvarIndex = index.child(i, 0); nvarIndex = index.child(i, 0);
#else
nvarIndex = index.model()->index(i, 0, index);
#endif
if (model->hasEmptyParsingData(nvarIndex) == false) { if (model->hasEmptyParsingData(nvarIndex) == false) {
UByteArray nvarData = model->parsingData(nvarIndex); UByteArray nvarData = model->parsingData(nvarIndex);
const NVAR_ENTRY_PARSING_DATA nvarPdata = readUnaligned((const NVAR_ENTRY_PARSING_DATA*)nvarData.constData()); const NVAR_ENTRY_PARSING_DATA nvarPdata = readUnaligned((const NVAR_ENTRY_PARSING_DATA*)nvarData.constData());
@ -261,11 +266,16 @@ USTATUS NvramParser::parseNvarStore(const UModelIndex & index)
UINT32 nameSize = 0; UINT32 nameSize = 0;
if (entryHeader->Attributes & NVRAM_NVAR_ENTRY_ASCII_NAME) { // Name is stored as ASCII string of CHAR8s if (entryHeader->Attributes & NVRAM_NVAR_ENTRY_ASCII_NAME) { // Name is stored as ASCII string of CHAR8s
text = UString(namePtr); text = UString(namePtr);
nameSize = text.length() + 1; nameSize = (UINT32)(text.length() + 1);
} }
else { // Name is stored as UCS2 string of CHAR16s else { // Name is stored as UCS2 string of CHAR16s
#if QT_VERSION_MAJOR >= 6
text = UString::fromUtf16((char16_t*)namePtr);
#else
text = UString::fromUtf16((CHAR16*)namePtr); text = UString::fromUtf16((CHAR16*)namePtr);
nameSize = (text.length() + 1) * 2; #endif
nameSize = (UINT32)((text.length() + 1) * 2);
} }
// Get entry GUID // Get entry GUID
@ -388,7 +398,7 @@ USTATUS NvramParser::parseNvramVolumeBody(const UModelIndex & index)
} }
// Get local offset // Get local offset
UINT32 localOffset = model->header(index).size(); UINT32 localOffset = (UINT32)model->header(index).size();
// Get item data // Get item data
UByteArray data = model->body(index); UByteArray data = model->body(index);
@ -455,7 +465,7 @@ USTATUS NvramParser::parseNvramVolumeBody(const UModelIndex & index)
// Update variables // Update variables
prevStoreOffset = storeOffset; prevStoreOffset = storeOffset;
prevStoreSize = padding.size(); prevStoreSize = (UINT32)padding.size();
break; break;
} }
@ -497,7 +507,12 @@ USTATUS NvramParser::parseNvramVolumeBody(const UModelIndex & index)
// Parse bodies // Parse bodies
for (int i = 0; i < model->rowCount(index); i++) { for (int i = 0; i < model->rowCount(index); i++) {
#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5)
UModelIndex current = index.child(i, 0); UModelIndex current = index.child(i, 0);
#else
UModelIndex current = index.model()->index(i, 0, index);
#endif
switch (model->type(current)) { switch (model->type(current)) {
case Types::FdcStore: case Types::FdcStore:
parseFdcStoreBody(current); parseFdcStoreBody(current);
@ -528,7 +543,7 @@ USTATUS NvramParser::parseNvramVolumeBody(const UModelIndex & index)
USTATUS NvramParser::findNextStore(const UModelIndex & index, const UByteArray & volume, const UINT32 localOffset, const UINT32 storeOffset, UINT32 & nextStoreOffset) USTATUS NvramParser::findNextStore(const UModelIndex & index, const UByteArray & volume, const UINT32 localOffset, const UINT32 storeOffset, UINT32 & nextStoreOffset)
{ {
UINT32 dataSize = volume.size(); UINT32 dataSize = (UINT32)volume.size();
if (dataSize < sizeof(UINT32)) if (dataSize < sizeof(UINT32))
return U_STORES_NOT_FOUND; return U_STORES_NOT_FOUND;
@ -1286,7 +1301,7 @@ USTATUS NvramParser::parseFdcStoreBody(const UModelIndex & index)
const UByteArray data = model->body(index); const UByteArray data = model->body(index);
// Get local offset // Get local offset
UINT32 localOffset = model->header(index).size(); UINT32 localOffset = (UINT32)model->header(index).size();
// The body is a firmware volume with either a VSS or VSS2 store // The body is a firmware volume with either a VSS or VSS2 store
UModelIndex volumeIndex; UModelIndex volumeIndex;
@ -1300,14 +1315,14 @@ USTATUS NvramParser::parseFdcStoreBody(const UModelIndex & index)
UByteArray store = model->body(volumeIndex); UByteArray store = model->body(volumeIndex);
if ((UINT32)store.size() >= sizeof(UINT32) && *(const UINT32*)store.constData() == NVRAM_VSS_STORE_SIGNATURE) { if ((UINT32)store.size() >= sizeof(UINT32) && *(const UINT32*)store.constData() == NVRAM_VSS_STORE_SIGNATURE) {
UModelIndex vssIndex; UModelIndex vssIndex;
status = parseVssStoreHeader(store, localOffset + model->header(volumeIndex).size(), true, volumeIndex, vssIndex); status = parseVssStoreHeader(store, (UINT32)(localOffset + model->header(volumeIndex).size()), true, volumeIndex, vssIndex);
if (status) if (status)
return status; return status;
return parseVssStoreBody(vssIndex, 0); return parseVssStoreBody(vssIndex, 0);
} }
else if ((UINT32)store.size() >= sizeof(EFI_GUID) && store.left(sizeof(EFI_GUID)) == NVRAM_FDC_STORE_GUID) { else if ((UINT32)store.size() >= sizeof(EFI_GUID) && store.left(sizeof(EFI_GUID)) == NVRAM_FDC_STORE_GUID) {
UModelIndex vss2Index; UModelIndex vss2Index;
status = parseVss2StoreHeader(store, localOffset + model->header(volumeIndex).size(), true, volumeIndex, vss2Index); status = parseVss2StoreHeader(store, (UINT32)(localOffset + model->header(volumeIndex).size()), true, volumeIndex, vss2Index);
if (status) if (status)
return status; return status;
return parseVssStoreBody(vss2Index, 0); return parseVssStoreBody(vss2Index, 0);
@ -1335,7 +1350,7 @@ USTATUS NvramParser::parseVssStoreBody(const UModelIndex & index, UINT8 alignmen
} }
// Get local offset // Get local offset
UINT32 localOffset = model->header(index).size(); UINT32 localOffset = (UINT32)model->header(index).size();
// Get item data // Get item data
const UByteArray data = model->body(index); const UByteArray data = model->body(index);
@ -1396,7 +1411,7 @@ USTATUS NvramParser::parseVssStoreBody(const UModelIndex & index, UINT8 alignmen
// Calculate CRC32 of the variable data // Calculate CRC32 of the variable data
storedCrc32 = appleVariableHeader->DataCrc32; storedCrc32 = appleVariableHeader->DataCrc32;
calculatedCrc32 = (UINT32)crc32(0, (const UINT8*)body.constData(), body.size()); calculatedCrc32 = (UINT32)crc32(0, (const UINT8*)body.constData(), (uInt)body.size());
} }
} }
@ -1501,7 +1516,12 @@ USTATUS NvramParser::parseVssStoreBody(const UModelIndex & index, UINT8 alignmen
else { // Add GUID and text for valid variables else { // Add GUID and text for valid variables
name = guidToUString(readUnaligned(variableGuid)); name = guidToUString(readUnaligned(variableGuid));
info += UString("Variable GUID: ") + guidToUString(readUnaligned(variableGuid), false) + UString("\n"); info += UString("Variable GUID: ") + guidToUString(readUnaligned(variableGuid), false) + UString("\n");
#if QT_VERSION_MAJOR >= 6
text = UString::fromUtf16((char16_t *)variableName);
#else
text = UString::fromUtf16(variableName); text = UString::fromUtf16(variableName);
#endif
} }
// Add info // Add info
@ -1555,7 +1575,7 @@ USTATUS NvramParser::parseFsysStoreBody(const UModelIndex & index)
return U_INVALID_PARAMETER; return U_INVALID_PARAMETER;
// Get local offset // Get local offset
UINT32 localOffset = model->header(index).size(); UINT32 localOffset = (UINT32)model->header(index).size();
// Get item data // Get item data
const UByteArray data = model->body(index); const UByteArray data = model->body(index);
@ -1658,7 +1678,7 @@ USTATUS NvramParser::parseEvsaStoreBody(const UModelIndex & index)
} }
// Get local offset // Get local offset
UINT32 localOffset = model->header(index).size(); UINT32 localOffset = (UINT32)model->header(index).size();
// Get item data // Get item data
const UByteArray data = model->body(index); const UByteArray data = model->body(index);
@ -1732,7 +1752,13 @@ USTATUS NvramParser::parseEvsaStoreBody(const UModelIndex & index)
const EVSA_NAME_ENTRY* nameHeader = (const EVSA_NAME_ENTRY*)entryHeader; const EVSA_NAME_ENTRY* nameHeader = (const EVSA_NAME_ENTRY*)entryHeader;
header = data.mid(offset, sizeof(EVSA_NAME_ENTRY)); header = data.mid(offset, sizeof(EVSA_NAME_ENTRY));
body = data.mid(offset + sizeof(EVSA_NAME_ENTRY), nameHeader->Header.Size - sizeof(EVSA_NAME_ENTRY)); body = data.mid(offset + sizeof(EVSA_NAME_ENTRY), nameHeader->Header.Size - sizeof(EVSA_NAME_ENTRY));
#if QT_VERSION_MAJOR >= 6
name = UString::fromUtf16((const char16_t *)body.constData());
#else
name = UString::fromUtf16((const CHAR16*)body.constData()); name = UString::fromUtf16((const CHAR16*)body.constData());
#endif
info = UString("Name: ") + name + usprintf("\nFull size: %Xh (%u)\nHeader size %Xh (%u)\nBody size: %Xh (%u)\nType: %02Xh\nChecksum: %02Xh", info = UString("Name: ") + name + usprintf("\nFull size: %Xh (%u)\nHeader size %Xh (%u)\nBody size: %Xh (%u)\nType: %02Xh\nChecksum: %02Xh",
variableSize, variableSize, variableSize, variableSize,
header.size(), header.size(), header.size(), header.size(),
@ -1805,7 +1831,12 @@ USTATUS NvramParser::parseEvsaStoreBody(const UModelIndex & index)
// Reparse all data variables to detect invalid ones and assign name and test to valid ones // Reparse all data variables to detect invalid ones and assign name and test to valid ones
for (int i = 0; i < model->rowCount(index); i++) { for (int i = 0; i < model->rowCount(index); i++) {
#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5)
UModelIndex current = index.child(i, 0); UModelIndex current = index.child(i, 0);
#else
UModelIndex current = index.model()->index(i, 0, index);
#endif
if (model->subtype(current) == Subtypes::DataEvsaEntry) { if (model->subtype(current) == Subtypes::DataEvsaEntry) {
UByteArray header = model->header(current); UByteArray header = model->header(current);
const EVSA_DATA_ENTRY* dataHeader = (const EVSA_DATA_ENTRY*)header.constData(); const EVSA_DATA_ENTRY* dataHeader = (const EVSA_DATA_ENTRY*)header.constData();
@ -1857,7 +1888,7 @@ USTATUS NvramParser::parseFlashMapBody(const UModelIndex & index)
return U_INVALID_PARAMETER; return U_INVALID_PARAMETER;
// Get parsing data for the current item // Get parsing data for the current item
UINT32 localOffset = model->header(index).size(); UINT32 localOffset = (UINT32)model->header(index).size();
const UByteArray data = model->body(index); const UByteArray data = model->body(index);

View file

@ -109,8 +109,8 @@ static void sha256_compress(struct sha256_state *md, unsigned char *buf)
} }
/* Compress */ /* Compress */
#define RND(a,b,c,d,e,f,g,h,i) \ #define RND(a,b,c,d,e,f,g,h,i) \
t0 = h + Sigma1(e) + Ch(e, f, g) + K[i] + W[i]; \ t0 = (uint32_t)(h + Sigma1(e) + Ch(e, f, g) + K[i] + W[i]); \
t1 = Sigma0(a) + Maj(a, b, c); \ t1 = (uint32_t)(Sigma0(a) + Maj(a, b, c)); \
d += t0; \ d += t0; \
h = t0 + t1; h = t0 + t1;
for (i = 0; i < 64; ++i) { for (i = 0; i < 64; ++i) {

View file

@ -43,7 +43,7 @@ QVariant TreeModel::data(const UModelIndex &index, int role) const
Qt::ItemFlags TreeModel::flags(const UModelIndex &index) const Qt::ItemFlags TreeModel::flags(const UModelIndex &index) const
{ {
if (!index.isValid()) if (!index.isValid())
return 0; return Qt::NoItemFlags;
return Qt::ItemIsEnabled | Qt::ItemIsSelectable; return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
} }
@ -559,9 +559,14 @@ UModelIndex TreeModel::findByBase(UINT32 base) const
goDeeper: goDeeper:
int n = rowCount(parentIndex); int n = rowCount(parentIndex);
for (int i = 0; i < n; i++) { for (int i = 0; i < n; i++) {
#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5)
UModelIndex currentIndex = parentIndex.child(i, 0); UModelIndex currentIndex = parentIndex.child(i, 0);
#else
UModelIndex currentIndex = parentIndex.model()->index(i, 0, parentIndex);
#endif
UINT32 currentBase = this->base(currentIndex); UINT32 currentBase = this->base(currentIndex);
UINT32 fullSize = header(currentIndex).size() + body(currentIndex).size() + tail(currentIndex).size(); UINT32 fullSize = (UINT32)(header(currentIndex).size() + body(currentIndex).size() + tail(currentIndex).size());
if ((compressed(currentIndex) == false || (compressed(currentIndex) == true && compressed(currentIndex.parent()) == false)) // Base is meaningful only for true uncompressed items if ((compressed(currentIndex) == false || (compressed(currentIndex) == true && compressed(currentIndex.parent()) == false)) // Base is meaningful only for true uncompressed items
&& currentBase <= base && base < currentBase + fullSize) { // Base must be in range [currentBase, currentBase + fullSize) && currentBase <= base && base < currentBase + fullSize) { // Base must be in range [currentBase, currentBase + fullSize)
// Found a better candidate // Found a better candidate

View file

@ -86,7 +86,6 @@ private:
#if defined(QT_CORE_LIB) #if defined(QT_CORE_LIB)
class TreeModel : public QAbstractItemModel class TreeModel : public QAbstractItemModel
{ {
Q_OBJECT
private: private:
TreeItem *rootItem; TreeItem *rootItem;
bool markingEnabledFlag; bool markingEnabledFlag;

View file

@ -45,14 +45,14 @@ public:
UByteArray toUpper() { std::basic_string<char> s = d; std::transform(s.begin(), s.end(), s.begin(), ::toupper); return UByteArray(s); } UByteArray toUpper() { std::basic_string<char> s = d; std::transform(s.begin(), s.end(), s.begin(), ::toupper); return UByteArray(s); }
uint32_t toUInt(bool* ok = NULL, const uint8_t base = 10) { return (uint32_t)strtoul(d.c_str(), NULL, base); } uint32_t toUInt(bool* ok = NULL, const uint8_t base = 10) { return (uint32_t)strtoul(d.c_str(), NULL, base); }
int32_t size() const { return d.size(); } int32_t size() const { return (int32_t)d.size(); }
int32_t count(char ch) const { return std::count(d.begin(), d.end(), ch); } int32_t count(char ch) const { return (int32_t)std::count(d.begin(), d.end(), ch); }
char at(uint32_t i) const { return d.at(i); } char at(uint32_t i) const { return d.at(i); }
char operator[](uint32_t i) const { return d[i]; } char operator[](uint32_t i) const { return d[i]; }
char& operator[](uint32_t i) { return d[i]; } char& operator[](uint32_t i) { return d[i]; }
bool startsWith(const UByteArray & ba) const { return 0 == d.find(ba.d, 0); } bool startsWith(const UByteArray & ba) const { return 0 == d.find(ba.d, 0); }
int indexOf(const UByteArray & ba, int from = 0) const { return d.find(ba.d, from); } int indexOf(const UByteArray & ba, int from = 0) const { return (int)d.find(ba.d, from); }
int lastIndexOf(const UByteArray & ba, int from = 0) const { int lastIndexOf(const UByteArray & ba, int from = 0) const {
size_t old_index = d.npos; size_t old_index = d.npos;
size_t index = d.find(ba.d, from); size_t index = d.find(ba.d, from);
@ -60,7 +60,7 @@ public:
old_index = index; old_index = index;
index = d.find(ba.d, index + 1); index = d.find(ba.d, index + 1);
} }
return old_index; return (int)old_index;
} }
UByteArray left(int32_t len) const { return d.substr(0, len); } UByteArray left(int32_t len) const { return d.substr(0, len); }

View file

@ -19,7 +19,13 @@ UString usprintf(const char* fmt, ...)
UString msg; UString msg;
va_list vl; va_list vl;
va_start(vl, fmt); va_start(vl, fmt);
#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5)
msg.vsprintf(fmt, vl); msg.vsprintf(fmt, vl);
#else
msg = msg.vasprintf(fmt, vl);
#endif
va_end(vl); va_end(vl);
return msg; return msg;
}; };

View file

@ -102,7 +102,7 @@ UString uniqueItemName(const UModelIndex & index)
'<', '>', ':', '\"', '\\', '|', '?', '*', // Banned in Windows '<', '>', ':', '\"', '\\', '|', '?', '*', // Banned in Windows
' ' // Provides better readability ' ' // Provides better readability
}; };
int nameLength = name.length(); // Note: Qt uses int for whatever reason. int nameLength = (int)name.length(); // Note: Qt uses int for whatever reason.
for (int i = 0; i < nameLength; i++) { for (int i = 0; i < nameLength; i++) {
for (size_t j = 0; j < sizeof(table); j++) { for (size_t j = 0; j < sizeof(table); j++) {
if (name[i] == table[j]) { if (name[i] == table[j]) {
@ -200,7 +200,7 @@ USTATUS decompress(const UByteArray & compressedData, const UINT8 compressionTyp
// Get buffer sizes // Get buffer sizes
data = (UINT8*)compressedData.data(); data = (UINT8*)compressedData.data();
dataSize = compressedData.size(); dataSize = (UINT32)compressedData.size();
// Check header to be valid // Check header to be valid
header = (const EFI_TIANO_HEADER*)data; header = (const EFI_TIANO_HEADER*)data;
@ -260,7 +260,7 @@ USTATUS decompress(const UByteArray & compressedData, const UINT8 compressionTyp
// Get buffer sizes // Get buffer sizes
data = (const UINT8*)compressedData.constData(); data = (const UINT8*)compressedData.constData();
dataSize = compressedData.size(); dataSize = (UINT32)compressedData.size();
// Get info as normal LZMA section // Get info as normal LZMA section
if (U_SUCCESS != LzmaGetInfo(data, dataSize, &decompressedSize)) { if (U_SUCCESS != LzmaGetInfo(data, dataSize, &decompressedSize)) {
@ -305,7 +305,7 @@ USTATUS decompress(const UByteArray & compressedData, const UINT8 compressionTyp
// Get buffer sizes // Get buffer sizes
data = (const UINT8*)compressedData.constData(); data = (const UINT8*)compressedData.constData();
dataSize = compressedData.size(); dataSize = (UINT32)compressedData.size();
// Get info as normal LZMA section // Get info as normal LZMA section
if (U_SUCCESS != LzmaGetInfo(data, dataSize, &decompressedSize)) { if (U_SUCCESS != LzmaGetInfo(data, dataSize, &decompressedSize)) {
@ -498,7 +498,7 @@ USTATUS gzipDecompress(const UByteArray & input, UByteArray & output)
z_stream stream; z_stream stream;
stream.next_in = (z_const Bytef *)input.data(); stream.next_in = (z_const Bytef *)input.data();
stream.avail_in = input.size(); stream.avail_in = (uInt)input.size();
stream.zalloc = Z_NULL; stream.zalloc = Z_NULL;
stream.zfree = Z_NULL; stream.zfree = Z_NULL;
stream.opaque = Z_NULL; stream.opaque = Z_NULL;

View file

@ -14,6 +14,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#ifndef VERSION_H #ifndef VERSION_H
#define VERSION_H #define VERSION_H
#define PROGRAM_VERSION "NE alpha 58" " (" __DATE__ ")" #define PROGRAM_VERSION "NE alpha 59" " (" __DATE__ ")"
#endif // VERSION_H #endif // VERSION_H