Keh-Li Sheng created AVRO-1080:
----------------------------------

             Summary: JsonIO.cc should allow \u escape sequence in string
                 Key: AVRO-1080
                 URL: https://issues.apache.org/jira/browse/AVRO-1080
             Project: Avro
          Issue Type: Bug
          Components: c++
    Affects Versions: 1.6.3
         Environment: C++
            Reporter: Keh-Li Sheng
         Attachments: AVRO-1080.patch

If an avro string contains a unicode escape sequence that begins with "\u" 
instead of "\U" an exception is thrown by the parser. The problematic code is 
at JsonIO.cc line 269.

{code}
JsonParser::Token JsonParser::tryString()
{
    sv.clear();
    for ( ; ;) {
        char ch = in_.read();
        if (ch == '"') {
            return tkString;
        } else if (ch == '\\') {
            ch = in_.read();
            switch (ch) {
            case '"':
            case '\\':
            case '/':
                sv.push_back(ch);
                continue;
            case 'b':
                sv.push_back('\b');
                continue;
            case 'f':
                sv.push_back('\f');
                continue;
            case 'n':
                sv.push_back('\n');
                continue;
            case 'r':
                sv.push_back('\r');
                continue;
            case 't':
                sv.push_back('\t');
                continue;
            case 'U':
                {
                    unsigned int n = 0;
                    char e[4];
                    in_.readBytes(reinterpret_cast<uint8_t*>(e), 4);
                    for (int i = 0; i < 4; i++) {
                        n *= 16;
                        char c = e[i];
                        if (isdigit(c)) {
                            n += c - '0';
                        } else if (c >= 'a' && c <= 'f') {
                            n += c - 'a' + 10;
                        } else if (c >= 'A' && c <= 'F') {
                            n += c - 'A' + 10;
                        } else {
                            unexpected(c);
                        }
                    }
                    sv.push_back(n);
                }
                break;
            default:
                unexpected(ch);
            }
        } else {
            sv.push_back(ch);
        }
    }
}
{code}


--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to