1
0
Fork 0
Commit Graph

370 Commits

Author SHA1 Message Date
HP van Braam 240f510fa7 Core ubsan fixes
This fixes UBSAN errors reported by running our testsuite, importing the
TPS demo, and running the TPS demo. I have tried, wherever possible, to
fix issues related to reported issues but not directly reported by UBSAN
because thse code paths just happened to not have been exercised in
these cases.

These fixes apply only to errors reported, and caused by, core/

The following things have been changed:

* Make sure there are no implicit sign changing casts in core.
* Explicitly type enums that are part of a public API such that users of
  the API cannot pass in wrongly-sized values leading to potential stack
  corruption.
* Ensure that memcpy is never called with invalid or null pointers as
  this is undefined behavior, and when the engine is built with
  optimizations turned on leads to memory corruption and hard to debug
  crashes.
* Replace enum values only used as static values with constexpr static
  const values instead. This has no runtime overhead. This makes it so
  that the size of the enums is explicit.
* Make sure that nan and inf is handled consistently in String.
* Implement a _to_int template to ensure that all of the paths use the
  same algorhithm, and correct the negative integer case.
* Changed the way the json serializer precision work, and added tests to
  verify the new behavior. The behavior doesn't quite match master in
  particulary for negative doubles as the original code tried to cast -inf
  to an int. This then led to negative doubles losing all but one of
  their decimal points when serializing. Behavior in GDScript remains
  unchanged.
2024-12-18 14:31:12 +01:00
Thaddeus Crews 9fba62a938
Merge pull request #100239 from Ivorforce/cowdata-move-constructor
Add move constructor and move assignment to `CowData`, `String`, `Char16String`, `CharString`, and `Vector`.
2024-12-12 16:13:30 -06:00
Rémi Verschelde 7b15c0622e
Merge pull request #100295 from Ivorforce/string-builder-inplace
Optimize `StringBuilder.as_string` by constructing the string in-place and skipping unnecessary checks.
2024-12-12 14:10:21 +01:00
Lukas Tenbrink 76af9537ed Optimize `StringBuilder.as_string` by constructing the string in-place and skipping unnecessary checks.
Co-authored-by: YYF233333 <nbyyf2002@mail.ustc.edu.cn>
2024-12-12 01:35:02 +01:00
Lukas Tenbrink ef3eecd34e Optimize `String.count` and `String.countn` by avoiding repeated reallocations. 2024-12-12 00:28:13 +01:00
Lukas Tenbrink 57073ba14e Add move constructor and move assignment to CowData, String, Char16String, CharString and Vector. 2024-12-11 15:52:15 +01:00
Thaddeus Crews ba66c478c0
Merge pull request #100041 from Ivorforce/optimize-string-similarity
Optimize String.similarity by avoiding allocation for bigrams.
2024-12-10 14:16:00 -06:00
Thaddeus Crews 3ef8e835c2
Merge pull request #99775 from Ivorforce/string-builder-template-append
Optimize StringBuilder by using `LocalVector` instead of `Vector`.
2024-12-10 14:15:58 -06:00
Lukas Tenbrink a3f48f7047 Optimize String construction from statically known strings allowing `strlen` to be evaluated at compile time, where possible. 2024-12-09 21:47:28 +01:00
Thaddeus Crews 4b1a51d3e3
Merge pull request #100075 from demolke/simplify
Fix handling of leading `..` in simplify_path
2024-12-09 14:33:34 -06:00
Thaddeus Crews 5b312d0e59
Merge pull request #99816 from Ivorforce/string-copy-from-optimizations
Optimize `String::copy_from` and `String::copy_from_unchecked` implementations, improving String allocation speed.
2024-12-09 14:33:33 -06:00
Thaddeus Crews 473c28b1ad
Merge pull request #98118 from bruvzg/escape_colors
Add support for 24-bit color escape sequences, simplify `print_rich` BBCode parsing.
2024-12-09 14:33:25 -06:00
Lukas Tenbrink 8df2dbe2f6 Optimize StringBuilder append for static strings, and as_string(). 2024-12-08 16:39:25 +01:00
Lukas Tenbrink 875b48366c Optimize String.similarity by avoiding allocation for bigrams. 2024-12-08 13:28:40 +01:00
Lukas Tenbrink e1c42392c2 Improve string copy_from and copy_from_unchecked implementations, by making use of caller contracts and language spec (NULL termination and casts). 2024-12-07 01:41:25 +01:00
Lukas Tenbrink b5c31ebb41 Add contains_char() for single-character 'contains' calls. 2024-12-06 20:23:35 +01:00
demolke 964e2b3a9e Fix handling of leading `..` in simplify_path
Prior to this `..\..\texture.png` was incorrectly simplified to `texture.png`
2024-12-06 07:53:55 +01:00
Thaddeus Crews 45734bd451
Merge pull request #99817 from Ivorforce/strlen-char32_t
Use `strlen()` 3 times instead of custom length check implementations in ustring
2024-12-05 14:12:21 -06:00
Thaddeus Crews 06cce0e81a
Merge pull request #100016 from Ivorforce/camelcase-to-underscore-rolling-cache
Optimize `_camelcase_to_underscore` (and thus `String.capitalize`)
2024-12-05 14:11:59 -06:00
Lukas Tenbrink 8d82933c7c Optimize _camelcase_to_underscore (and thus String.capitalize) by using a rolling cache of character attributes, instead of re-computing each iteration. 2024-12-04 18:39:38 +01:00
Lukas Tenbrink 0d2e13bcb8 Optimize is_valid_filename and validate_filename by caching invalid filename characters, instead of re-splitting each call. 2024-12-04 17:54:11 +01:00
Rémi Verschelde d7515dddaa
Merge pull request #99815 from Ivorforce/string-name-not-equal-inline
Move StringName `!=` operator to the header file to make it inlineable.
2024-12-02 15:51:43 +01:00
Lukas Tenbrink 2b39314461 Abstract the implementation of 3 ustring string length checks with strlen, adding an implementation for char32_t. 2024-12-02 15:19:20 +01:00
Lukas Tenbrink a47d29cf11 Move StringName != to the header file to make it inlineable. 2024-12-01 19:50:34 +01:00
Rémi Verschelde 56a7dba10b
Merge pull request #99799 from akien-mga/fix-typos
Fix various typos and code style issues
2024-11-29 22:02:53 +01:00
Rémi Verschelde 88e81ee730
Fix various typos and code style issues 2024-11-28 17:40:42 +01:00
Lukas Tenbrink 884cbb5333 Don't repeat calls to strlen in split, and make splitter_length const in get_slice. 2024-11-28 01:55:48 +01:00
Thaddeus Crews e7b11d1c99 Merge pull request #99527 from RandomShaper/fix_threaded_trans
Make loading translations from threads safe
2024-11-22 14:54:26 -06:00
Pedro J. Estébanez 7a25173ff4 Make loading translations from threads safe 2024-11-22 09:44:07 +01:00
Dan Nicholson 6f4fadf65d Expose standardize_locale add_default param publicly
Comparing locales can have surprising outcomes since it standardizes
locales with defaults. For example, zh and zh_CN result in an exact
match since the defaults change them both to zh_Hans_CN. Expose the
add_default parameter publicly with a default of false so the fully
standardized locale can be inspected.
2024-11-21 16:50:31 -07:00
A Thousand Ships 68f638cf02
Use `(r)find_char` instead of `(r)find` for single characters 2024-11-17 10:02:18 +01:00
Thaddeus Crews ebf49317a2
Merge pull request #97923 from kisg/translation_server_siof_fix
Make TranslationServer singleton variable inline.
2024-11-12 12:13:01 -06:00
Thaddeus Crews 27b394c52a
Merge pull request #98743 from dbnicholson/improve-compare-locales
Improve locale comparison
2024-11-12 09:27:54 -06:00
Dan Nicholson 2dd409fd70 Improve locale comparison
Since 9456454109, country specific locales are always preferred over
country-less locales even when the OS locale country doesn't match. For
example, running the Godot editor with locale es_ES will result in the
es_AR locale being chosen even though the es locale would be better.

The change happened because the score of the es_AR locale and the es
locale are the same when comparing to es_ES. Change this by parsing
locale strings into a Locale structure and decreasing the score when
script, country or variant are set in both but not matched. For the
es_ES case, this causes the es_AR score to be decreased since the
countries don't match. On the other hand, the es locale is not decreased
since it doesn't specify a country.
2024-11-12 06:06:50 -07:00
Thaddeus Crews 6c4c61f1b2
Merge pull request #98547 from timothyqiu/loaded-locales-set
Fix duplicated entries in `TranslationServer::get_loaded_locales()`
2024-11-11 14:18:40 -06:00
Thaddeus Crews 63838c936c
Merge pull request #98278 from a-johnston/fuzzy-search-rebase
Add fuzzy string matching to quick open search
2024-11-10 12:12:56 -06:00
Thaddeus Crews 363c0b5fec
Merge pull request #47502 from KoBeWi/add_0
Always add decimal when converting float to string
2024-10-31 20:14:39 -05:00
A Thousand Ships 38f9769bc6
[Core] Improve error messages with `vformat` 2024-10-30 15:55:51 +01:00
Thaddeus Crews b8f626a0e1
Merge pull request #65962 from 4d49/format-object
Add `Object` support for `String.format`
2024-10-29 19:25:45 -05:00
Thaddeus Crews b7a0971ad2
Merge pull request #97934 from adamscott/give-AThousandShips-a-break
[Codestyle] Set clang-format `RemoveSemicolon` rule to `true`
2024-10-29 19:25:36 -05:00
Mansur Isaev 98c89f17c4 Add `Object` support for `String.format` 2024-10-29 22:27:33 +01:00
Adam Johnston 3ac043c508 Add fuzzy string matching to quick open search
Co-authored-by: sam <samsface@gmail.com>
2024-10-28 11:24:36 -07:00
Haoyu Qiu f451997666 Fix duplicated entries in `TranslationServer::get_loaded_locales()` 2024-10-26 15:10:43 +08:00
Thaddeus Crews d3298fe738
Merge pull request #98395 from Repiteo/core/char-range-utils-update
Core: Update `char_range.inc` to Unicode 16
2024-10-25 13:04:07 -05:00
Adam Scott 0d350e7108
Set clang-format `RemoveSemicolon` rule to `true`
- Set clang-format `Standard` rule to `c++20`
2024-10-25 13:49:43 -04:00
Clay John 33db590947
Merge pull request #98357 from yeojunh/valid-base-check-num-int64-uint64
Core: Fix String::num_int64(), uint64 for valid base check
2024-10-24 19:41:43 -07:00
kobewi 5c0f2414cd Always add decimal when printing float 2024-10-23 15:00:21 +02:00
Thaddeus Crews b6547b0d06
Merge pull request #98236 from timothyqiu/locale-compare-cache-4.x
Cache results for `TranslationServer.compare_locales()`
2024-10-21 16:39:14 -05:00
Thaddeus Crews ab72082fa2
Core: Update `char_range.inc` to Unicode 16 2024-10-21 14:54:19 -05:00
yeojunh b3b24ded19 Add checks for valid base in String::num_int64, uint64().
- Ensure String::num_int64, uint64 returns an empty string for bases less than 2 or greater than 36.
- Added corresponding test cases to verify the behavior.
- Error messages are printed when invalid bases are encountered. These messages are suppressed in the test output.
2024-10-20 00:22:08 -07:00