Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b35da390 authored by Doris Liu's avatar Doris Liu
Browse files

Allow leading spaces in path string (to keep behavior consistent)

Bug: 28132454
Change-Id: Iee799c13a85738db3d6940aca0fe917f284fa651
parent d92e5c31
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -175,7 +175,7 @@ static void setPathString(JNIEnv* env, jobject, jlong pathPtr, jstring inputStr,

    PathParser::ParseResult result;
    PathData data;
    PathParser::getPathDataFromString(&data, &result, pathString, stringLength);
    PathParser::getPathDataFromAsciiString(&data, &result, pathString, stringLength);
    if (result.failureOccurred) {
        doThrowIAE(env, result.failureMessage.c_str());
    }
+2 −2
Original line number Diff line number Diff line
@@ -34,7 +34,7 @@ static void parseStringForPath(JNIEnv* env, jobject, jlong skPathHandle, jstring
    SkPath* skPath = reinterpret_cast<SkPath*>(skPathHandle);

    PathParser::ParseResult result;
    PathParser::parseStringForSkPath(skPath, &result, pathString, strLength);
    PathParser::parseAsciiStringForSkPath(skPath, &result, pathString, strLength);
    env->ReleaseStringUTFChars(inputPathStr, pathString);
    if (result.failureOccurred) {
        doThrowIAE(env, result.failureMessage.c_str());
@@ -56,7 +56,7 @@ static long createPathDataFromStringPath(JNIEnv* env, jobject, jstring inputStr,
    const char* pathString = env->GetStringUTFChars(inputStr, NULL);
    PathData* pathData = new PathData();
    PathParser::ParseResult result;
    PathParser::getPathDataFromString(pathData, &result, pathString, strLength);
    PathParser::getPathDataFromAsciiString(pathData, &result, pathString, strLength);
    env->ReleaseStringUTFChars(inputStr, pathString);
    if (!result.failureOccurred) {
        return reinterpret_cast<jlong>(pathData);
+13 −4
Original line number Diff line number Diff line
@@ -162,7 +162,7 @@ bool PathParser::isVerbValid(char verb) {
            || verb == 's' || verb == 't' || verb == 'v' || verb == 'z';
}

void PathParser::getPathDataFromString(PathData* data, ParseResult* result,
void PathParser::getPathDataFromAsciiString(PathData* data, ParseResult* result,
        const char* pathStr, size_t strLen) {
    if (pathStr == NULL) {
        result->failureOccurred = true;
@@ -171,7 +171,16 @@ void PathParser::getPathDataFromString(PathData* data, ParseResult* result,
    }

    size_t start = 0;
    size_t end = 1;
    // Skip leading spaces.
    while (isspace(pathStr[start]) && start < strLen) {
        start++;
    }
    if (start == strLen) {
        result->failureOccurred = true;
        result->failureMessage = "Path string cannot be empty.";
        return;
    }
    size_t end = start + 1;

    while (end < strLen) {
        end = nextStart(pathStr, strLen, end);
@@ -226,9 +235,9 @@ void PathParser::dump(const PathData& data) {
    ALOGD("points are : %s", os.str().c_str());
}

void PathParser::parseStringForSkPath(SkPath* skPath, ParseResult* result, const char* pathStr, size_t strLen) {
void PathParser::parseAsciiStringForSkPath(SkPath* skPath, ParseResult* result, const char* pathStr, size_t strLen) {
    PathData pathData;
    getPathDataFromString(&pathData, result, pathStr, strLen);
    getPathDataFromAsciiString(&pathData, result, pathStr, strLen);
    if (result->failureOccurred) {
        return;
    }
+2 −2
Original line number Diff line number Diff line
@@ -39,9 +39,9 @@ public:
    /**
     * Parse the string literal and create a Skia Path. Return true on success.
     */
    ANDROID_API static void parseStringForSkPath(SkPath* outPath, ParseResult* result,
    ANDROID_API static void parseAsciiStringForSkPath(SkPath* outPath, ParseResult* result,
            const char* pathStr, size_t strLength);
    ANDROID_API static void getPathDataFromString(PathData* outData, ParseResult* result,
    ANDROID_API static void getPathDataFromAsciiString(PathData* outData, ParseResult* result,
            const char* pathStr, size_t strLength);
    static void dump(const PathData& data);
    static bool isVerbValid(char verb);
+1 −1
Original line number Diff line number Diff line
@@ -96,7 +96,7 @@ float Path::getMatrixScale(const SkMatrix& groupStackedMatrix) {
Path::Path(const char* pathStr, size_t strLength) {
    PathParser::ParseResult result;
    Data data;
    PathParser::getPathDataFromString(&data, &result, pathStr, strLength);
    PathParser::getPathDataFromAsciiString(&data, &result, pathStr, strLength);
    mStagingProperties.setData(data);
}

Loading