Skip to content

fix(nnsvg): prevent usage of freed NSVGimage - #2471

Merged
Frenzie merged 1 commit into
koreader:masterfrom
tachibana-shin:fix/nnsvg-used-after-free
Aug 2, 2026
Merged

fix(nnsvg): prevent usage of freed NSVGimage#2471
Frenzie merged 1 commit into
koreader:masterfrom
tachibana-shin:fix/nnsvg-used-after-free

Conversation

@tachibana-shin

@tachibana-shin tachibana-shin commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

nnSVGImage_free (lines 88–95) is registered as both :free() and __gc:

*udata = NULL; // line 93: set to NULL after freeing

lua code calls :free() and then accidentally calls :getSize() as well → check_NSVGimage will catch the error instead of crashing due to a dangling pointer


This change is Reviewable

@Frenzie
Frenzie merged commit 1b18868 into koreader:master Aug 2, 2026
3 checks passed
benoit-pierre pushed a commit to benoit-pierre/koreader that referenced this pull request Aug 2, 2026
benoit-pierre added a commit to benoit-pierre/koreader that referenced this pull request Aug 3, 2026
- lunasvg: add pkg-config entry (koreader/koreader-base#2474)
- srell: install header to staging (koreader/koreader-base#2475)
- xxhash: add pkg-config entry (koreader/koreader-base#2476)
- bump crengine, ×4 (koreader/koreader-base#2479):
  * lvimg: fix `LVUnpackedImgSource` destructor (koreader/crengine#689)
  * lvrend: tables: fix padding calculation on min-width (koreader/crengine#692)
  * lvstsheet: update_style_content_property(): fix wrong content length (koreader/crengine#693)
  * lvtextfm: fix memory deallocation (koreader/crengine#694)
  * ci: bump actions (koreader/crengine#697)
  * lvxml: ReadRtfChar: fix charToHex buffer access (koreader/crengine#696)
  * lvtinydom: minor fixes (koreader/crengine#695)
  * hyphman: avoid using cri18n (koreader/crengine#698)
  * fix .gitignore (koreader/crengine#699)
  * miscellaneous cleanups (koreader/crengine#700)
  * chmlib: fix android compilation warning (koreader/crengine#701)
  * lvrefcache.h: initialize fields in LVIndexedRefCache constructor (koreader/crengine#690)
  * minor includes cleanups (koreader/crengine#702)
  * lvarray: fix `LVArray::set` (koreader/crengine#704)
  * lvref: fix `LVRefVec::set` (koreader/crengine#707)
  * hyphman: fix compiler warning [-Wunused-but-set-variable=] (koreader/crengine#705)
  * lvref:  suppress some "maybe-uninitialized" warnings (koreader/crengine#706)
  * CSS: fix font-variant-* handling (koreader/crengine#709)
  * CSS: fix attribute matching with id/name/href, add more length units, fix "rem", add "urem" and "urlh" - (koreader/crengine#710)
  * lvdocview: fix source page numbers with a page-list not in reading order (koreader/crengine#711)
  * proper build system - (koreader/crengine#703)
- einkfb: refresh the screen even when its content has not changed (koreader/koreader-base#2481)
- fix(blitbuffer): memory safety, soft-float overhead, and variable shadowing (koreader/koreader-base#2468)
- fix(wrap-mupdf): prevent integer overflow in allocator (koreader/koreader-base#2472)
- ffi/util: return available space from df, and fix its block maths (koreader/koreader-base#2478)
- fix(input): recompute nfds correctly in clearTimer (koreader/koreader-base#2467)
- fix(djvu): validate page bounds and check errors (koreader/koreader-base#2469)
- fix(nnsvg): prevent usage of freed NSVGimage (koreader/koreader-base#2471)
- fix(xtext): memory safety and input validation fixes (koreader/koreader-base#2473)
- kotasync: fix make reorder code (koreader/koreader-base#2483)
- ffi/downloader: fix range support check (koreader/koreader-base#2484)
- ffi/downloader: improve fetch implementation (koreader/koreader-base#2485)
benoit-pierre added a commit to benoit-pierre/koreader that referenced this pull request Aug 3, 2026
- lunasvg: add pkg-config entry (koreader/koreader-base#2474)
- srell: install header to staging (koreader/koreader-base#2475)
- xxhash: add pkg-config entry (koreader/koreader-base#2476)
- bump crengine, ×4 (koreader/koreader-base#2479):
  * lvimg: fix `LVUnpackedImgSource` destructor (koreader/crengine#689)
  * lvrend: tables: fix padding calculation on min-width (koreader/crengine#692)
  * lvstsheet: update_style_content_property(): fix wrong content length (koreader/crengine#693)
  * lvtextfm: fix memory deallocation (koreader/crengine#694)
  * ci: bump actions (koreader/crengine#697)
  * lvxml: ReadRtfChar: fix charToHex buffer access (koreader/crengine#696)
  * lvtinydom: minor fixes (koreader/crengine#695)
  * hyphman: avoid using cri18n (koreader/crengine#698)
  * fix .gitignore (koreader/crengine#699)
  * miscellaneous cleanups (koreader/crengine#700)
  * chmlib: fix android compilation warning (koreader/crengine#701)
  * lvrefcache.h: initialize fields in LVIndexedRefCache constructor (koreader/crengine#690)
  * minor includes cleanups (koreader/crengine#702)
  * lvarray: fix `LVArray::set` (koreader/crengine#704)
  * lvref: fix `LVRefVec::set` (koreader/crengine#707)
  * hyphman: fix compiler warning [-Wunused-but-set-variable=] (koreader/crengine#705)
  * lvref:  suppress some "maybe-uninitialized" warnings (koreader/crengine#706)
  * CSS: fix font-variant-* handling (koreader/crengine#709)
  * CSS: fix attribute matching with id/name/href, add more length units, fix "rem", add "urem" and "urlh" - (koreader/crengine#710)
  * lvdocview: fix source page numbers with a page-list not in reading order (koreader/crengine#711)
  * proper build system - (koreader/crengine#703)
- einkfb: refresh the screen even when its content has not changed (koreader/koreader-base#2481)
- fix(blitbuffer): memory safety, soft-float overhead, and variable shadowing (koreader/koreader-base#2468)
- fix(wrap-mupdf): prevent integer overflow in allocator (koreader/koreader-base#2472)
- ffi/util: return available space from df, and fix its block maths (koreader/koreader-base#2478)
- fix(input): recompute nfds correctly in clearTimer (koreader/koreader-base#2467)
- fix(djvu): validate page bounds and check errors (koreader/koreader-base#2469)
- fix(nnsvg): prevent usage of freed NSVGimage (koreader/koreader-base#2471)
- fix(xtext): memory safety and input validation fixes (koreader/koreader-base#2473)
- kotasync: fix make reorder code (koreader/koreader-base#2483)
- ffi/downloader: fix range support check (koreader/koreader-base#2484)
- ffi/downloader: improve fetch implementation (koreader/koreader-base#2485)
Frenzie pushed a commit to koreader/koreader that referenced this pull request Aug 3, 2026
- lunasvg: add pkg-config entry (koreader/koreader-base#2474)
- srell: install header to staging (koreader/koreader-base#2475)
- xxhash: add pkg-config entry (koreader/koreader-base#2476)
- bump crengine, ×4 (koreader/koreader-base#2479):
  * lvimg: fix `LVUnpackedImgSource` destructor (koreader/crengine#689)
  * lvrend: tables: fix padding calculation on min-width (koreader/crengine#692)
  * lvstsheet: update_style_content_property(): fix wrong content length (koreader/crengine#693)
  * lvtextfm: fix memory deallocation (koreader/crengine#694)
  * ci: bump actions (koreader/crengine#697)
  * lvxml: ReadRtfChar: fix charToHex buffer access (koreader/crengine#696)
  * lvtinydom: minor fixes (koreader/crengine#695)
  * hyphman: avoid using cri18n (koreader/crengine#698)
  * fix .gitignore (koreader/crengine#699)
  * miscellaneous cleanups (koreader/crengine#700)
  * chmlib: fix android compilation warning (koreader/crengine#701)
  * lvrefcache.h: initialize fields in LVIndexedRefCache constructor (koreader/crengine#690)
  * minor includes cleanups (koreader/crengine#702)
  * lvarray: fix `LVArray::set` (koreader/crengine#704)
  * lvref: fix `LVRefVec::set` (koreader/crengine#707)
  * hyphman: fix compiler warning [-Wunused-but-set-variable=] (koreader/crengine#705)
  * lvref:  suppress some "maybe-uninitialized" warnings (koreader/crengine#706)
  * CSS: fix font-variant-* handling (koreader/crengine#709)
  * CSS: fix attribute matching with id/name/href, add more length units, fix "rem", add "urem" and "urlh" - (koreader/crengine#710)
    Closes #15481.
    Closes #15339.
  * lvdocview: fix source page numbers with a page-list not in reading order (koreader/crengine#711)
  * proper build system - (koreader/crengine#703)
- einkfb: refresh the screen even when its content has not changed (koreader/koreader-base#2481)
- fix(blitbuffer): memory safety, soft-float overhead, and variable shadowing (koreader/koreader-base#2468)
- fix(wrap-mupdf): prevent integer overflow in allocator (koreader/koreader-base#2472)
- ffi/util: return available space from df, and fix its block maths (koreader/koreader-base#2478)
- fix(input): recompute nfds correctly in clearTimer (koreader/koreader-base#2467)
- fix(djvu): validate page bounds and check errors (koreader/koreader-base#2469)
- fix(nnsvg): prevent usage of freed NSVGimage (koreader/koreader-base#2471)
- fix(xtext): memory safety and input validation fixes (koreader/koreader-base#2473)
- kotasync: fix make reorder code (koreader/koreader-base#2483)
- ffi/downloader: fix range support check (koreader/koreader-base#2484)
- ffi/downloader: improve fetch implementation (koreader/koreader-base#2485)
acarpe pushed a commit to acarpe/koreader that referenced this pull request Aug 5, 2026
- lunasvg: add pkg-config entry (koreader/koreader-base#2474)
- srell: install header to staging (koreader/koreader-base#2475)
- xxhash: add pkg-config entry (koreader/koreader-base#2476)
- bump crengine, ×4 (koreader/koreader-base#2479):
  * lvimg: fix `LVUnpackedImgSource` destructor (koreader/crengine#689)
  * lvrend: tables: fix padding calculation on min-width (koreader/crengine#692)
  * lvstsheet: update_style_content_property(): fix wrong content length (koreader/crengine#693)
  * lvtextfm: fix memory deallocation (koreader/crengine#694)
  * ci: bump actions (koreader/crengine#697)
  * lvxml: ReadRtfChar: fix charToHex buffer access (koreader/crengine#696)
  * lvtinydom: minor fixes (koreader/crengine#695)
  * hyphman: avoid using cri18n (koreader/crengine#698)
  * fix .gitignore (koreader/crengine#699)
  * miscellaneous cleanups (koreader/crengine#700)
  * chmlib: fix android compilation warning (koreader/crengine#701)
  * lvrefcache.h: initialize fields in LVIndexedRefCache constructor (koreader/crengine#690)
  * minor includes cleanups (koreader/crengine#702)
  * lvarray: fix `LVArray::set` (koreader/crengine#704)
  * lvref: fix `LVRefVec::set` (koreader/crengine#707)
  * hyphman: fix compiler warning [-Wunused-but-set-variable=] (koreader/crengine#705)
  * lvref:  suppress some "maybe-uninitialized" warnings (koreader/crengine#706)
  * CSS: fix font-variant-* handling (koreader/crengine#709)
  * CSS: fix attribute matching with id/name/href, add more length units, fix "rem", add "urem" and "urlh" - (koreader/crengine#710)
    Closes koreader#15481.
    Closes koreader#15339.
  * lvdocview: fix source page numbers with a page-list not in reading order (koreader/crengine#711)
  * proper build system - (koreader/crengine#703)
- einkfb: refresh the screen even when its content has not changed (koreader/koreader-base#2481)
- fix(blitbuffer): memory safety, soft-float overhead, and variable shadowing (koreader/koreader-base#2468)
- fix(wrap-mupdf): prevent integer overflow in allocator (koreader/koreader-base#2472)
- ffi/util: return available space from df, and fix its block maths (koreader/koreader-base#2478)
- fix(input): recompute nfds correctly in clearTimer (koreader/koreader-base#2467)
- fix(djvu): validate page bounds and check errors (koreader/koreader-base#2469)
- fix(nnsvg): prevent usage of freed NSVGimage (koreader/koreader-base#2471)
- fix(xtext): memory safety and input validation fixes (koreader/koreader-base#2473)
- kotasync: fix make reorder code (koreader/koreader-base#2483)
- ffi/downloader: fix range support check (koreader/koreader-base#2484)
- ffi/downloader: improve fetch implementation (koreader/koreader-base#2485)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants