1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2026-01-21 06:20:59 +00:00
Commit graph

14338 commits

Author SHA1 Message Date
Karol Kosek
8238f926fd LibArchive+Utilities: Port ZipOutputStream to Core::Stream 2022-12-27 07:24:07 +03:30
Nico Weber
c96e663b0a LibCompress: Add two missing return statements 2022-12-26 13:56:13 -05:00
Tom
9d5049230c LibWeb: Clamp {row,column} spans if outside of grid
A bug was found where grid items were being drawn outside of the grid if
the item had a large span and the grid was defined as having gaps
between the rows/columns.

This was caused by an erroneous calculation of the
{row,column}_{start,span} properties.
2022-12-26 16:02:48 +01:00
Timothy Flynn
ba86011fab LibWeb: Add missing return statement in an element scrolling error case 2022-12-26 09:56:22 -05:00
Stephan Unverwerth
2658351fa6 LibVirtGPU: Adopt rendering code from VirGLDemo 2022-12-26 09:39:20 +01:00
Stephan Unverwerth
1ec791fcd0 LibVirtGPU: Adopt device initialization code from VirGLDemo 2022-12-26 09:39:20 +01:00
Stephan Unverwerth
086c7c4c88 LibVirtGPU: Create and initialize device from file descriptor 2022-12-26 09:39:20 +01:00
Stephan Unverwerth
4b792cb7be LibVirtGPU: Replace magic values with command bitfields 2022-12-26 09:39:20 +01:00
Stephan Unverwerth
93b5af932e LibVirtGPU: Add utility header for command flag bitfields 2022-12-26 09:39:20 +01:00
Stephan Unverwerth
65a1ebcccf LibVirtGPU: Add enum for Gallium texture formats 2022-12-26 09:39:20 +01:00
Stephan Unverwerth
0993aba321 LibVirtGPU: Add length verification to append_create_shader() 2022-12-26 09:39:20 +01:00
Stephan Unverwerth
140338670a LibVirtGPU: Make depth and color clearing separate functions 2022-12-26 09:39:20 +01:00
Stephan Unverwerth
03884fad74 LibVirtGPU: Remove hard coded primitive type in append_draw_vbo() 2022-12-26 09:39:20 +01:00
Stephan Unverwerth
b5acfba487 LibVirtGPU: Improve append_set_framebuffer_state_no_attach()
Remove hardcoded framebuffer size and add argument verification.
2022-12-26 09:39:20 +01:00
Stephan Unverwerth
4a4aa23aed LibVirtGPU: Remove hardcoded size from append_viewport() 2022-12-26 09:39:20 +01:00
Stephan Unverwerth
7a2b9ad164 LibVirtGPU: Drop gl_ prefix from CommandBufferBuilder methods 2022-12-26 09:39:20 +01:00
Stephan Unverwerth
b220ed6b5c LibVirtGPU: Use c++ style casts in CommandBuilder 2022-12-26 09:39:20 +01:00
Stephan Unverwerth
44b2a746ca LibVirtGPU: Improve type safety of encode_command()
ObjectType is now passed as an enum instead of a plain number. The
underlying type for both ObjectType and VirGLCommand have been reduced
to u8 to make sure they fit in the encoded command. Command length is
verified to not overflow u16.
2022-12-26 09:39:20 +01:00
Stephan Unverwerth
ce57174802 LibVirtGPU: Make BindTarget an enum and move it into VirtGPU::Protocol 2022-12-26 09:39:20 +01:00
Stephan Unverwerth
51ac0d73a3 LibVirtGPU: Move VirGLDemo protocol code into VirtGPU namespace 2022-12-26 09:39:20 +01:00
Stephan Unverwerth
a95eea5ae2 LibVirtGPU: Add newlines between CommandBuilder methods 2022-12-26 09:39:20 +01:00
Stephan Unverwerth
255b12ea97 LibVirtGPU: Remove unnecessary BufferBuilder constructor deletion
Since there is a non-default constructor this line is not needed.
2022-12-26 09:39:20 +01:00
Stephan Unverwerth
a34998fb76 LibVirtGPU: Adopt virgl protocol files from VirGLDemo 2022-12-26 09:39:20 +01:00
Stephan Unverwerth
bd7931ff23 LibGPU+LibVirtGPU: Allow loading the driver and instantiating the device
This adds LibVirtGPU to the list of allowed drivers in LibGPU and adds a
factory method to create the device to libVirtGPU.
2022-12-26 09:39:20 +01:00
Stephan Unverwerth
c52abe0bea LibVirtGPU: Add a new GPU device that talks to our VirtIO-GPU driver
At this moment this only contains function stubs.
2022-12-26 09:39:20 +01:00
Stephan Unverwerth
3b2ded1d44 LibGPU+LibSoftGPU: Move size and pixel format information to GPU::Image
Size and format information are the same for every implementation and do
not need to be virtual. This removes the need to reimplement them for
each driver.
2022-12-26 09:39:20 +01:00
Timothy Flynn
4abafbbe3c LibIPC: Remove requirement that Variant types must begin with Empty
This is no longer required by the decoder.
2022-12-26 09:36:16 +01:00
Timothy Flynn
9b483625e6 LibIPC+Everywhere: Change IPC decoders to construct values in-place
Currently, the generated IPC decoders will default-construct the type to
be decoded, then pass that value by reference to the concrete decoder.
This, of course, requires that the type is default-constructible. This
was an issue for decoding Variants, which had to require the first type
in the Variant list is Empty, to ensure it is default constructible.

Further, this made it possible for values to become uninitialized in
user-defined decoders.

This patch makes the decoder interface such that the concrete decoders
themselves contruct the decoded type upon return from the decoder. To do
so, the default decoders in IPC::Decoder had to be moved to the IPC
namespace scope, as these decoders are now specializations instead of
overloaded methods (C++ requires specializations to be in a namespace
scope).
2022-12-26 09:36:16 +01:00
Timothy Flynn
765c5b416f IPCCompiler+LibIPC: Generate message decoders with better TRY semantics
Instead of a bunch of manual error checking and returning a null OwnPtr,
we can propagate the errors up and return NonnullOwnPtr on success.
2022-12-26 09:36:16 +01:00
Luke Wilde
fa1416987a LibJS: Add yearOfWeek calendar methods and properties
This is a normative change in the Temporal spec.

See:
- 7fa4d18
- caa941d
2022-12-26 09:30:36 +01:00
thankyouverycool
804baa42f9 LibGUI: Standardize automatic scrolling in TextEditor+GlyphMapWidget
Both widgets now make use of their base class's scrolling timer and
now always accept drag selection updates on mousemove_event().

This guarantees much snappier feeling selections when actively moving
the mouse.
2022-12-26 09:27:19 +01:00
thankyouverycool
d938b9effe LibGUI+Applications: Rename automatic scrolling timer functions
Renames on_automatic_scrolling_timer_fired() =>
	automatic_scrolling_timer_did_fire()

The 'on_' prefix is usually reserved for AK::Function hooks.

Renames set_automatic_scrolling_{active,timer}() =>
	set_automatic_scrolling_timer_active()

For consistency, accuracy, and header file A E S T H E T I C S
2022-12-26 09:27:19 +01:00
thankyouverycool
5b02e6a46b LibGUI: Handle Enter+Leave events for automatic cursor trackers
Previously, automatic cursor tracking widgets consumed all mouse
events but did not update their own hover state while active, meaning
Enter and Leave events were not being dispatched.

Fixes TextEditor's automatic selection scroll timer failing to stop
and start while autotracking. Its manual workaround in mousedown
is no longer needed.
2022-12-26 09:27:19 +01:00
Baitinq
419dea0996 WebDriver: Implement stub for .../element/{element id}/click
This patch adds a stub implementation for the POST
/session/{session id}/element/{element id}/click endpoint.
2022-12-25 17:24:52 +01:00
Baitinq
6a72a4df96 LibWeb: Propagate errors in Element::scroll_into_view()
This patch will allow us to handle scrolling errors in the WebDriver
implementation :)
2022-12-25 17:24:52 +01:00
Andrew Kaster
9a66a9ac4a LibWasm: Split SaturatingTruncate conversion function by float/non-float
It's possible to construct a floating point value that when converted to
double is not larger than i64::max(), but when remaining a float is
larger. This patch avoids that edge case with some even less exciting if
constexpr branches to fix a float-cast-overflow UBSAN error on macOS
with llvm 15.0.6.
2022-12-25 07:58:58 -07:00
Jelle Raaijmakers
ae82b14e59 LibGL+LibWeb: Remove WebGL-specific API from GLContext
The OpenGL API has ways to retrieve these values, so let's make sure to
implement them. :^)
2022-12-25 15:48:59 +01:00
MacDue
2b1342b120 LibWeb: Remove done gradient painting TODO
This code is already generalised to every gradient in existence.
2022-12-25 15:35:31 +01:00
MacDue
f2fe3245cf LibWeb: Speed up gradient painting quite a lot
Previously gradient painting was dominated by the clipping checks in
Painter::set_pixel(). This commit changes gradient painting to use the
new Painter::fill_pixels() function (which does all these checks outside
the hot loop).

With this change gradient painting drops from 96% of the profile to 51%
when scrolling around on gradients.html. A nice 45% reduction :^)
2022-12-25 15:35:31 +01:00
MacDue
ca01017f32 LibGfx: Add Painter::fill_pixels()
This function fills a region of pixels with the result of a callback
function. This is an alternative to a for loop that repeatedly calls
Painter::set_pixel(), which can get very expensive due to the clipping
checks set_pixel() does each call.
2022-12-25 15:35:31 +01:00
Luke Wilde
7e701f6256 LibWeb: Keep unhandledrejection event promises alive when task is queued
This is fixed by making the "about to be notified rejected promises
list" use JS::Handle instead of JS::NonnullGCPtr. This UAF happens
because notify_about_rejected_promises makes a local copy of this list,
empties the member variable list and then moves the local copy into a
JS::SafeFunction lambda. JS::SafeFunction can only see GC pointers that
are in its storage, not external storage.

Example exploit (requires fixed microtask timing by removing the dummy
execution context):
```html
<script>
Promise.reject(new Error);

// Exit the script block, causing a microtask checkpoint and thus
// queuing of a task to fire the unhandled rejection event for the
// above promise.
// During the time after being queued but before being ran, these
// promises are not kept alive. This is because JS::SafeFunction cannot
// see into a Vector, meaning it can't visit the stored NonnullGCPtrs.
</script>

<script defer>
// Cause a garbage collection, destroying the above promise.
const b = [];
for (var i = 0; i < 200000; i++)
    b.push({});

// Some time after this script block, the queued unhandled rejection
// event task will fire, with the event object containing the dead
// promise.
window.onunhandledrejection = (event) => {
    let value = event.promise;
    console.log(value);
}
</script>
```
2022-12-25 15:32:51 +01:00
Andreas Kling
32e35a02f9 LibWeb: Apply CSS text-transform during layout
Previously we were doing this at the painting stage, which meant that
layout potentially used the wrong glyphs when measuring text.

This would lead to incorrect layout metrics and was visible on the
HTML5Test score display, for example. :^)
2022-12-24 12:27:46 +01:00
Yedaya Katsman
c2655d3733 LibSQL: Output a more specific error on failed socket creation
This can fail if /run/user/$pid/ doesn't exist, which can happen on wsl
without systemd.
2022-12-23 23:31:07 +01:00
Timothy Flynn
69beda23c3 LibConfig+LibCore+ConfigServer: Support u32 configuration entries 2022-12-23 23:26:21 +01:00
ericLemanissier
49f697ed56 LibGfx: GIFLoader: Propagate more errors
Migrate bool and Optional<> result types
to ErrorOr<>
2022-12-23 16:48:30 -05:00
ericLemanissier
05b9e6ac3b LibGfx: JPGLoader: Centralize error handling in read_be_word 2022-12-23 16:48:30 -05:00
ericLemanissier
14eefedbf9 LibGfx: JPGLoader: Propagate errors properly
Use our normal error propagation mechanism instead of returning booleans
2022-12-23 16:48:30 -05:00
ericLemanissier
030d380ed2 LibGfx: GIFLoader: Propagate errors properly
Use our normal error propagation mechanism instead of returning booleans
2022-12-23 16:48:30 -05:00
ericLemanissier
d0ddbf4aad LibGfx: DDSLoader: Propagate errors properly
Use our normal error propagation mechanism instead of returning booleans
2022-12-23 16:48:30 -05:00
ericLemanissier
a6d710612f LibGfx: BMPLoader: Propagate errors properly
Use our normal error propagation mechanism instead of returning booleans
2022-12-23 16:48:30 -05:00