[poppler] splash/Splash.cc splash/SplashPath.cc
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Sat Sep 5 19:41:17 UTC 2020
splash/Splash.cc | 4 +++-
splash/SplashPath.cc | 10 ++++++++--
2 files changed, 11 insertions(+), 3 deletions(-)
New commits:
commit c47713528f770ac89c90d662aae72c7e48c9497b
Author: Albert Astals Cid <aacid at kde.org>
Date: Sat Sep 5 21:26:37 2020 +0200
addStrokeAdjustHint(): fix crash in out-of-memory situation.
Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=25411
#0 0xf7ef8f19 in [vdso]
#1 0xf7ccdd08 in gsignal (/lib32/libc.so.6+0x2bd08)
#2 0xf7ccf206 in abort (/lib32/libc.so.6+0x2d206)
#3 0xbdb9c2e in grealloc(void*, unsigned int, bool) gdal/poppler/goo/gmem.h:85:5
#4 0xbdd9e11 in greallocn(void*, int, int, bool, bool) gdal/poppler/goo/gmem.h:171:12
#5 0xc012373 in SplashPath::addStrokeAdjustHint(int, int, int, int) gdal/poppler/splash/SplashPath.cc:211:35
#6 0xbfd156f in Splash::makeStrokePath(SplashPath*, double, bool) gdal/poppler/splash/Splash.cc:5987:34
#7 0xbfcaec2 in Splash::strokeWide(SplashPath*, double) gdal/poppler/splash/Splash.cc:2028:13
#8 0xbfc8a4d in Splash::stroke(SplashPath*) /src/gdal/poppler/splash/Splash.cc
Based on patch by Even Rouault
diff --git a/splash/Splash.cc b/splash/Splash.cc
index a020c749..584e65c7 100644
--- a/splash/Splash.cc
+++ b/splash/Splash.cc
@@ -5844,7 +5844,9 @@ SplashPath *Splash::makeStrokePath(SplashPath *path, SplashCoord w, bool flatten
wdy = (SplashCoord)0.5 * w * dy;
// draw the start cap
- pathOut->moveTo(pathIn->pts[i0].x - wdy, pathIn->pts[i0].y + wdx);
+ if (pathOut->moveTo(pathIn->pts[i0].x - wdy, pathIn->pts[i0].y + wdx) != splashOk) {
+ break;
+ }
if (i0 == subpathStart0) {
firstPt = pathOut->length - 1;
}
diff --git a/splash/SplashPath.cc b/splash/SplashPath.cc
index 33216cfb..7c7e8523 100644
--- a/splash/SplashPath.cc
+++ b/splash/SplashPath.cc
@@ -196,7 +196,10 @@ SplashError SplashPath::close(bool force)
return splashErrNoCurPt;
}
if (force || curSubpath == length - 1 || pts[length - 1].x != pts[curSubpath].x || pts[length - 1].y != pts[curSubpath].y) {
- lineTo(pts[curSubpath].x, pts[curSubpath].y);
+ const auto lineToStatus = lineTo(pts[curSubpath].x, pts[curSubpath].y);
+ if (lineToStatus != splashOk) {
+ return lineToStatus;
+ }
}
flags[curSubpath] |= splashPathClosed;
flags[length - 1] |= splashPathClosed;
@@ -208,7 +211,10 @@ void SplashPath::addStrokeAdjustHint(int ctrl0, int ctrl1, int firstPt, int last
{
if (hintsLength == hintsSize) {
hintsSize = hintsLength ? 2 * hintsLength : 8;
- hints = (SplashPathHint *)greallocn(hints, hintsSize, sizeof(SplashPathHint));
+ hints = (SplashPathHint *)greallocn_checkoverflow(hints, hintsSize, sizeof(SplashPathHint));
+ }
+ if (unlikely(!hints)) {
+ return;
}
hints[hintsLength].ctrl0 = ctrl0;
hints[hintsLength].ctrl1 = ctrl1;
More information about the poppler
mailing list