v0.1.0
What's Changed
- Track the backlog in GitHub Issues by @nathanpond in #1
- Count how deep one picture is inside another by @nathanpond in #59
- Give feature work a label of its own by @nathanpond in #72
- Draw the line a series tends towards by @nathanpond in #78
- Say how far the numbers might be out by @nathanpond in #79
- Hang the lines a chart drops from its points by @nathanpond in #81
- Put a title and a legend where the chart asks by @nathanpond in #84
- Paint a stock chart's bars in the colours it asks for by @nathanpond in #85
- Give a chart title the weight Word gives it by @nathanpond in #86
- Lay a sized legend into the box it is given by @nathanpond in #88
- Wrap a legend's name to the box it is given by @nathanpond in #92
- Wrap a legend up a side, and give the plot back what it saves by @nathanpond in #93
- Charts: a sized legend of several entries, and the ones it drops by @nathanpond in #94
- Charts: read c:view3D and the three-dimensional plot elements by @nathanpond in #105
- Charts: an instrument for finding a projected 3-D box's corners by @nathanpond in #107
- Charts: separate what a 3-D projection measures in from what it does not by @nathanpond in #111
- Charts: c:hPercent, and what its absence means by @nathanpond in #112
- Charts: how a value becomes a height inside the 3-D box by @nathanpond in #115
- Charts: how Word shades a 3-D bar's faces, and fills the walls and floor by @nathanpond in #117
- Charts: a 3-D scene does not fill its plot rectangle by @nathanpond in #118
- Say that a linked branch closes its issue on merge by @nathanpond in #119
- Charts: find gridlines in Word's raster as lines, not as pixels by @nathanpond in #121
- Charts: thicker gridlines, and the floor's convergence as a scale-free measure by @nathanpond in #122
- Charts: the 3-D scene's depth does not follow c:depthPercent by @nathanpond in #123
- Charts: four more depths, and how far the depth keeps step by @nathanpond in #124
- Charts: make the gridline reading hold still when the settings move by @nathanpond in #125
- Make the floor's gridlines meet where they must by @nathanpond in #127
- Measure what a reading off a 3-D plot is worth, not just how repeatable it is by @nathanpond in #128
- Find where the convergence's error actually is by @nathanpond in #130
- Try both ways of beating the convergence's conditioning, and fail by @nathanpond in #131
- Pin what a 3-D bar's footprint is, without a projection to check it against by @nathanpond in #132
- A category is a unit of width and a series is a unit of depth by @nathanpond in #134
- The multi-bar rule needed no amendment; the box was wrong by @nathanpond in #135
- The box is ceil(n/2) units tall by @nathanpond in #136
- The box's height is half its width and depth together by @nathanpond in #137
- There is no rotation order, because there is no rotation by @nathanpond in #138
- Perspective is a different projection, not the square one with a divide by @nathanpond in #139
- The rotation for rAngAx=0, read where nothing has to be fitted by @nathanpond in #140
- The perspective camera, measured to closed form and implemented by @nathanpond in #142
- The right-angle projection: oblique, margined, and fitted to its rectangle by @nathanpond in #161
- The room a 3-D plot stands in: walls, floor and the gridlines on them by @nathanpond in #162
- The depth axis, and where the groupings put the series by @nathanpond in #164
- The boxes: shaded faces, painted back to front, negatives and all by @nathanpond in #165
- The three-dimensional pie: sectors, rim, and what the schema will not turn by @nathanpond in #167
- 3-D line and area as ribbons in depth by @nathanpond in #168
- A surface is a different plot, and saying so beats faking a line by @nathanpond in #169
- Forty-six more pages of the deep camera, and three ideas ruled out by @nathanpond in #170
- The faces a document carries now render it by @nathanpond in #172
- The navigation pane gets its tree by @nathanpond in #173
- Word does not compose the jamo, and the leading was never the em's by @nathanpond in #174
- A drawing's clips are honoured, and Word's player measured to the point by @nathanpond in #175
- Tight and through wrap follow the polygon, not the box by @nathanpond in #176
- Shapes turn, fill, shade and fit themselves, each law measured by @nathanpond in #177
- PDF/A-2b, claimed and validated by the tool an archive would run by @nathanpond in #178
- The PDFs are tagged: a structure tree in reading order, alt text, language by @nathanpond in #179
- The net under the decoders now catches what the audit saw escape by @nathanpond in #180
- The parser's recursive walks are bounded, so no document overflows the stack by @nathanpond in #187
- Tier 2: bound every unbounded allocation and hang in the decoders and parsers by @nathanpond in #188
- The font engine costs a hostile face its shaping, never the conversion by @nathanpond in #189
- The cmap parser is bounded, so a crafted subtable neither OOMs nor hangs by @nathanpond in #190
- Tier 3: a malformed image costs its own placement, not the conversion by @nathanpond in #191
- Tier 3: the remaining aborts and malformed output, across PNG, TIFF, packaging, layout and the writer by @nathanpond in #206
- Harden the newly-audited Packaging, Ooxml, Text, Layout and Fonts surfaces by @nathanpond in #207
- Tier 4: wrong output and parser differentials by @nathanpond in #208
- Tier 5: the latent lows, and the fuzzer the hardening was building toward by @nathanpond in #212
- Close the crafted-input quadratic scans (#209-#216, #219) by @nathanpond in #235
- Cut the happy-path recompute and allocation churn (tier 6, #217-#227) by @nathanpond in #236
- Semgrep CI #2 — advisory static-analysis workflow (SARIF to code scanning) by @nathanpond in #237
- Semgrep CI #3 — custom threat-model rules with fixtures by @nathanpond in #238
- Semgrep CI #4 — diff-aware PR scanning + suppression policy by @nathanpond in #239
- Semgrep CI #5 — documentation (README + CLAUDE.md) by @nathanpond in #240
- Semgrep CI #6 — flip high/critical to blocking (baseline cleared) by @nathanpond in #242
- Cap axis mark count against a hostile chart (#241) by @nathanpond in #243
- #141 round 1 — rebuild the deep-camera fitter, find the 4th DOF (issue stays open) by @nathanpond in #244
- Fix the #141 deep-camera fitter's page index (retract the spurious 4th param) by @nathanpond in #245
- #141: deep-perspective camera — width-fill, deep offsets (ex + depth-aware ey), floor-F, new probe by @nathanpond in #246
- #248: the corner finder is sound; the deep-page floor is Word's raster, not the fitting by @nathanpond in #249
- #247: the third regime — corner-on verified by symmetry, rotX≥45 shown synthetic by @nathanpond in #250
- #77: close the 3-D chart epic — record it in the scope as built by @nathanpond in #251
- #95: an unreadable chart keeps its frame, so the document below does not reflow by @nathanpond in #252
- Derive the 3-D pie's explosion rescale (#166 explosion strand) by @nathanpond in #253
- Derive the 3-D pie's perspective as a projected camera (#166 perspective strand) by @nathanpond in #254
- Make the 3-D pie respond to hPercent (#166 thickness strand) by @nathanpond in #255
- Paint the 3-D pie's rim as a lit cylinder wall (#166 rim-gradient strand) by @nathanpond in #256
- Build the two-slice boundary probe (#166 sector-pinch instrument) by @nathanpond in #257
- Densify the two-slice probe; sector-redistribution resists a closed form (#166) by @nathanpond in #258
- README: the 3-D pie's projective laws are derived, not fitted (#166) by @nathanpond in #259
- README: record the feature-completeness work in the scope (#60) by @nathanpond in #260
- Record #163's resolution in the clustered-box remarks by @nathanpond in #261
- Pin CI actions to commit SHAs and add Dependabot for Actions (#270) by @nathanpond in #273
- Add CodeQL analysis in CI, alongside Semgrep (#268) by @nathanpond in #275
- Checked arithmetic across the library: kill the integer-overflow class (#266) by @nathanpond in #276
- Add SECURITY.md and a written threat model (#269) by @nathanpond in #277
- Thread a CancellationToken through the conversion (#267) by @nathanpond in #279
- Property-based invariant tests for the untrusted entry points (#272) by @nathanpond in #280
- Coverage-guided fuzzing harnesses (SharpFuzz) for the untrusted decoders (#263) by @nathanpond in #281
- Continuous fuzzing in CI: nightly SharpFuzz/libFuzzer, and its first finding fixed (#264, #282) by @nathanpond in #283
- Differential fuzz oracle for the image and font decoders (#265) by @nathanpond in #284
- release.yml: NuGet trusted publishing (OIDC) instead of a stored key (#61, #271) by @nathanpond in #285
New Contributors
- @nathanpond made their first contribution in #1
Full Changelog: https://github.com/nathanpond/n8PDF/commits/v0.1.0