Archived
d3495476f4
El SDK Release / build-and-release (push) Failing after 13m0s
The generated C, amalgams, vendored runtime pins, and compiled binaries from the Claude Code era are removed from the worktree. The El sources survive; this tree is now source-only for the first-principles rebuild. Per Principal direction 2026-08-19.
24 lines
1.3 KiB
Plaintext
24 lines
1.3 KiB
Plaintext
18316:static size_t el_input_len(const char* s) {
|
|
18317- size_t n;
|
|
18318- if (el_bin_lookup(s, &n)) return n;
|
|
18319- /* The FALLBACK is the hazard, not the tagged lookup: a NULL check does not
|
|
18320- * establish that a slot is a pointer, so strlen() on sha256_hex(50000)
|
|
18321- * walked address 50000.
|
|
18322- *
|
|
18323- * But looks_like_heap_obj is the WRONG guard here, and using it shipped a
|
|
18324- * worse defect than the crash it fixed. Its `p & 0x7` test is correct for
|
|
18325- * MALLOC'd tagged objects and false for STRING LITERALS, which the linker
|
|
18326- * places at any alignment -- measured, 3 of 5 literals misaligned. So
|
|
18327- * el_input_len silently returned 0 for most literals, and which ones
|
|
18328- * depended on link layout. The test passed only because "abc" happened to
|
|
18329- * land on an 8-boundary in that build.
|
|
18330- *
|
|
18331- * A string may be unaligned. What it may not be is a small integer or a
|
|
18332- * low address. Check exactly that, and nothing more. */
|
|
18333- el_val_t sv = (el_val_t)(uintptr_t)s;
|
|
18334- if (sv == 0) return 0;
|
|
18335- if (sv > -0x10000 && sv < 0x10000) return 0; /* small ints */
|
|
18336- if ((uintptr_t)sv < 0x10000) return 0; /* low addresses */
|
|
18337- return strlen(s);
|
|
18338-}
|