svg_loader SvgPath: Skip invalid path
authorJunsuChoi <jsuya.choi@samsung.com>
Mon, 12 Jul 2021 02:55:33 +0000 (11:55 +0900)
committerJunsuChoi <jsuya.choi@samsung.com>
Tue, 13 Jul 2021 00:37:19 +0000 (09:37 +0900)
If the d attribute of SVG path is not parsed through _nextCommand(),
it is regarded as an invalid data.

src/loaders/svg/tvgSvgPath.cpp

index a962cd2..1c8538f 100644 (file)
@@ -286,7 +286,7 @@ static int _numberCount(char cmd)
 }
 
 
-static void _processCommand(Array<PathCommand>* cmds, Array<Point>* pts, char cmd, float* arr, int count, Point* cur, Point* curCtl, Point* startPoint, bool *isQuadratic)
+static bool _processCommand(Array<PathCommand>* cmds, Array<Point>* pts, char cmd, float* arr, int count, Point* cur, Point* curCtl, Point* startPoint, bool *isQuadratic)
 {
     switch (cmd) {
         case 'm':
@@ -449,9 +449,10 @@ static void _processCommand(Array<PathCommand>* cmds, Array<Point>* pts, char cm
             break;
         }
         default: {
-            break;
+            return false;
         }
     }
+    return true;
 }
 
 
@@ -525,7 +526,7 @@ bool svgPathToTvgPath(const char* svgPath, Array<PathCommand>& cmds, Array<Point
     while ((path[0] != '\0')) {
         path = _nextCommand(path, &cmd, numberArray, &numberCount);
         if (!path) break;
-        _processCommand(&cmds, &pts, cmd, numberArray, numberCount, &cur, &curCtl, &startPoint, &isQuadratic);
+        if (!_processCommand(&cmds, &pts, cmd, numberArray, numberCount, &cur, &curCtl, &startPoint, &isQuadratic)) break;
     }
 
     setlocale(LC_NUMERIC, curLocale);