mirror of https://github.com/hyprwm/Hyprland
Aquamarine headers for no pch build and a heap use after free (#6892)
* build: add includes for no precompiled headers missing includes for no precompiled headers/lto usage. * math: avoid heap use after free on destruction of hyprland transforms gets double freed in aquamarine and hyprland, instead of a global use a function-local static variable which avoids any issues related to initialization order across different translation units.
This commit is contained in:
parent
648b7b3b6d
commit
c4913662e1
|
@ -9,6 +9,7 @@
|
||||||
#include <aquamarine/output/Output.hpp>
|
#include <aquamarine/output/Output.hpp>
|
||||||
#include <random>
|
#include <random>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
#include <filesystem>
|
||||||
#include <unordered_set>
|
#include <unordered_set>
|
||||||
#include "debug/HyprCtl.hpp"
|
#include "debug/HyprCtl.hpp"
|
||||||
#include "debug/CrashReporter.hpp"
|
#include "debug/CrashReporter.hpp"
|
||||||
|
@ -24,6 +25,7 @@
|
||||||
#include "protocols/core/Compositor.hpp"
|
#include "protocols/core/Compositor.hpp"
|
||||||
#include "protocols/core/Subcompositor.hpp"
|
#include "protocols/core/Subcompositor.hpp"
|
||||||
#include "desktop/LayerSurface.hpp"
|
#include "desktop/LayerSurface.hpp"
|
||||||
|
#include "render/Renderer.hpp"
|
||||||
#include "xwayland/XWayland.hpp"
|
#include "xwayland/XWayland.hpp"
|
||||||
|
|
||||||
#include <hyprutils/string/String.hpp>
|
#include <hyprutils/string/String.hpp>
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
#include <ranges>
|
#include <ranges>
|
||||||
#include <unordered_set>
|
#include <unordered_set>
|
||||||
#include <hyprutils/string/String.hpp>
|
#include <hyprutils/string/String.hpp>
|
||||||
|
#include <filesystem>
|
||||||
using namespace Hyprutils::String;
|
using namespace Hyprutils::String;
|
||||||
|
|
||||||
extern "C" char** environ;
|
extern "C" char** environ;
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
#include <filesystem>
|
||||||
|
|
||||||
#include "../plugins/PluginSystem.hpp"
|
#include "../plugins/PluginSystem.hpp"
|
||||||
#include "../signal-safe.hpp"
|
#include "../signal-safe.hpp"
|
||||||
|
|
|
@ -12,6 +12,8 @@
|
||||||
#include <sys/un.h>
|
#include <sys/un.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <sys/poll.h>
|
#include <sys/poll.h>
|
||||||
|
#include <filesystem>
|
||||||
|
#include <ranges>
|
||||||
|
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
#include "../helpers/varlist/VarList.hpp"
|
#include "../helpers/varlist/VarList.hpp"
|
||||||
#include "../managers/input/InputManager.hpp"
|
#include "../managers/input/InputManager.hpp"
|
||||||
#include "../managers/SeatManager.hpp"
|
#include "../managers/SeatManager.hpp"
|
||||||
|
#include "../config/ConfigManager.hpp"
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
#include <aquamarine/input/Input.hpp>
|
#include <aquamarine/input/Input.hpp>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
#include "debug/Log.hpp"
|
#include "debug/Log.hpp"
|
||||||
#include "../macros.hpp"
|
#include "../macros.hpp"
|
||||||
#include <xf86drm.h>
|
#include <xf86drm.h>
|
||||||
|
#include <drm_fourcc.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
DRM formats are LE, while OGL is BE. The two primary formats
|
DRM formats are LE, while OGL is BE. The two primary formats
|
||||||
|
|
|
@ -70,113 +70,28 @@ void matrixRotate(float mat[9], float rad) {
|
||||||
matrixMultiply(mat, mat, rotate);
|
matrixMultiply(mat, mat, rotate);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unordered_map<eTransform, std::array<float, 9>> transforms = {
|
const std::unordered_map<eTransform, std::array<float, 9>>& getTransforms() {
|
||||||
{HYPRUTILS_TRANSFORM_NORMAL,
|
static std::unordered_map<eTransform, std::array<float, 9>> transforms = {
|
||||||
{
|
{HYPRUTILS_TRANSFORM_NORMAL, {1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f}},
|
||||||
1.0f,
|
{HYPRUTILS_TRANSFORM_90, {0.0f, 1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f}},
|
||||||
0.0f,
|
{HYPRUTILS_TRANSFORM_180, {-1.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f}},
|
||||||
0.0f,
|
{HYPRUTILS_TRANSFORM_270, {0.0f, -1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f}},
|
||||||
0.0f,
|
{HYPRUTILS_TRANSFORM_FLIPPED, {-1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f}},
|
||||||
1.0f,
|
{HYPRUTILS_TRANSFORM_FLIPPED_90, {0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f}},
|
||||||
0.0f,
|
{HYPRUTILS_TRANSFORM_FLIPPED_180, {1.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f}},
|
||||||
0.0f,
|
{HYPRUTILS_TRANSFORM_FLIPPED_270, {0.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f}},
|
||||||
0.0f,
|
|
||||||
1.0f,
|
|
||||||
}},
|
|
||||||
{HYPRUTILS_TRANSFORM_90,
|
|
||||||
{
|
|
||||||
0.0f,
|
|
||||||
1.0f,
|
|
||||||
0.0f,
|
|
||||||
-1.0f,
|
|
||||||
0.0f,
|
|
||||||
0.0f,
|
|
||||||
0.0f,
|
|
||||||
0.0f,
|
|
||||||
1.0f,
|
|
||||||
}},
|
|
||||||
{HYPRUTILS_TRANSFORM_180,
|
|
||||||
{
|
|
||||||
-1.0f,
|
|
||||||
0.0f,
|
|
||||||
0.0f,
|
|
||||||
0.0f,
|
|
||||||
-1.0f,
|
|
||||||
0.0f,
|
|
||||||
0.0f,
|
|
||||||
0.0f,
|
|
||||||
1.0f,
|
|
||||||
}},
|
|
||||||
{HYPRUTILS_TRANSFORM_270,
|
|
||||||
{
|
|
||||||
0.0f,
|
|
||||||
-1.0f,
|
|
||||||
0.0f,
|
|
||||||
1.0f,
|
|
||||||
0.0f,
|
|
||||||
0.0f,
|
|
||||||
0.0f,
|
|
||||||
0.0f,
|
|
||||||
1.0f,
|
|
||||||
}},
|
|
||||||
{HYPRUTILS_TRANSFORM_FLIPPED,
|
|
||||||
{
|
|
||||||
-1.0f,
|
|
||||||
0.0f,
|
|
||||||
0.0f,
|
|
||||||
0.0f,
|
|
||||||
1.0f,
|
|
||||||
0.0f,
|
|
||||||
0.0f,
|
|
||||||
0.0f,
|
|
||||||
1.0f,
|
|
||||||
}},
|
|
||||||
{HYPRUTILS_TRANSFORM_FLIPPED_90,
|
|
||||||
{
|
|
||||||
0.0f,
|
|
||||||
1.0f,
|
|
||||||
0.0f,
|
|
||||||
1.0f,
|
|
||||||
0.0f,
|
|
||||||
0.0f,
|
|
||||||
0.0f,
|
|
||||||
0.0f,
|
|
||||||
1.0f,
|
|
||||||
}},
|
|
||||||
{HYPRUTILS_TRANSFORM_FLIPPED_180,
|
|
||||||
{
|
|
||||||
1.0f,
|
|
||||||
0.0f,
|
|
||||||
0.0f,
|
|
||||||
0.0f,
|
|
||||||
-1.0f,
|
|
||||||
0.0f,
|
|
||||||
0.0f,
|
|
||||||
0.0f,
|
|
||||||
1.0f,
|
|
||||||
}},
|
|
||||||
{HYPRUTILS_TRANSFORM_FLIPPED_270,
|
|
||||||
{
|
|
||||||
0.0f,
|
|
||||||
-1.0f,
|
|
||||||
0.0f,
|
|
||||||
-1.0f,
|
|
||||||
0.0f,
|
|
||||||
0.0f,
|
|
||||||
0.0f,
|
|
||||||
0.0f,
|
|
||||||
1.0f,
|
|
||||||
}},
|
|
||||||
};
|
};
|
||||||
|
return transforms;
|
||||||
|
}
|
||||||
|
|
||||||
void matrixTransform(float mat[9], eTransform transform) {
|
void matrixTransform(float mat[9], eTransform transform) {
|
||||||
matrixMultiply(mat, mat, transforms.at(transform).data());
|
matrixMultiply(mat, mat, getTransforms().at(transform).data());
|
||||||
}
|
}
|
||||||
|
|
||||||
void matrixProjection(float mat[9], int width, int height, eTransform transform) {
|
void matrixProjection(float mat[9], int width, int height, eTransform transform) {
|
||||||
memset(mat, 0, sizeof(*mat) * 9);
|
memset(mat, 0, sizeof(*mat) * 9);
|
||||||
|
|
||||||
const float* t = transforms.at(transform).data();
|
const float* t = getTransforms().at(transform).data();
|
||||||
float x = 2.0f / width;
|
float x = 2.0f / width;
|
||||||
float y = 2.0f / height;
|
float y = 2.0f / height;
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
#include <optional>
|
#include <optional>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
#include "../memory/Memory.hpp"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Hyprland synchronization timelines are based on the wlroots' ones, which
|
Hyprland synchronization timelines are based on the wlroots' ones, which
|
||||||
|
|
|
@ -6,6 +6,8 @@
|
||||||
#include "../includes.hpp"
|
#include "../includes.hpp"
|
||||||
#include "../helpers/math/Math.hpp"
|
#include "../helpers/math/Math.hpp"
|
||||||
#include "../helpers/memory/Memory.hpp"
|
#include "../helpers/memory/Memory.hpp"
|
||||||
|
#include "../macros.hpp"
|
||||||
|
#include <aquamarine/buffer/Buffer.hpp>
|
||||||
|
|
||||||
class CWLSurface;
|
class CWLSurface;
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
#include "../helpers/math/Math.hpp"
|
#include "../helpers/math/Math.hpp"
|
||||||
#include "../helpers/math/Math.hpp"
|
#include "../helpers/math/Math.hpp"
|
||||||
#include "../desktop/WLSurface.hpp"
|
#include "../desktop/WLSurface.hpp"
|
||||||
|
#include "../helpers/sync/SyncTimeline.hpp"
|
||||||
#include <tuple>
|
#include <tuple>
|
||||||
|
|
||||||
class CMonitor;
|
class CMonitor;
|
||||||
|
|
|
@ -49,6 +49,10 @@
|
||||||
|
|
||||||
#include "../helpers/Monitor.hpp"
|
#include "../helpers/Monitor.hpp"
|
||||||
#include "../render/Renderer.hpp"
|
#include "../render/Renderer.hpp"
|
||||||
|
#include "../Compositor.hpp"
|
||||||
|
|
||||||
|
#include <aquamarine/buffer/Buffer.hpp>
|
||||||
|
#include <aquamarine/backend/Backend.hpp>
|
||||||
|
|
||||||
void CProtocolManager::onMonitorModeChange(CMonitor* pMonitor) {
|
void CProtocolManager::onMonitorModeChange(CMonitor* pMonitor) {
|
||||||
const bool ISMIRROR = pMonitor->isMirror();
|
const bool ISMIRROR = pMonitor->isMirror();
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#include "../Compositor.hpp"
|
#include "../Compositor.hpp"
|
||||||
#include "../debug/HyprCtl.hpp"
|
#include "../debug/HyprCtl.hpp"
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
|
#include <filesystem>
|
||||||
|
|
||||||
#if defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__)
|
#if defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__)
|
||||||
#include <sys/sysctl.h>
|
#include <sys/sysctl.h>
|
||||||
|
|
|
@ -7,6 +7,8 @@
|
||||||
#include "wayland.hpp"
|
#include "wayland.hpp"
|
||||||
#include "linux-dmabuf-v1.hpp"
|
#include "linux-dmabuf-v1.hpp"
|
||||||
#include "../helpers/signal/Signal.hpp"
|
#include "../helpers/signal/Signal.hpp"
|
||||||
|
#include "../helpers/Format.hpp"
|
||||||
|
#include "../helpers/Monitor.hpp"
|
||||||
#include <aquamarine/buffer/Buffer.hpp>
|
#include <aquamarine/buffer/Buffer.hpp>
|
||||||
|
|
||||||
class CDMABuffer;
|
class CDMABuffer;
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#include "../managers/HookSystemManager.hpp"
|
#include "../managers/HookSystemManager.hpp"
|
||||||
#include "../helpers/Timer.hpp"
|
#include "../helpers/Timer.hpp"
|
||||||
#include "../managers/eventLoop/EventLoopTimer.hpp"
|
#include "../managers/eventLoop/EventLoopTimer.hpp"
|
||||||
|
#include <aquamarine/buffer/Buffer.hpp>
|
||||||
|
|
||||||
class CMonitor;
|
class CMonitor;
|
||||||
class IHLBuffer;
|
class IHLBuffer;
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#include "../../helpers/Monitor.hpp"
|
#include "../../helpers/Monitor.hpp"
|
||||||
#include "../PresentationTime.hpp"
|
#include "../PresentationTime.hpp"
|
||||||
#include "../DRMSyncobj.hpp"
|
#include "../DRMSyncobj.hpp"
|
||||||
|
#include "../../render/Renderer.hpp"
|
||||||
|
|
||||||
#define LOGM PROTO::compositor->protoLog
|
#define LOGM PROTO::compositor->protoLog
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
#include "../core/Compositor.hpp"
|
#include "../core/Compositor.hpp"
|
||||||
#include "../DRMSyncobj.hpp"
|
#include "../DRMSyncobj.hpp"
|
||||||
#include "../../helpers/sync/SyncTimeline.hpp"
|
#include "../../helpers/sync/SyncTimeline.hpp"
|
||||||
|
#include "../../Compositor.hpp"
|
||||||
#include <xf86drm.h>
|
#include <xf86drm.h>
|
||||||
|
|
||||||
CWLBufferResource::CWLBufferResource(SP<CWlBuffer> resource_) : resource(resource_) {
|
CWLBufferResource::CWLBufferResource(SP<CWlBuffer> resource_) : resource(resource_) {
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#include <xf86drm.h>
|
#include <xf86drm.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <gbm.h>
|
#include <gbm.h>
|
||||||
|
#include <filesystem>
|
||||||
|
|
||||||
inline void loadGLProc(void* pProc, const char* name) {
|
inline void loadGLProc(void* pProc, const char* name) {
|
||||||
void* proc = (void*)eglGetProcAddress(name);
|
void* proc = (void*)eglGetProcAddress(name);
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
#include "OpenGL.hpp"
|
#include "OpenGL.hpp"
|
||||||
#include "../Compositor.hpp"
|
#include "../Compositor.hpp"
|
||||||
#include "../protocols/types/Buffer.hpp"
|
#include "../protocols/types/Buffer.hpp"
|
||||||
|
#include <hyprutils/signal/Listener.hpp>
|
||||||
|
#include <hyprutils/signal/Signal.hpp>
|
||||||
|
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "../helpers/signal/Signal.hpp"
|
||||||
|
#include "../helpers/memory/Memory.hpp"
|
||||||
|
#include "../helpers/WLListener.hpp"
|
||||||
#include "Framebuffer.hpp"
|
#include "Framebuffer.hpp"
|
||||||
#include <aquamarine/buffer/Buffer.hpp>
|
#include <aquamarine/buffer/Buffer.hpp>
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/un.h>
|
#include <sys/un.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <filesystem>
|
||||||
|
|
||||||
// TODO: cleanup
|
// TODO: cleanup
|
||||||
static bool set_cloexec(int fd, bool cloexec) {
|
static bool set_cloexec(int fd, bool cloexec) {
|
||||||
|
|
Loading…
Reference in New Issue