Commit Graph

16993 Commits

Author SHA1 Message Date
Zoltán Kéri
88c0e62095 encoding/base32: Use ENC_TBL parameter consistently in encode()
Fix encoding to properly use provided encoding table parameter instead of
hardcoded `ENC_TABLE`.

This makes encode properly support custom alphabets as documented.
2024-12-26 14:48:02 +01:00
Zoltán Kéri
e7fb02a84a encoding/base32: Add custom validation support
Add support for custom alphabet validation through an optional validation
function parameter. The default validation follows RFC 4648 base32
alphabet rules (A-Z, 2-7).

This properly supports the documented ability to use custom alphabets.
2024-12-25 16:15:41 +01:00
Zoltán Kéri
8211a911db encoding/base32: Replace padding map with switch statement
Replace package-level map with a simple switch statement for padding
validation. This eliminates allocations we can't properly free while
maintaining the same validation logic.
2024-12-24 20:46:38 +01:00
Yawning Angel
3a5440e4ed base/runtime: Add ensure and ensure_contextless
This provides an equivalent to `assert` and `assert_contextless` that
are always evaluated, ignoring `ODIN_DISABLE_ASSERT`, which is useful
for enforcing API contracts or "asserting" on conditionals with
side-effects.
2024-12-25 00:08:09 +09:00
Zoltán Kéri
e75a49f095 encoding/base32: Set optimization mode for decode() 2024-12-24 16:07:01 +01:00
Zoltán Kéri
93238db202 encoding/base32: Use consistent allocator and add proper cleanup
Fix memory handling throughout base32 package:
- Make padding map package-level constant (to avoid repeated allocs)
- Use passed allocator in encode's make() call
- Add defer delete for allocated memory in encode
- Add proper cleanup in test cases
- Fix memory cleanup of output buffers

The changes ensure consistent allocator usage and cleanup in both
implementation and tests.
2024-12-24 16:00:00 +01:00
Zoltán Kéri
f1f2ed3194 encoding/base32: Fix decode implementation per RFC 4648
Rework base32.decode() to properly handle all cases per RFC 4648:

- Fix error detection order:
  - Check minimum length first (Invalid_Length)
  - Check character validity (Invalid_Character)
  - Check padding and structure (Malformed_Input)

- Fix padding validation:
  - Add required padding length checks (2=6, 4=4, 5=3, 7=1 chars)
  - Ensure padding only appears at end
  - Fix handling of unpadded inputs

- Fix buffer handling:
  - Proper output buffer size calculation
  - Add bounds checking for buffer access
  - Add proper buffer validation

For example:
- "M" correctly returns Invalid_Length (too short)
- "mzxq====" correctly returns Invalid_Character (lowercase)
- "MZXQ=" correctly returns Malformed_Input (wrong padding)
- Unpadded input lengths must be multiples of 8

These changes make the decode function fully compliant with RFC 4648
requirements while providing proper error handling.
2024-12-24 15:52:33 +01:00
Zoltán Kéri
7672ac945a encoding/base32: Add RFC 4648 test suite
Add test suite based on RFC 4648 test vectors and validation rules:
- Add section 10 test vectors for valid encoding/decoding
- Add test cases for invalid character handling (section 3.2)
- Add test cases for padding validation (section 4)
- Add test cases for length requirements (section 6)

The test vectors verify that:
- Empty string encodes/decodes correctly
- Standard cases like "foo" -> "MZXW6===" work
- Invalid characters are rejected
- Missing or malformed padding is detected
- Invalid lengths are caught
2024-12-24 15:28:34 +01:00
Zoltán Kéri
b9338777e3 encoding/base32: Fix buffer allocation and bounds checking
Fix buffer allocation size calculation and add proper bounds checking to
ensure output buffer has sufficient space. This fixes crashes that could
occur with inputs like "AA" and other edge cases where the output buffer
was too small.

Remove #no_bounds_check as proper bounds checking is necessary for safe
error handling. The small performance trade-off is worth the improved
robustness.
2024-12-24 02:20:32 +01:00
Zoltán Kéri
8c761627c8 encoding/base32: Replace assertions with error returns
Replace assertions with proper error handling in base32.decode() to allow
programs to handle invalid input gracefully rather than crashing.

The function now returns ([]byte, Error) instead of just []byte.
2024-12-24 02:17:57 +01:00
Jeroen van Rijn
ad99d20d29 Remove outdated PNG save helpers 2024-12-23 16:33:23 +01:00
dmitriy.gorevoy
e82a0c8fc7 Fixed crash in arena_free_all() for bootstrapped growing arenas.
When trying to set arena.curr_block.used = 0 after mem.zero() caused a crash because if the arena is bootstrapped its memory will be zeroed out after mem.zero() thus making arena.cur_block point to zero.
2024-12-23 09:25:18 +01:00
fleandro
6ff81b6e4c make -export-dependencies:json emit valid json 2024-12-23 01:03:51 +00:00
Joao Fukuda
28e226381d Remove extra white space
Got in on 0a2200f without me noticing, mb.
2024-12-22 16:09:51 -03:00
Joao Fukuda
0a2200fa12 Fix issue #4612 2024-12-22 15:53:54 -03:00
Misomosi
276dab69b6 Pack MDEI struct to fix issue #4407 2024-12-22 10:12:10 -05:00
misomosi
fdf510b7b3 Pack struct when needed, use field_align metadata 2024-12-22 10:05:13 -05:00
blob1807
f07a6f463c Fix io.write_escaped_rune not writing full value 2024-12-22 23:10:42 +10:00
Roland Kovacs
9f77f7c417 Fix crash on assignment of parapoly proc to variable 2024-12-22 12:38:37 +01:00
Roland Kovacs
f2f952b344 Fix crash when proc return type is undeclared parapoly variable
Disallow the declaration of new parapoly variables in return types, when
the procedure's parapoly scope is itself. This happens if e.g.:
`foo :: proc() -> $T`.

Closes #3949, #4294, #4563
2024-12-22 02:31:25 +01:00
misomosi
26f9688c69 Fix early overwrite of dst w/ exp_u64 2024-12-21 16:53:31 -05:00
avanspector
a20d85df1e Fix os_haiku.odin (again) 2024-12-21 17:15:53 +01:00
avanspector
365e24ce8d Remove error baselines from Errno to make fmt clearer 2024-12-21 17:09:57 +01:00
avanspector
cb42b88e13 Update errno.odin 2024-12-21 16:54:45 +01:00
Karl Zylinski
e5f32e1455 Makes tracking allocator default to crashing on a bad free instead of add to bad_free_array. The bad_free_array remains to not break old code. The new default behavior is implemented in a callback that you can override, there's a second provided callback that provides the old behavior where an element was added to bad_free_array. Rationale: Many people are just checking the allocation_map, but don't check the bad free array. Several examples throughout core that use tracking allocator don't check bad_free_array either, so people have been taught not to check it. 2024-12-21 15:49:48 +01:00
chris-montero
c06f79bb36 fixed memory leak in core/prof/spall/doc.odin example code 2024-12-21 15:53:55 +02:00
avanspector
be4748831d Delete errors.odin 2024-12-20 17:25:15 +01:00
avanspector
5376d2a20b fix haiku 2024-12-20 17:19:04 +01:00
Barinzaya
14216ebf51 Added some implicit broadcasting for #simd arrays.
This covers broadcasting from untyped numbers when assigning, as well as
when performing binary operations. SIMD intrinsics have not been
adjusted
2024-12-19 20:07:04 -05:00
Barinzaya
5f46b5ca50 Fixed zeroing in resize_dynamic_array.
When a dynamic array has unused capacity and is resized to a size
greater than its capacity, the unused part of its capacity wasn't being
zeroed.
2024-12-19 17:52:09 -05:00
jason
b73275cf42 Get arm64 up to speed in os2 linux
Readded open flags for arm64 to sys/linux/bits.odin. Make process_start
name based instead of descriptor based to allow running of scripts. Fix
bug in heap_linux. Fix and simplify os2.remove.
2024-12-19 17:12:07 -05:00
gingerBill
597fba7c31 Merge pull request #4597 from lodinukal/master
`vendor:directx`: fix pointers to multipointers and uuids
2024-12-19 13:36:36 +00:00
imlodinu
cce2cb79c9 Change single pointers to multipointers, fix UUIDs in d3d11 and d3d12 2024-12-19 12:23:00 +08:00
gingerBill
61368d942e Merge pull request #4589 from Pariatech/add-trunc-to-linalg-glsl
Add trunc to glsl linalg
2024-12-18 21:20:17 +00:00
Jeroen van Rijn
d3f072835d Merge pull request #4592 from cstrachan88/master
Fixes odin-lang/Odin#4591
2024-12-17 21:23:49 +01:00
Courtney Strachan
69bbd8082a Fixed typo in wgpu.js 2024-12-17 12:13:48 -08:00
Gabriel Pariat
e0b7bfd21e add trunc to glsl linalg 2024-12-17 13:06:59 -05:00
wrapperup
f761dc2102 cleanup redundant constants 2024-12-16 22:58:12 -05:00
wrapperup
6753946b7a fix resource_manager_flag enum 2024-12-16 22:12:20 -05:00
wrapperup
c64f13a0eb use bit sets in miniaudio for flags 2024-12-16 18:34:22 -05:00
Laytan
8b1c9b0ff5 Merge pull request #4568 from giuliano-macedo/master
docs: improved `slice.reinterpret` docstring
2024-12-14 16:46:17 +01:00
Giuliano Macedo
6785a485e3 docs: improved reinterpret docstring 2024-12-14 10:10:06 -03:00
gingerBill
0a29d36aa3 Fix bug with comparisons with big endian types 2024-12-12 15:44:49 +00:00
Laytan
cecd7ea0b2 Merge pull request #4572 from GonkieDev/win32_rawinput_typo_fix
Typo in windows rawinput constant's name
2024-12-11 23:02:25 +01:00
GonkieDev
6bcfafc3a8 typo fixed (MOUSE_ATTRIUBTTES_CHANGED -> MOUSE_ATTRIBUTES_CHANGED) 2024-12-11 21:02:43 +00:00
gingerBill
db1b67daba Merge pull request #4558 from thebigtoona/vendor/raylib-add-rcamera-module-bindings
add bindings for rCamera module in vendor/raylib/raylib.odin
2024-12-11 12:32:55 +00:00
gingerBill
954adef2d4 Merge pull request #4570 from laytan/remove-viral-inlining
compiler: remove viral `#force(_no)_inline`
2024-12-11 12:32:47 +00:00
Laytan Laats
c8f0d27cee compiler: remove viral #force(_no)_inline
If a procedure was marked `#force_no_inline`, any procedure calls within
it would also implicitly be. This is not expected for multiple reasons:

1. `#force(_no)_inline` on a call expr works differently than on a procedure literal.
2. Adding the attribute on it and every called proc blows up the amount
   of work for the inliner pass and may increase the time it takes.
3. Putting `#force_no_inline` on a procedure to keep executable size
   down (like we do for some map procedures), benchmark it, or find it in
   asm/ir has the added effect of slowing those procedures down significantly
   and not representing truth.
2024-12-09 19:12:42 +01:00
gingerBill
67720e3a9d Merge pull request #4567 from 2nafish117/dxgi-multipointer-usage
change pointer arg to multipointer in GetDisplayModeList and GetDisplayModeList1
2024-12-09 17:10:06 +00:00
shashank
d02f575561 change pointer arg to multipointer in GetDisplayModeList and GetDisplayModeList1 2024-12-08 21:41:01 +05:30