diegomura / diegomura/react-pdf

breaks can cause infinite loop / memory leak on node

Open
#3,232 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
TypeScript
Stars
16.8k
Forks
1.3k
Avg merge
5h 6m
Merged PRs (30d)
52

Description

**Describe the bug**
When applying a break to a certain element it causes an infinite loop, and even a memory heap crash with sufficiently large enough PDFs

```
<--- Last few GCs --->

[84744:0x75680c000] 159800 ms: Scavenge (reduce) (interleaved) 3612.7 (3632.6) -> 3612.7 (3617.9) MB, pooled: 0 MB, 0.62 / 0.00 ms (average mu = 0.836, current mu = 0.874) allocation failure;
[84744:0x75680c000] 159859 ms: Mark-Compact (reduce) 4112.9 (4117.7) -> 4109.8 (4116.7) MB, pooled: 0 MB, 5.71 / 0.00 ms (+ 0.2 ms in 0 steps since start of marking, biggest step 0.0 ms, walltime since start of marking 60 ms) (average mu = 0.906, curre

<--- JS stacktrace --->

FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory
----- Native stack trace -----

1: 0x104e35fb4 node::OOMErrorHandler(char const*, v8::OOMDetails const&) [/Users/jonathan/.nvm/versions/node/v22.21.0/bin/node]
2: 0x1050127cc v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, v8::OOMDetails const&) [/Users/jonathan/.nvm/versions/node/v22.21.0/bin/node]
3: 0x105221ee8 v8::internal::Heap::stack() [/Users/jonathan/.nvm/versions/node/v22.21.0/bin/node]
4: 0x105220288 v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [/Users/jonathan/.nvm/versions/node/v22.21.0/bin/node]
5: 0x1051a9718 v8::internal::StackGuard::HandleInterrupts(v8::internal::StackGuard::InterruptLevel) [/Users/jonathan/.nvm/versions/node/v22.21.0/bin/node]
6: 0x105613900 v8::internal::Runtime_StackGuard(int, unsigned long*, v8::internal::Isolate*) [/Users/jonathan/.nvm/versions/node/v22.21.0/bin/node]
7: 0x105ad5af4 Builtins_CEntry_Return1_ArgvOnStack_NoBuiltinExit [/Users/jonathan/.nvm/versions/node/v22.21.0/bin/node]
8: 0x105ab071c Builtins_ObjectAssign [/Users/jonathan/.nvm/versions/node/v22.21.0/bin/node]
9: 0x1105b237c
10: 0x1106360ec
11: 0x110636168
12: 0x110636168
13: 0x110636168
14: 0x110636168
15: 0x110636168
16: 0x1104b244c
17: 0x110732550
18: 0x1106f8350
19: 0x105a40ef0 Builtins_InterpreterEntryTrampoline [/Users/jonathan/.nvm/versions/node/v22.21.0/bin/node]
20: 0x105a40ef0 Builtins_InterpreterEntryTrampoline [/Users/jonathan/.nvm/versions/node/v22.21.0/bin/node]
21: 0x1104db770
22: 0x105a7d290 Builtins_AsyncFunctionAwaitResolveClosure [/Users/jonathan/.nvm/versions/node/v22.21.0/bin/node]
23: 0x105b484d8 Builtins_PromiseFulfillReactionJob [/Users/jonathan/.nvm/versions/node/v22.21.0/bin/node]
24: 0x105a6d594 Builtins_RunMicrotasks [/Users/jonathan/.nvm/versions/node/v22.21.0/bin/node]
25: 0x105a3eaf4 Builtins_JSRunMicrotasksEntry [/Users/jonathan/.nvm/versions/node/v22.21.0/bin/node]
26: 0x105179db0 v8::internal::(anonymous namespace)::Invoke(v8::internal::Isolate*, v8::internal::(anonymous namespace)::InvokeParams const&) [/Users/jonathan/.nvm/versions/node/v22.21.0/bin/node]
27: 0x10517a658 v8::internal::(anonymous namespace)::InvokeWithTryCatch(v8::internal::Isolate*, v8::internal::(anonymous namespace)::InvokeParams const&) [/Users/jonathan/.nvm/versions/node/v22.21.0/bin/node]
28: 0x10517a790 v8::internal::Execution::TryRunMicrotasks(v8::internal::Isolate*, v8::internal::MicrotaskQueue*) [/Users/jonathan/.nvm/versions/node/v22.21.0/bin/node]
29: 0x1051a79b4 v8::internal::MicrotaskQueue::RunMicrotasks(v8::internal::Isolate*) [/Users/jonathan/.nvm/versions/node/v22.21.0/bin/node]
30: 0x1051a8138 v8::internal::MicrotaskQueue::PerformCheckpoint(v8::Isolate*) [/Users/jonathan/.nvm/versions/node/v22.21.0/bin/node]
31: 0x104d359dc node::InternalCallbackScope::Close() [/Users/jonathan/.nvm/versions/node/v22.21.0/bin/node]
32: 0x104d35484 node::InternalCallbackScope::~InternalCallbackScope() [/Users/jonathan/.nvm/versions/node/v22.21.0/bin/node]
33: 0x104e3a1e8 node::fs::FileHandle::CloseReq::Resolve() [/Users/jonathan/.nvm/versions/node/v22.21.0/bin/node]
34: 0x104e55004 node::fs::FileHandle::ClosePromise()::$_0::__invoke(uv_fs_s*) [/Users/jonathan/.nvm/versions/node/v22.21.0/bin/node]
35: 0x104e2dd5c node::MakeLibuvRequestCallback::Wrapper(uv_fs_s*) [/Users/jonathan/.nvm/versions/node/v22.21.0/bin/node]
36: 0x105a19aa4 uv__work_done [/Users/jonathan/.nvm/versions/node/v22.21.0/bin/node]
37: 0x105a1d7d4 uv__async_io [/Users/jonathan/.nvm/versions/node/v22.21.0/bin/node]
38: 0x105a31b6c uv__io_poll [/Users/jonathan/.nvm/versions/node/v22.21.0/bin/node]
39: 0x105a1dd3c uv_run [/Users/jonathan/.nvm/versions/node/v22.21.0/bin/node]
40: 0x104d36518 node::SpinEventLoopInternal(node::Environment*) [/Users/jonathan/.nvm/versions/node/v22.21.0/bin/node]
41: 0x104e80bb8 node::NodeMainInstance::Run() [/Users/jonathan/.nvm/versions/node/v22.21.0/bin/node]
42: 0x104df0c44 node::Start(int, char**) [/Users/jonathan/.nvm/versions/node/v22.21.0/bin/node]
43: 0x18768dd54 start [/usr/lib/dyld]
```

**To Reproduce**
See https://github.com/JonathanVelkeneers/react-pdf-memleak-example
for example code

**Expected behavior**
No crash or infinite hanging code, just a pagebreak at the element

**Desktop (please complete the following information):**

- MacOS 26
- Node 22
- @react-pdf/renderer 4.3.1

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.