Commit 688ffff
committed
Fix segfault: replace QUANTIZE macro with static inline function
The QUANTIZE macro introduced in the rainflow.c code review expanded its
second argument three times. Passing `*dh_istream++` as the argument caused
the pointer to advance by 3 on every loop iteration instead of 1, quickly
running past the end of the input array and producing a segfault inside
spread_damage() (both RFC_SD_TRANSIENT_23 and RFC_SD_TRANSIENT_23c cases).
Fix: convert QUANTIZE to a `static inline` function so the value argument
is evaluated exactly once. The safety logic (bounds check for v < class_offset
and overflow guard against UINT_MAX) is preserved.
Applied to both src/lib/rainflow.c and src/python/lib/rainflow.c.
Additional changes in this session:
- CMakeLists.txt: extend debug-flag condition to cover RelWithDebInfo builds
in addition to Debug, so -DDEBUG/-D_DEBUG are set for both.
- src/python/cmake/rfcnt_target_functions.cmake: add per-config output
directory properties (RUNTIME_OUTPUT_DIRECTORY_<CONFIG>) so that Visual
Studio's multi-config generator does not append a config subfolder
(e.g. Debug/, RelWithDebInfo/) to the output path. The .pyd now always
lands in src/python/ regardless of configuration, making it importable
without changing PYTHONPATH.
- src/python/tests/test_rfcnt_npz.py: added test script loading
rfcnt_example.npz, for debugging issues.1 parent 01d90a2 commit 688ffff
8 files changed
Lines changed: 47 additions & 14 deletions
File tree
- src
- lib
- python
- cmake
- lib
- tests
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
11 | | - | |
12 | | - | |
| 11 | + | |
13 | 12 | | |
14 | 13 | | |
15 | 14 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
29 | 29 | | |
30 | 30 | | |
31 | 31 | | |
32 | | - | |
33 | | - | |
| 32 | + | |
| 33 | + | |
34 | 34 | | |
35 | 35 | | |
36 | 36 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
207 | 207 | | |
208 | 208 | | |
209 | 209 | | |
210 | | - | |
211 | | - | |
212 | | - | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
213 | 217 | | |
214 | 218 | | |
215 | 219 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
89 | 89 | | |
90 | 90 | | |
91 | 91 | | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
92 | 96 | | |
93 | 97 | | |
94 | 98 | | |
95 | | - | |
96 | | - | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
97 | 109 | | |
98 | 110 | | |
99 | 111 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
207 | 207 | | |
208 | 208 | | |
209 | 209 | | |
210 | | - | |
211 | | - | |
212 | | - | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
213 | 217 | | |
214 | 218 | | |
215 | 219 | | |
| |||
Binary file not shown.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
| 1 | + | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
0 commit comments