VirtualBox

Ignore:
Timestamp:
Sep 10, 2018 10:46:31 AM (6 years ago)
Author:
vboxsync
Message:

IPRT/json: Added \uXXXX and surrogate pair tests. Refuse to decode U+0000, U+FFFE and U+FFFF. bugref:9167

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/common/misc/json.cpp

    r74175 r74179  
    695695                                    {
    696696                                        /* The must be a low surrogate pair following the high one: */
     697                                        rc = VINF_SUCCESS;
    697698                                        ch = rtJsonTokenizerGetCh(pTokenizer);
    698699                                        if (ch == '\\')
     
    741742                                    if (RT_SUCCESS(rc))
    742743                                    {
    743                                         Assert(cchStr + RTStrCpSize(uc) < cchStrMax);
    744                                         char *pszNext = RTStrPutCp(&pszDecoded[cchStr], uc);
    745                                         Assert((size_t)(pszNext - &pszDecoded[cchStr]) == RTStrCpSize(uc));
    746                                         cchStr += pszNext - &pszDecoded[cchStr];
    747                                         break;
     744                                        if (   uc != 0
     745                                            && uc != 0xfffe
     746                                            && uc != 0xffff)
     747                                        {
     748                                            Assert(cchStr + RTStrCpSize(uc) < cchStrMax);
     749                                            char *pszNext = RTStrPutCp(&pszDecoded[cchStr], uc);
     750                                            Assert((size_t)(pszNext - &pszDecoded[cchStr]) == RTStrCpSize(uc));
     751                                            cchStr += pszNext - &pszDecoded[cchStr];
     752                                            break;
     753                                        }
     754                                        rc = RTErrInfoSetF(pTokenizer->pErrInfo, VERR_JSON_INVALID_CODEPOINT,
     755                                                           "Invalid \\u code point: %#x (line %zu col %zu)",
     756                                                           uc, pTokenizer->Pos.iLine, pTokenizer->Pos.iChStart);
    748757                                    }
    749758                                }
     
    758767                        rc = RTErrInfoSetF(pTokenizer->pErrInfo, rc, "Missing UTF-16 surrogate pair (line %zu col %zu)",
    759768                                           pTokenizer->Pos.iLine, pTokenizer->Pos.iChStart);
    760                     else
     769                    else if (rc == VERR_JSON_BAD_SURROGATE_PAIR_SEQUENCE)
    761770                        rc = RTErrInfoSetF(pTokenizer->pErrInfo, rc, "Invalid UTF-16 surrogate pair (line %zu col %zu)",
    762771                                           pTokenizer->Pos.iLine, pTokenizer->Pos.iChStart);
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette