From b74ac1cf19b85358b412f1e9b24c15fe90f40377 Mon Sep 17 00:00:00 2001 From: Visual Ehrmanntraut <30368284+VisualEhrmanntraut@users.noreply.github.com> Date: Tue, 13 Aug 2024 00:50:13 +0300 Subject: [PATCH] Actually fix analysis lint --- NootedRed/HWLibs.hpp | 3 ++- NootedRed/NRed.cpp | 31 +++++++++++++++++-------------- NootedRed/NRed.hpp | 2 +- NootedRed/X5000.hpp | 3 ++- NootedRed/X6000.hpp | 3 ++- NootedRed/X6000FB.hpp | 3 ++- 6 files changed, 26 insertions(+), 19 deletions(-) diff --git a/NootedRed/HWLibs.hpp b/NootedRed/HWLibs.hpp index ee2e5835..ed4aaa8c 100644 --- a/NootedRed/HWLibs.hpp +++ b/NootedRed/HWLibs.hpp @@ -10,8 +10,9 @@ using t_createFirmware = void *(*)(const void *data, UInt32 size, UInt32 ipVersi using t_putFirmware = bool (*)(void *that, UInt32 deviceType, void *fw); class X5000HWLibs { - public: static X5000HWLibs *callback; + + public: void init(); bool processKext(KernelPatcher &patcher, size_t id, mach_vm_address_t slide, size_t size); diff --git a/NootedRed/NRed.cpp b/NootedRed/NRed.cpp index a9359eaf..9f0787f8 100644 --- a/NootedRed/NRed.cpp +++ b/NootedRed/NRed.cpp @@ -144,7 +144,7 @@ void NRed::processPatcher(KernelPatcher &patcher) { x6000fb.registerDispMaxBrightnessNotif(); } -static OSObject *getDriverXMLForBundle(const char *bundleIdentifier) { +static const char *getDriverXMLForBundle(const char *bundleIdentifier, size_t *len) { const auto identifierLen = strlen(bundleIdentifier); const auto totalLen = identifierLen + 5; auto *filename = new char[totalLen]; @@ -152,20 +152,14 @@ static OSObject *getDriverXMLForBundle(const char *bundleIdentifier) { strlcat(filename, ".xml", totalLen); const auto &driversXML = getFWByName(filename); + delete[] filename; - auto *dataNull = new char[driversXML.length + 1]; + *len = driversXML.length + 1; + auto *dataNull = new char[*len]; memcpy(dataNull, driversXML.data, driversXML.length); dataNull[driversXML.length] = 0; - OSString *errStr = nullptr; - auto *dataUnserialized = OSUnserializeXML(dataNull, driversXML.length + 1, &errStr); - delete[] dataNull; - - PANIC_COND(dataUnserialized == nullptr, "NRed", "Failed to unserialize %s: %s", filename, - errStr ? errStr->getCStringNoCopy() : "(nil)"); - - delete[] filename; - return dataUnserialized; + return dataNull; } static const char *DriverBundleIdentifiers[] = { @@ -209,13 +203,22 @@ bool NRed::wrapAddDrivers(void *that, OSArray *array, bool doNubMatching) { if (!matches[i]) { continue; } auto *identifier = DriverBundleIdentifiers[i]; DBGLOG("NRed", "Injecting personalities for %s.", identifier); - auto *driversObj = getDriverXMLForBundle(identifier); - auto *drivers = OSDynamicCast(OSArray, driversObj); + size_t len; + auto *driverXML = getDriverXMLForBundle(identifier, &len); + + OSString *errStr = nullptr; + auto *dataUnserialized = OSUnserializeXML(driverXML, len, &errStr); + delete[] driverXML; + + PANIC_COND(!dataUnserialized, "NRed", "Failed to unserialize driver XML for %s: %s", identifier, + errStr ? errStr->getCStringNoCopy() : "(nil)"); + + auto *drivers = OSDynamicCast(OSArray, dataUnserialized); PANIC_COND(drivers == nullptr, "NRed", "Failed to cast %s driver data", identifier); if (!FunctionCast(wrapAddDrivers, callback->orgAddDrivers)(that, drivers, doNubMatching)) { SYSLOG("NRed", "Error: Failed to inject personalities for %s.", identifier); } - OSSafeReleaseNULL(drivers); + dataUnserialized->release(); } return res; } diff --git a/NootedRed/NRed.hpp b/NootedRed/NRed.hpp index eac47edb..0bbe87a4 100644 --- a/NootedRed/NRed.hpp +++ b/NootedRed/NRed.hpp @@ -64,9 +64,9 @@ class NRed { friend class X6000; friend class X5000; - public: static NRed *callback; + public: void init(); void processPatcher(KernelPatcher &patcher); void setRMMIOIfNecessary(); diff --git a/NootedRed/X5000.hpp b/NootedRed/X5000.hpp index 7310b83c..1a614289 100644 --- a/NootedRed/X5000.hpp +++ b/NootedRed/X5000.hpp @@ -8,8 +8,9 @@ class X5000 { friend class X6000; - public: static X5000 *callback; + + public: void init(); bool processKext(KernelPatcher &patcher, size_t id, mach_vm_address_t slide, size_t size); diff --git a/NootedRed/X6000.hpp b/NootedRed/X6000.hpp index 67b1f512..99d196a6 100644 --- a/NootedRed/X6000.hpp +++ b/NootedRed/X6000.hpp @@ -7,8 +7,9 @@ class X6000 { friend class X5000; - public: static X6000 *callback; + + public: void init(); bool processKext(KernelPatcher &patcher, size_t id, mach_vm_address_t slide, size_t size); diff --git a/NootedRed/X6000FB.hpp b/NootedRed/X6000FB.hpp index 1601ef95..5ce8d874 100644 --- a/NootedRed/X6000FB.hpp +++ b/NootedRed/X6000FB.hpp @@ -14,8 +14,9 @@ using t_DcLinkSetBacklightLevelNits = bool (*)(void *link, bool isHDR, UInt32 ba class X6000FB { friend class NRed; - public: static X6000FB *callback; + + public: void init(); bool processKext(KernelPatcher &patcher, size_t id, mach_vm_address_t slide, size_t size);