diff --git a/itext.tests/itext.svg.tests/itext/svg/utils/TransformUtilsTest.cs b/itext.tests/itext.svg.tests/itext/svg/utils/TransformUtilsTest.cs
index 6f14531b1..0acd05cd1 100644
--- a/itext.tests/itext.svg.tests/itext/svg/utils/TransformUtilsTest.cs
+++ b/itext.tests/itext.svg.tests/itext/svg/utils/TransformUtilsTest.cs
@@ -21,6 +21,7 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
using System;
+using iText.Commons.Utils;
using iText.Kernel.Geom;
using iText.Svg.Exceptions;
using iText.Test;
@@ -173,5 +174,29 @@ public virtual void MixedWhiteSpace() {
AffineTransform expected = AffineTransform.GetTranslateInstance(2.25, 0);
NUnit.Framework.Assert.AreEqual(expected, actual);
}
+
+ [NUnit.Framework.Test]
+ public virtual void ParseInvalidRotateTest() {
+ Exception e = NUnit.Framework.Assert.Catch(typeof(SvgProcessingException), () => TransformUtils.ParseTransform
+ ("rotate(text)"));
+ NUnit.Framework.Assert.AreEqual(MessageFormatUtil.Format(SvgExceptionMessageConstant.INVALID_TRANSFORM_VALUE
+ , "text"), e.Message);
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void ParseInvalidSkewXTest() {
+ Exception e = NUnit.Framework.Assert.Catch(typeof(SvgProcessingException), () => TransformUtils.ParseTransform
+ ("skewX(text)"));
+ NUnit.Framework.Assert.AreEqual(MessageFormatUtil.Format(SvgExceptionMessageConstant.INVALID_TRANSFORM_VALUE
+ , "text"), e.Message);
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void ParseInvalidSkewYTest() {
+ Exception e = NUnit.Framework.Assert.Catch(typeof(SvgProcessingException), () => TransformUtils.ParseTransform
+ ("skewY(text)"));
+ NUnit.Framework.Assert.AreEqual(MessageFormatUtil.Format(SvgExceptionMessageConstant.INVALID_TRANSFORM_VALUE
+ , "text"), e.Message);
+ }
}
}
diff --git a/itext/itext.svg/itext/svg/exceptions/SvgExceptionMessageConstant.cs b/itext/itext.svg/itext/svg/exceptions/SvgExceptionMessageConstant.cs
index e577af0ef..5d7e1c199 100644
--- a/itext/itext.svg/itext/svg/exceptions/SvgExceptionMessageConstant.cs
+++ b/itext/itext.svg/itext/svg/exceptions/SvgExceptionMessageConstant.cs
@@ -56,6 +56,8 @@ public sealed class SvgExceptionMessageConstant {
public const String INVALID_TRANSFORM_DECLARATION = "Transformation declaration is not formed correctly.";
+ public const String INVALID_TRANSFORM_VALUE = "Invalid transformation value: {0}";
+
public const String LINE_TO_EXPECTS_FOLLOWING_PARAMETERS_GOT_0 = "(x y)+ parameters are expected for lineTo operator. Got: {0}";
public const String MOVE_TO_EXPECTS_FOLLOWING_PARAMETERS_GOT_0 = "(x y)+ parameters are expected for moveTo operator. Got: {0}";
diff --git a/itext/itext.svg/itext/svg/utils/TransformUtils.cs b/itext/itext.svg/itext/svg/utils/TransformUtils.cs
index 47fd03a38..1c32992bc 100644
--- a/itext/itext.svg/itext/svg/utils/TransformUtils.cs
+++ b/itext/itext.svg/itext/svg/utils/TransformUtils.cs
@@ -203,7 +203,7 @@ private static AffineTransform CreateSkewYTransformation(IList values) {
if (values.Count != 1) {
throw new SvgProcessingException(SvgExceptionMessageConstant.TRANSFORM_INCORRECT_NUMBER_OF_VALUES);
}
- double tan = Math.Tan(MathUtil.ToRadians((float)CssDimensionParsingUtils.ParseFloat(values[0])));
+ double tan = Math.Tan(MathUtil.ToRadians(ParseTransformationValue(values[0])));
//Differs from the notation in the PDF-spec for skews
return new AffineTransform(1, tan, 0, 1, 0, 0);
}
@@ -215,7 +215,7 @@ private static AffineTransform CreateSkewXTransformation(IList values) {
if (values.Count != 1) {
throw new SvgProcessingException(SvgExceptionMessageConstant.TRANSFORM_INCORRECT_NUMBER_OF_VALUES);
}
- double tan = Math.Tan(MathUtil.ToRadians((float)CssDimensionParsingUtils.ParseFloat(values[0])));
+ double tan = Math.Tan(MathUtil.ToRadians(ParseTransformationValue(values[0])));
//Differs from the notation in the PDF-spec for skews
return new AffineTransform(1, 0, tan, 1, 0, 0);
}
@@ -227,7 +227,7 @@ private static AffineTransform CreateRotationTransformation(IList values
if (values.Count != 1 && values.Count != 3) {
throw new SvgProcessingException(SvgExceptionMessageConstant.TRANSFORM_INCORRECT_NUMBER_OF_VALUES);
}
- double angle = MathUtil.ToRadians((float)CssDimensionParsingUtils.ParseFloat(values[0]));
+ double angle = MathUtil.ToRadians(ParseTransformationValue(values[0]));
if (values.Count == 3) {
float centerX = CssDimensionParsingUtils.ParseAbsoluteLength(values[1]);
float centerY = CssDimensionParsingUtils.ParseAbsoluteLength(values[2]);
@@ -294,5 +294,16 @@ private static IList GetValuesFromTransformationString(String transforma
String numbers = transformation.JSubstring(transformation.IndexOf('(') + 1, transformation.IndexOf(')'));
return SvgCssUtils.SplitValueList(numbers);
}
+
+ private static float ParseTransformationValue(String valueStr) {
+ float? valueParsed = CssDimensionParsingUtils.ParseFloat(valueStr);
+ if (valueParsed == null) {
+ throw new SvgProcessingException(MessageFormatUtil.Format(SvgExceptionMessageConstant.INVALID_TRANSFORM_VALUE
+ , valueStr));
+ }
+ else {
+ return (float)valueParsed;
+ }
+ }
}
}
diff --git a/port-hash b/port-hash
index 9c06efa54..31eca6a60 100644
--- a/port-hash
+++ b/port-hash
@@ -1 +1 @@
-13be9701c7d28b13ec07d9b6244825b95f6e62a3
+8d4fbb6308e2126af33891bf5ad981ec9f2fd81b