mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-01-31 03:27:39 +00:00
Fix C stack remaining check in MODE=tiny
This commit is contained in:
parent
bcdd5c5f74
commit
28b9d9f781
5 changed files with 11 additions and 7 deletions
|
@ -121,6 +121,13 @@ extern char ape_stack_align[] __attribute__((__weak__));
|
|||
vAddr; \
|
||||
})
|
||||
|
||||
/**
|
||||
* Returns true if at least `n` bytes of stack are available.
|
||||
*/
|
||||
#define HaveStackMemory(n) \
|
||||
(IsTiny() || \
|
||||
(intptr_t)__builtin_frame_address(0) >= GetStackAddr() + PAGESIZE * (n))
|
||||
|
||||
COSMOPOLITAN_C_END_
|
||||
#endif /* GNU ELF */
|
||||
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
||||
|
|
|
@ -124,9 +124,6 @@ res, err = DecodeJson([[
|
|||
{"k":{"k":{"k":{"k":0}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
|
||||
}}}}}}}}}
|
||||
]])
|
||||
if not res then
|
||||
print('wut', err)
|
||||
end
|
||||
assert(res)
|
||||
|
||||
-- 64 objects
|
||||
|
|
3
third_party/lua/luaencodejsondata.c
vendored
3
third_party/lua/luaencodejsondata.c
vendored
|
@ -18,6 +18,7 @@
|
|||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "libc/assert.h"
|
||||
#include "libc/bits/bits.h"
|
||||
#include "libc/bits/likely.h"
|
||||
#include "libc/fmt/itoa.h"
|
||||
#include "libc/intrin/kprintf.h"
|
||||
#include "libc/log/log.h"
|
||||
|
@ -165,7 +166,7 @@ static int SerializeTable(lua_State *L, char **buf, int idx,
|
|||
int rc;
|
||||
bool isarray;
|
||||
lua_Unsigned n;
|
||||
if ((intptr_t)__builtin_frame_address(0) < GetStackAddr() + PAGESIZE * 2) {
|
||||
if (UNLIKELY(!HaveStackMemory(PAGESIZE))) {
|
||||
z->reason = "out of stack";
|
||||
return -1;
|
||||
}
|
||||
|
|
2
third_party/lua/luaencodeluadata.c
vendored
2
third_party/lua/luaencodeluadata.c
vendored
|
@ -336,7 +336,7 @@ static int SerializeTable(lua_State *L, char **buf, int idx,
|
|||
struct Serializer *z, int depth) {
|
||||
int rc;
|
||||
intptr_t rsp, bot;
|
||||
if ((intptr_t)__builtin_frame_address(0) < GetStackAddr() + PAGESIZE * 2) {
|
||||
if (UNLIKELY(!HaveStackMemory(PAGESIZE))) {
|
||||
z->reason = "out of stack";
|
||||
return -1;
|
||||
}
|
||||
|
|
|
@ -50,8 +50,7 @@ static struct DecodeJson Parse(struct lua_State *L, const char *p,
|
|||
if (UNLIKELY(!depth)) {
|
||||
return (struct DecodeJson){-1, "maximum depth exceeded"};
|
||||
}
|
||||
if (UNLIKELY((intptr_t)__builtin_frame_address(0) <
|
||||
GetStackAddr() + PAGESIZE * 2)) {
|
||||
if (UNLIKELY(!HaveStackMemory(PAGESIZE))) {
|
||||
return (struct DecodeJson){-1, "out of stack"};
|
||||
}
|
||||
for (a = p, d = +1; p < e;) {
|
||||
|
|
Loading…
Reference in a new issue