From 9cc42a33e4e08ab88b517321102c2f832c1202c8 Mon Sep 17 00:00:00 2001 From: Mehmet Samet Duman Date: Mon, 30 Mar 2026 20:28:43 +0300 Subject: NOISSUE changed dependency quazip to libarchive This patch focused on the changed dependency quazip to libarchive and updated Blocked Mods on curseforge to added new dialog to blocked mods downloaded on web browser and fixed many minimal issues Signed-off-by: Mehmet Samet Duman --- libraries/classparser/src/classparser.cpp | 53 +++++++++++++++++++------------ 1 file changed, 33 insertions(+), 20 deletions(-) (limited to 'libraries/classparser/src/classparser.cpp') diff --git a/libraries/classparser/src/classparser.cpp b/libraries/classparser/src/classparser.cpp index fdfcfef9b1..4c7f0fe482 100644 --- a/libraries/classparser/src/classparser.cpp +++ b/libraries/classparser/src/classparser.cpp @@ -39,7 +39,8 @@ #include "classparser.h" #include -#include +#include +#include #include namespace classparser @@ -54,26 +55,44 @@ QString GetMinecraftJarVersion(QString jarName) if (!jar.exists()) return version; - // open minecraft.jar - QuaZip zip(&jar); - if (!zip.open(QuaZip::mdUnzip)) + // open jar with libarchive + struct archive *a = archive_read_new(); + archive_read_support_format_zip(a); + if (archive_read_open_filename(a, jarName.toUtf8().constData(), 10240) != ARCHIVE_OK) { + archive_read_free(a); return version; + } - // open Minecraft.class - zip.setCurrentFile("net/minecraft/client/Minecraft.class", QuaZip::csSensitive); - QuaZipFile Minecraft(&zip); - if (!Minecraft.open(QuaZipFile::ReadOnly)) - return version; + // find and read Minecraft.class + QByteArray classData; + struct archive_entry *entry; + while (archive_read_next_header(a, &entry) == ARCHIVE_OK) { + QString name = QString::fromUtf8(archive_entry_pathname(entry)); + if (name == "net/minecraft/client/Minecraft.class") { + la_int64_t sz = archive_entry_size(entry); + if (sz > 0) { + classData.resize(sz); + archive_read_data(a, classData.data(), sz); + } else { + char buf[8192]; + la_ssize_t r; + while ((r = archive_read_data(a, buf, sizeof(buf))) > 0) + classData.append(buf, r); + } + break; + } + archive_read_data_skip(a); + } + archive_read_free(a); - // read Minecraft.class - qint64 size = Minecraft.size(); - char *classfile = new char[size]; - Minecraft.read(classfile, size); + if (classData.isEmpty()) + return version; // parse Minecraft.class try { - char *temp = classfile; + char *temp = classData.data(); + qint64 size = classData.size(); java::classfile MinecraftClass(temp, size); java::constant_pool constants = MinecraftClass.constants; for (java::constant_pool::container_type::const_iterator iter = constants.begin(); @@ -93,12 +112,6 @@ QString GetMinecraftJarVersion(QString jarName) } catch (const java::classfile_exception &) { } - // clean up - delete[] classfile; - Minecraft.close(); - zip.close(); - jar.close(); - return version; } } -- cgit 0.0.5-2-1-g0f52