summaryrefslogtreecommitdiff
path: root/src/svg
Commit message (Collapse)AuthorAgeFilesLines
* Work around uninitialized variable in QRadialGradientLars Knoll2020-09-121-1/+1
| | | | | | | | Specify the focal radius explicitly to avoid an uninitialized variable in QGradient. Change-Id: I40e44579e2364862a8bc23ef54a9e858c4ba837a Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Change classification of XSVG LicenseKai Koehne2020-09-071-2/+3
| | | | | | | | | | | | [ChangeLog][Third-Party Code] XSVG license was re-classified to HPND-sell-variant, "Historical Permission Notice and Disclaimer - sell variant" https://spdx.org/licenses/HPND-sell-variant.html Pick-to: 5.15 Pick-to: 5.12 Change-Id: Icff6d7f072f0d4b64bd1c5ce703c8c007184ad8a Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* Use OpenType font weightsJonas Karlsson2020-08-284-51/+14
| | | | | | Task-number: QTBUG-42248 Change-Id: If3984fa22b89a65fd126d42b3a2320d5ab16c94b Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
* Avoid recursion when inflating compressed svgsEirik Aavitsland2020-08-281-10/+14
| | | | | | | | | | | Avoid the possibility of recursion loop for corrupt compressed files, and generally simplify the code, particularly the handling of the QT_NO_COMPRESS flag. Pick-to: 5.15 5.12 Change-Id: Ic21a4814a45c4303cc366152be65ae54fa973461 Reviewed-by: Robert Loehning <robert.loehning@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Implement basic format check also for compressed svgsEirik Aavitsland2020-08-271-6/+19
| | | | | | | | | | | | | | | | For uncompressed files, QSvgIOhandler::canRead() will reject any file that does not start out with a svg or xml tag. That rudimentary check was never done for compressed files (svgz). Implement the check during the decompressing itself, so that we can fail early and not waste time and memory decompressing potentially huge files that are anyway not valid svgs. Fixes: oss-fuzz-24611 Pick-to: 5.15 5.12 Change-Id: I154efd8adafe7f09307e8b28a66b536539b1e4bd Reviewed-by: Robert Loehning <robert.loehning@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Don't return partially inflated QByteArrayRobert Loehning2020-08-261-1/+1
| | | | | | | | | | We're already stopping the extraction because we're running out of memory. It's no use to return this provisional result. Pick-to: 5.12 5.15 Task-number: oss-fuzz-24611 Change-Id: Iea5a65a0f30b7a03c5405017c21cd9495a7c2971 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Initialize QSvgHandler with QBuffer instead of QByteArrayRobert Loehning2020-08-241-1/+4
| | | | | | | | | Reduces memory consumption significantly for huge files. Fixes: oss-fuzz-24347 Pick-to: 5.15 Change-Id: Iebf58d5f73030336d219ad770e1d1d2798c10067 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Fix check against division by zeroRobert Loehning2020-08-181-4/+5
| | | | | | | | | | The squared values must not be zero. Since both are qreal, this can happen even when neither of them is zero itself. Fixes: oss-fuzz-24738 Pick-to: 5.12 5.15 Change-Id: I61b2bc891e7e3831d4b6ee68b467db28c4f877d4 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Don't divide by zeroRobert Loehning2020-08-041-0/+2
| | | | | | | Fixes: oss-fuzz-24308 Pick-to: 5.15 5.12 Change-Id: I628f073cc2ec99b18333d2831c53cd888ebc5780 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
* Use qFuzzyIsNull instead of isEmpty() on QRectFRobert Loehning2020-07-301-1/+1
| | | | | | | | | | Avoids an integer overflow in QOutlineMapper Fixes: oss-fuzz-24131 Pick-to: 5.12 5.15 Change-Id: I77a280640df4971e440d3f8888d2e7036a1f2e6a Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
* Avoid endless recursion in SvgStructureNode::boundsRobert Loehning2020-07-302-2/+8
| | | | | | | Fixes: oss-fuzz-24028 Pick-to: 5.12 5.15 Change-Id: I2ddfcd494747f2857d56ce54bc9c4ee3f986ac3e Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
* Avoid endless recursion when inflating gzipRobert Loehning2020-07-291-3/+5
| | | | | | | Fixes: oss-fuzz-24146 Pick-to: 5.12 5.15 Change-Id: I52a974e6a0694fb4afb50d932b2e99917c3034b2 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Return nullptr instead of 0Robert Loehning2020-07-241-1/+1
| | | | | | Pick-to: 5.12 5.15 Change-Id: I200214f90ce399034dabc61b00d20f7def8d923d Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Fix support for pattern brushes in svg generatorEirik Aavitsland2020-07-211-1/+1
| | | | | | | | | A typo had left a stray semicolon in the id string. Fixes: QTBUG-84607 Pick-to: 5.15 Change-Id: I8bd3e68ec2184a238ea949d555f88abb14cff2dc Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* Don't divide by zeroVolker Hilsheimer2020-07-171-0/+3
| | | | | | | | Fixes: oss-fuzz-23731 Pick-to: 5.15 5.12 Change-Id: Ib21a32a30f7a204d263e6710f17567d91c6aae79 Reviewed-by: Robert Loehning <robert.loehning@qt.io> Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Fix stack overflow in dtor of QSvgTinyDocumentRobert Loehning2020-07-151-1/+10
| | | | | | | | | | Add a maximum to how many unfinished elements will be parsed by QSvgHandler. Fixes: oss-fuzz-24000 Pick-to: 5.15 5.12 Change-Id: I4cea0500d2bc503d2c509d091300dd1117170299 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Port QtSvg from QStringRef to QStringViewKarsten Heimrich2020-07-023-176/+138
| | | | | | | Task-number: QTBUG-84319 Change-Id: I6358030d1d7e0e023453edea10da535707320ea4 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Remove QXmlStreamStringRef usage hereLars Knoll2020-07-022-10/+10
| | | | | | | Simply using a QString is easier. Change-Id: I4088a2230a926fc125e3444da2a3763ce1317ce3 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Doc: Update docs with cmake package informationNico Vertriest2020-06-251-0/+1
| | | | | | Task-number: QTBUG-85179 Change-Id: I109466030fe0beddc9706229659a2d775f4262d1 Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* Add ; to Q_UNUSEDLars Schmertmann2020-06-231-5/+5
| | | | | | | | | This is required to remove the ; from the macro with Qt 6. Task-number: QTBUG-82978 Change-Id: I24cc0f6735ddd8fb2444bc3bb4e7b202e8bbb43f Reviewed-by: Edward Welbourne <edward.welbourne@qt.io> Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io>
* Add error handling to color parsingAllan Sandfeld Jensen2020-06-231-19/+22
| | | | | | | | | | Also fixes undefined shift of negative values. Fixes oss-fuzz 23644 Pick-to: 5.15 5.12 Change-Id: I08c998ebf2217cb8dc50fcb805603e01e67ad64b Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Fix stack overflow in QSvgHandler::resolveGradientsAllan Sandfeld Jensen2020-06-232-5/+7
| | | | | | | | | | Add a maximum to how deep it will nest. Fixes oss-fuzz 23643 Pick-to: 5.15 5.12 Change-Id: I6183c04f65a539a6c7df42bc7346a86ee58aca6c Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Fix oom in QSvgTinyDocument::loadAllan Sandfeld Jensen2020-06-231-0/+6
| | | | | | | | | | | Avoid overflowing the size integer. Fixes ozz-fuzz 23606 Pick-to: 5.15 5.12 Change-Id: Iaae2c1e78e59737bba0e34791de4a3a92677f319 Reviewed-by: Robert Loehning <robert.loehning@qt.io> Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Use QRect::isEmpty instead of QRect::isNullAllan Sandfeld Jensen2020-06-221-5/+5
| | | | | | | | | | | Otherwise we can end up processing empty rects, and get divisions by zero. Fixes oss-fuzz issue 23633. Pick-to: 5.15 5.12 Change-Id: I0415462712792cb6a00eadd510b1688e859c419c Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Handle empty rectsAllan Sandfeld Jensen2020-06-221-10/+15
| | | | | | | | | | | | Avoids a division by zero, also we don't appear to support auto sizes, so width and height are required attributes. Fixes oss-fuzz issue 23588. Pick-to: 5.15 5.12 Change-Id: Ib3474c2ed4409977f6ffcf73088956c6c59ce4ad Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> Reviewed-by: Robert Loehning <robert.loehning@qt.io>
* Use QList instead of QVectorJarek Kobus2020-06-087-32/+32
| | | | | | Task-number: QTBUG-84469 Change-Id: I8c3e80c77422abeb23fff747bf4ca479ff0d35b3 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Move QSvgWidget and QGraphicsSvgItem into separate moduleVolker Hilsheimer2020-05-298-764/+1
| | | | | | | | Long live QtSvgWidgets. This makes QtSvg independent of QtWidgets. Fixes: QTBUG-41884 Change-Id: I421d27d35b651ee8cdf1a5280d5594b82359ddab Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Remove QTextCodec dependency from QtSvgLars Knoll2020-05-151-4/+0
| | | | | | | QTextStream writes in UTF-8 by default now anyway. Change-Id: Idb94484b888bfe21231fe3f34b33eaab1d33ef78 Reviewed-by: Maurice Kalinowski <maurice.kalinowski@qt.io>
* Merge remote-tracking branch 'origin/5.15' into devQt Forward Merge Bot2020-03-213-5/+8
|\ | | | | | | Change-Id: I3b34cd3eea8dba0047a8eebe36f3caeef0195069
| * Merge remote-tracking branch 'origin/5.14' into 5.15v5.15.0-beta4v5.15.0-beta3Qt Forward Merge Bot2020-03-183-5/+8
| |\ | | | | | | | | | Change-Id: Ic4b8abc44f58b3d5d34cddf2743d0d172df4a374
| | * Strip the quotes around the font familyAndy Shaw2020-03-103-5/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Due to changes in how QFont handles a family it should be given the whole string without quotes so it can find the family name correctly. Additionally, this changes it to use setFamilies instead of setFamily to make this more future-proof. Fixes: QTBUG-81926 Change-Id: I659950cf244c1f7a1a5dae6e7b0e136cfe274d47 Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
* | | CMake: Handle zlib dependency correctlyAlexandru Croitor2020-03-062-3/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Unfortunately whenever a module or plugin uses zlib, the .pro file contains a copy-pasted conditional scope when to use system zlib and when to use the Qt bundled zlib. The pro2cmake script handles the linking part, but not the find_package part. We need to explicitly search for the correct package depending on whether system zlib feature is on or off, and also make sure not to search for the system one in case it already exists (can happen in static builds). Change-Id: I9c0d678815e4dc0f8e239c3b4667a375aeb757c1 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | | Merge remote-tracking branch 'origin/5.15' into devSimon Hausmann2020-03-051-2/+2
|\ \ \ | |/ / | | | | | | Change-Id: I4bbe7513984fe00c90e5fa897c9eebab61d1dc5e
| * | Use Qt::SplitBehavior in preference to QString::SplitBehaviorEdward Welbourne2020-03-021-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | The Qt version was added in 5.14 "for use as eventual replacement for QString::SplitBehavior." Move another step closer to that goal. Change-Id: Ieabf1eeb03b682f06344d0373de036f8f4534042 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | | Merge remote-tracking branch 'origin/5.15' into devSimon Hausmann2020-03-022-1/+18
|\ \ \ | |/ / | | | | | | | | | | | | | | | Conflicts: examples/svg/svg.pro Change-Id: I186ffe58bd314b505060b2ef5b090503d5a59618
| * | Merge remote-tracking branch 'origin/5.14' into 5.15Qt Forward Merge Bot2020-02-292-1/+18
| |\ \ | | |/ | | | | | | Change-Id: Ib7854f4ed3622f8545af5fa323350787229de921
| | * Restrict nested use nodes processedAllan Sandfeld Jensen2020-02-262-1/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | To avoid exponential blow up, limit the number of use nodes processed under a certain depth. This should still allow the common use of many shallow uses, but limit anything dangerous. Change-Id: I3af6dacb61c68350876fb03f056f02a287ea4e33 Fixes: QTBUG-82153 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | | Regenerate qtsvgwip/cmakeAlexandru Croitor2020-02-122-0/+10
| | | | | | | | | | | | | | | | | | Change-Id: I6f444b939e14263a5f9f4ac7fdfcd0f45ccaa453 Reviewed-by: Leander Beernaert <leander.beernaert@qt.io> Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* | | Merge remote-tracking branch 'origin/dev' into wip/cmakeAlexandru Croitor2020-02-129-53/+106
|\ \ \ | | | | | | | | | | | | Change-Id: I35cfe1a52ec4a02dccc0895e3b4a40bd2ffe7295
| * | | Get rid of QMatrixJarek Kobus2020-02-062-33/+0
| |/ / | | | | | | | | | | | | | | | Task-number: QTBUG-81628 Change-Id: I31f5ffeff1e20f2c77a67325e58a0522d25cb1b7 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
| * | Add API to enable opt-in aspect ratio feature in QSvgRendererEirik Aavitsland2020-01-284-1/+47
| | | | | | | | | | | | | | | | | | | | | | | | | | | [ChangeLog][QSvgRenderer] Introduced aspect ratio mode property, so that rendering may be set to preserve the view box aspect ratio. Task-number: QTBUG-81259 Change-Id: I9802788cdaf2c30974c1ffc34ad5b67cdc74ed57 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
| * | Merge remote-tracking branch 'origin/5.14' into 5.15Qt Forward Merge Bot2020-01-281-7/+8
| |\ \ | | |/ | | | | | | Change-Id: I987599c388f414928aabf6a193a8250c27f4f60d
| | * Revert the keep-aspectratio feature for 5.14.1v5.14.15.14.1Eirik Aavitsland2020-01-161-7/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This was introduced as non-optional behavior for 5.14.0, but caused many regressions. This patch reverts that, and instead prepares for introducing it as an opt-in feature in Qt 5.15. [ChangeLog][QSVGRenderer] In Qt 5.14.0, rendering would keep aspect ratio implied by the viewbox, independently of the specified target area. This caused many regressions with existing code, so is reverted now in 5.14.1. The feature will instead be available as an opt-in in Qt 5.15. Task-number: QTBUG-81259 Change-Id: I3efa2db864eb80ee00e8a067e56d9912bab36442 Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
| * | Don't use deprecated QMatrix class anymoreJarek Kobus2020-01-178-30/+67
| | | | | | | | | | | | | | | | | | Task-number: QTBUG-46653 Change-Id: I9944b62141d7054e3935000a819bebc5fd54df6c Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
| * | Merge remote-tracking branch 'origin/5.14' into 5.15Qt Forward Merge Bot2020-01-072-10/+10
| |\ \ | | |/ | | | | | | Change-Id: If6bf34ca3216ab9e0866d8c4eea7c4e92a7f3f4d
| | * Fix yet another viewbox scaling issue, for render to boundsEirik Aavitsland2020-01-032-10/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The recent introduction of keepAspectRation scaling led to wrong output (outside bounds) in the case of an explicitly specified target bounds rect, i.e. QSVGRenderer::render(QPainter *p, QRectF bounds). Fix by reverting to old code path in this case, i.e. allow the user to override the keepAspectRatio behavior by explicitly specifying target bounds. As a driveby, also fix the keepAspectRatio code path in case of a target rect having non-zero x/y coordinates. Now the fix above means that this will never happen in the code as it stands, but it may come in handy later. [ChangeLog][QSVGRenderer] From Qt 5.14.0, normal rendering will keep aspect ratio implied by the viewbox. The render() methods taking an explicit target bounds QRectF parameter can now be used to override that behavior. They will scale the output to the bounds while ignoring aspect ratio, as was the default rendering prior to 5.14.0. Fixes: QTBUG-80888 Change-Id: I399b05ca50d290b8e4b01bdc47b5b6f74c890c9a Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
| * | Fix endl usage to contain prefixes and bump version to 6.0.0Alexandru Croitor2019-12-061-26/+26
| | | | | | | | | | | | | | | | | | Change-Id: Ia10879666a87dc4db596b75cfbf654379e75041b (cherry picked from commit 5c298ef5bea0930b68263ba84194250dbb9d26a9) Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
| * | Avoid initializing QFlags with 0 or nullptrFriedemann Kleint2019-11-251-2/+2
| |/ | | | | | | | | | | | | It is being deprecated. Change-Id: Ia8306d3874dc21d431fcb621e1f487f55b2bed8d Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
| * Re-fix scaling when rendering a specific element by idAlessandro Portale2019-11-141-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a modification of 14fa4591eb34a35cf3d485fd901e3f1e2caa7770 That patch corrected the handling of the view box when rendering an entire SVG document. However, contrary to intention stated in the comment of that patch, it turns out that the new viewbox handling code path can be taken also for the case of rendering only a single element by id. Instead, we want to keep the original behavior where the element's origin bounds are transformed to fit into the user requested target bounds, allowing non-proportional scaling. Since the render-single-element case is easily and uniqely identifiable by the sourceRect parameter being non-null, just add an explicit check for that to the code path branching. Done-with: Eirik Aavitsland <eirik.aavitsland@qt.io> Fixes: QTBUG-79933 Change-Id: I64a35bbb193db22c33670b48ea165a91df8e719e Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
| * QSvgRenderer: Allow to remove a viewBoxAlessandro Portale2019-11-131-1/+1
| | | | | | | | | | | | | | | | | | | | m_implicitViewBox needs to be true if the explicit viewBox is null. That relationship between m_viewBox and m_implicitViewBox can be see in QSvgTinyDocument::viewBox(). Task-number: QTBUG-79933 Change-Id: I6ea5a849479b10117128bcaf1799e3770b145e77 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>