Commit Graph

4039 Commits

Author SHA1 Message Date
Muhammad Zahalqa
138595961b LibC: mark strdup & strndup as __attribute__((malloc)) 2020-08-13 18:53:32 +02:00
Linus Groh
675d8eec60 LibGUI: Fix ColorPicker custom color offset
Previously the ColorPicker would get the custom color directly from the
window, this was changed in d7d5788469 to
get the color from the underlying bitmap instead - without taking the
bitmap's scaling into effect though, so resulting colors were off by
quite a bit.

Fixes #3113.
2020-08-13 16:58:31 +02:00
Linus Groh
728d4649e4 LibGUI: Fix ComboBox desktop intersection rect
Subtracting 128 from the desktop rect's height was far to much and
and leading to weird rendering issues - now it's calculated exactly from
taskbar and menubar heights as well as a little additional offset to
make it fit perfectly.

Fixes #3115.
2020-08-13 16:06:02 +02:00
Linus Groh
852770687a LibGUI: Add Desktop::{taskbar,menubar}_height() 2020-08-13 16:06:02 +02:00
Peter Nelson
c8f8f4e6c3 LibGfx: use disposal method of previous frame in GIF transparency
The disposal method on a GIF animation frame now correctly applies to
rendering of the next frame.
2020-08-13 15:49:41 +02:00
Peter Nelson
daa762bb06 LibGfx: correctly handle transparency between GIF frames
This fixes an issue where transparent pixels in GIF animation frames
have their alpha values incorrectly set to zero, allowing the
background behind the GIF to show through, instead of the previous
animation frame.

Additionally, transparent pixels are now correctly identified based on
their index matching the image transparency index, instead of their
color values.
2020-08-13 15:49:41 +02:00
Andreas Kling
3dd15da7b1 LibGUI: Move file icon lookup into a separate FileIconProvider
Let's get it out of FileSystemModel so you can look up a nice icon for
a path without needing a model.
2020-08-12 20:41:13 +02:00
Ben Wiederhake
ff590db7e5 LibC: Move C++ABI functions to cxxabi.cpp, typecheck cxa_atexit 2020-08-12 20:40:59 +02:00
Ben Wiederhake
9d2d97a059 LibC: Avoid ninja-imports of system functions
This adds a new header <sys/internals.h>, which provides access to LibC internals.
This is in the interest of type-checking LibC itself, as well as enabling less-hacky
access for uses like LinkDemo.

And, of course, this progresses LibC towards building cleanly with -Wmissing-declarations.
2020-08-12 20:40:59 +02:00
Ben Wiederhake
9221a25bbc LibC: Tell compiler about invisible call to _start
I'm not sure how else to handle this. Curiously, I can't find the string '_start'
anywhere else in the project. Could it be that we haven't NIH'd this yet?
And that we actually rely on magic from the compiler to call _start for us?
2020-08-12 20:40:59 +02:00
Ben Wiederhake
9e1ed4bb05 LibELF: Tell compiler about invisible calls
This makes LibELF build cleanly with -Wmissing-declarations.
2020-08-12 20:40:59 +02:00
Ben Wiederhake
7abd9c81c6 LibCompress: Mark compilation-unit-only functions as static
This enables a nice warning in case a function becomes dead code.
2020-08-12 20:40:59 +02:00
Ben Wiederhake
f7fe63c6b0 LibC: Mark compilation-unit-only functions as static
This enables a nice warning in case a function becomes dead code.
For example with the unused function malloc_good_size() :^)

I found these places by using -Wmissing-declarations.

The Kernel still shows these issues, which I think are false-positives,
but don't want to touch:
- Libraries/LibC/crt0.cpp:41:5: int _start(int, char**, char**)
	Not sure how to handle this.
- Libraries/LibC/cxxabi.cpp:48:5: int __cxa_atexit(AtExitFunction, void*, void*)
- Libraries/LibC/cxxabi.cpp:58:6: void __cxa_finalize(void*)
	Not sure how to tell the compiler that the compiler is already using them.
- Libraries/LibC/libcinit.cpp:36:6: void __libc_init()
- Libraries/LibC/libcinit.cpp:55:19: void __stack_chk_fail()
- Libraries/LibC/malloc.cpp:430:6: void __malloc_init()
- Libraries/LibC/stdio.cpp:562:6: void __stdio_init()
	These are ninja-imported by other LibC functions.
	Maybe we should have some kind of "internals.h" header.
2020-08-12 20:40:59 +02:00
Ben Wiederhake
69a0502f80 LibTextCodec: Mark compilation-unit-only functions as static
This enables a nice warning in case a function becomes dead code.
2020-08-12 20:40:59 +02:00
Ben Wiederhake
5fa771c8b2 LibPCIDB: Mark compilation-unit-only functions as static
This enables a nice warning in case a function becomes dead code.
2020-08-12 20:40:59 +02:00
Ben Wiederhake
1396ce8a9b LibGUI: Mark compilation-unit-only functions as static
This enables a nice warning in case a function becomes dead code.
2020-08-12 20:40:59 +02:00
Ben Wiederhake
7cb2b344c0 LibM: Mark compilation-unit-only functions as static
This enables a nice warning in case a function becomes dead code.
2020-08-12 20:40:59 +02:00
Ben Wiederhake
f2f0c22052 LibGfx: Mark compilation-unit-only functions as static
This enables a nice warning in case a function becomes dead code.
2020-08-12 20:40:59 +02:00
Ben Wiederhake
e050f21f36 LibWeb: Mark compilation-unit-only functions as static
This enables a nice warning in case a function becomes dead code. Also, in the
case of {Event,Node}WrapperFactory.cpp, the corresponding header was forgotten.
This would cause an issue later when we enable -Wmissing-declarations.

Is my clang-format misconfigured? Why is the diff for NodeWrapperFactory.cpp
so large?
2020-08-12 20:40:59 +02:00
Linus Groh
7072806234 Meta: Replace remaining LibM/math.h includes with math.h 2020-08-12 16:18:33 +02:00
Linus Groh
7390098adc LibWeb: Fix #include <LibWeb/{DOM => HTML}/AttributeNames.h>
This file has been moved from DOM/ to HTML/ in
a784090b91.
2020-08-12 15:37:42 +02:00
Diego Iastrubni
64c15798e7 LibCore: Add support for double on argparse
Code is pretty trivial. If someone needs "float" support, a copy-paste
will be in place.

Build system was confused between math.h from rootfs, and toolchain. I
fixed the problem caused by `math.h` by locally using the builtin
`isnan()` from the compiler. It's ugly - but works. I am looking for
other alternatives.
2020-08-12 13:57:06 +02:00
Andreas Kling
305e2ef69c LibWeb: Until an image has loaded or failed, don't occupy layout size
This patch makes images have an implicit zero intrinsic size before
they have either loaded or failed to load. This is tracked by the
ImageLoader object.

This fixes a long-standing issue with images occupying empty 150x150
rectangles of space.
2020-08-12 13:49:43 +02:00
Andreas Kling
a784090b91 LibWeb: Move HTML::AttributeNames file into HTML/ directory 2020-08-12 13:22:59 +02:00
Andreas Kling
40f4ccc3ea LibWeb: Initialize tag/attribute name globals in init-time constructors 2020-08-12 11:27:44 +02:00
Nico Weber
cdf1282419 ScrollBar: Let clicking the gutter scroll by one page
Shift-clicking has the old behavior of jumping to the click position.

This matches scrollbar behavior in macOS and Windows, and in many Linux apps.
2020-08-12 11:02:30 +02:00
Nico Weber
326261094d ScrollBar: Simplify ScrollBar::scroll_to_position() 2020-08-12 11:02:30 +02:00
Nico Weber
8eee5312c5 GUI: Rename ScrollBar::scrubber_size() to ScrollBar::visibile_scrubber_size() 2020-08-12 11:02:30 +02:00
Nico Weber
cb2d56b909 GUI: Give MouseEvent shift() / ctrl() / alt() / logo() functions 2020-08-12 11:02:30 +02:00
Nico Weber
eab7712ab0 GUI: Extract a ScrollBar::scroll_to_position method 2020-08-12 11:02:30 +02:00
Ali Mohammad Pur
d1571ce00a LibTLS: Re-silence a debug log
bc7a149039 (r41386045)
2020-08-12 10:59:06 +02:00
AnotherTest
880b0a7600 LibTLS: Avoid extra initialisation of buffers that are initialised
A trace for proof:
buffer:

    L91: 0:(packet.size() - header_size)
    L98: (packet.size() - header_size):(packet.size() - header_size + mac_size)
    L102: (packet.size() - header_size + mac_size):buffer.size()
    (asserted at L103)

ct:

    L88: 0:(header_size - 2)
    L123: (header_size - 2):(header_size)
    L111: (header_size):(header_size + iv_size)
    L117: (header_size + iv_size):(header_size + iv_size + length)
    (asserted at L113)
2020-08-11 21:37:10 +02:00
AnotherTest
bc7a149039 LibCrypto+LibTLS+Kernel: Switch the Cipher::Mode interface to use Span
This shaves 2.5 more runtime seconds off 'disasm /bin/id', and makes the
Mode<T> interface a lot more allocation-friendly.
2020-08-11 21:37:10 +02:00
Andreas Kling
c37dc4ae73 LibC: Add sa_family_t and in_port_t types 2020-08-11 21:13:18 +02:00
Linus Groh
36c738d9bf LibJS: Assert when exception is not cleared before Interpreter::run()
This is to prevent bugs like #3091 (fixed in
9810f8872c21eaf2aefff25347d957cd26f34c2d) in the future; we generally
don't want Interpreter::run() to be called if the interpreter still has
an exception stored. Sure, it could clear those itself but letting users
of the interpreter do it explicitly seems sensible.
2020-08-11 21:08:30 +02:00
Linus Groh
1d728af5c4 LibWeb: Clear exceptions in each Document::run_javascript() call
We don't want to carry over exceptions across multiple
Document::run_javascript() calls as Interpreter::run() and every of its
exception checks will get confused - in this case there would be an
exception, but not because a certain action failed.

Real-life example:

<script>var a = {}; a.test()</script>
<script>alert("It worked!")</script>

The above HTML will invoke Document::run_javascript() twice, the first
call will result in a TypeError, which is still stored during the second
call. The interpreter will eventually call the following functions (in
order) for the alert() invocation:

- Identifier::execute()
- Interpreter::get_variable()
- Object::get() (on the global object)

That last Object::get() call has an exception check which is triggered
as we still carry around the exception from earlier - and eventually
returns an empty value.

Long story short, the second script will wrongly fail with
"ReferenceError, 'alert' is not defined".

Fixes #3091.
2020-08-11 21:08:30 +02:00
Andreas Kling
ec93d6ffdc LibC: Add in6_addr and sockaddr_in6 structs 2020-08-11 20:29:14 +02:00
Andreas Kling
eeb9042b8e LibC: Declare sockaddr_storage
This type is guaranteed to fit the largest sockaddr_foo supported by
the system. In our case, that's sockaddr_un.
2020-08-11 20:29:14 +02:00
Andreas Kling
9ba9228a6b LibC: Make sure assert() expands to *something* in non-DEBUG builds
Sometimes people write strange things like "assert(x), something();"
and this will not work if "assert(x)" expands to "".

So make it expand to ((void)0) instead.
2020-08-11 20:29:14 +02:00
Andreas Kling
3a13c749cd LibC: Move stat(), lstat() and fstat() to <sys/stat.h>
Dr. POSIX says that's where they belong.
2020-08-11 20:29:14 +02:00
Andreas Kling
5bca49162c LibELF: Remove unused cruft in ELF::Loader 2020-08-11 20:29:14 +02:00
Nico Weber
8d3d0054ed Crypto: Make AES call malloc much less often
ByteBuffer::slice_view() allocates a new ByteBuffer object,
which as a RefPtr and everything.

Nowadays it should probably return a Bytes / Span<u8>, but AES was only
using slice_view() to extract the pointer again.  So just add ady a
range check at the top, and do pointer arithmetic to do the same thing
faster.

Reduces time to run `disasm /bin/id` by a bit under 40%,
from ~8.3s to ~5s (min-of-3 runs).
2020-08-11 16:25:36 +02:00
Andreas Kling
8d73355c38 LibELF: Set ELF::Loader::m_symbol_count in constructor
Setting it in load() excludes users of ELF::Loader that don't actually
call load() but only use the Loader for symbolication purposes.

Perhaps the factoring here is not ideal.
2020-08-11 12:23:43 +02:00
Andreas Kling
ae0ff13f66 LibGfx: Correct copyright years for {Classic,}WindowTheme.{cpp,h} 2020-08-10 21:20:28 +02:00
Muhammad Zahalqa
de5e542930 LibCore: remove redundant UDPSocket constructor
The comment claims it is for use from UDPServer::accept
Which is not a real function.
2020-08-10 20:03:18 +02:00
Muhammad Zahalqa
eb77568d8c LibCore: update m_bound on socket bind 2020-08-10 20:03:18 +02:00
Nico Weber
00f658b984 Lagom+LibELF: Add an ELF fuzzer, and tweak the code to survive a few minutes of fuzzing (#3071)
If a buffer smaller than Elf32_Ehdr was passed to Image, header()
would do an out-of-bounds read.

Make parse() check for that. Make most Image methods assert that the image
is_valid(). For that to work, set m_valid early in Image::parse()
instead of only at its end.

Also reorder a few things so that the fuzzer doesn't hit (valid)
assertions, which were harmless from a security PoV but which still
allowed userspace to crash the kernel with an invalid ELF file.

Make dbgprintf()s configurable at run time so that the fuzzer doesn't
produce lots of logspam.
2020-08-10 15:55:17 +02:00
Andreas Kling
eaf7e68408 LibWeb: Move tree iteration helpers from Node/LayoutNode to TreeNode
Since these are generally useful in our trees, let's just keep them
in TreeNode instead of duplicating the helpers in subclasses.
2020-08-10 15:21:23 +02:00
Andreas Kling
de1a54c378 WindowServer+LibGfx: Move window frame rect calculation to WindowTheme 2020-08-10 13:03:44 +02:00
Brian Gianforcaro
0f42463eab Kernel: Use Userspace<T> for the execve syscall 2020-08-10 12:52:15 +02:00