Created
March 22, 2020 06:29
-
-
Save HamedMasafi/ff7e0d46dd92de19d0c2993af3549806 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
QByteArray Firefox::parseJsonlz4RecoveryFilePath(const QString &recoveryFilePath) | |
{ | |
const char mozlz4_magic[] = {109, 111, 122, 76, 122, 52, 48, 0}; /* "mozLz40\0" */ | |
const int decomp_size = 4; /* 4 bytes size come after the header */ | |
const size_t magic_size = sizeof mozlz4_magic; | |
char *encryptedData = nullptr; | |
char *decryptedData = nullptr; | |
int readSize = 0; | |
size_t outputBufferSize = 0; | |
QFile f(recoveryFilePath); | |
f.open(QIODevice::ReadOnly); | |
QByteArray encryptedByteData = f.readAll(); | |
f.close(); | |
if (!encryptedByteData.isEmpty()) { | |
encryptedData = encryptedByteData.data(); | |
readSize = encryptedByteData.size(); | |
} else { | |
qDebug() << "[FirefoxUtils::parseJsonlz4RecoveryFilePath] Empty file"; | |
return QByteArray(); | |
} | |
if (readSize < magic_size + decomp_size || memcmp(mozlz4_magic, encryptedData, magic_size) != 0) { | |
qDebug() << "[FirefoxUtils::parseJsonlz4RecoveryFilePath] Unsupported file format: " + recoveryFilePath; | |
return QByteArray(); | |
} | |
size_t i = 0; | |
for (i = magic_size; i < magic_size + decomp_size; i++) { | |
outputBufferSize += (unsigned char) encryptedData[i] << (8 * (i - magic_size)); | |
} | |
if (!(decryptedData = (char *) malloc(outputBufferSize))) { | |
qDebug() << "[FirefoxUtils::parseJsonlz4RecoveryFilePath] Failed to allocate a buffer for an output."; | |
return QByteArray(); | |
} | |
int decryptedDataSize = LZ4_decompress_safe(encryptedData + i, decryptedData, (int) (readSize - i), (int) outputBufferSize); | |
if (decryptedDataSize < 0) { | |
qDebug() << "[FirefoxUtils::parseJsonlz4RecoveryFilePath] Failed to decompress a file: " + recoveryFilePath; | |
free(decryptedData); | |
return QByteArray(); | |
} | |
QByteArray qDecryptedData = QByteArray(decryptedData); | |
free(decryptedData); | |
int indexOfLastProperChar = qDecryptedData.lastIndexOf(QLatin1String("}")); | |
QByteArray cutData = qDecryptedData.left(indexOfLastProperChar + 1); | |
// qDebug() << "[FirefoxUtils::parseJsonlz4RecoveryFilePath] Successfully decompressed a file: " + recoveryFilePath; | |
// // Debug: write to a D:/fx.json file | |
// QString filename = "/home/karol/Documents/fx.json"; | |
// QFile file(filename); | |
// if (file.open(QIODevice::ReadWrite)) { | |
// QTextStream stream(&file); | |
// stream << cutData; | |
// } | |
return cutData; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
HEADERS += \ | |
$$PWD/lz4/lib/lz4.h | |
SOURCES += \ | |
$$PWD/lz4/lib/lz4.c |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment