diff options
author | Mike Buland <eichlan@xagasoft.com> | 2023-02-16 14:08:50 -0800 |
---|---|---|
committer | Mike Buland <eichlan@xagasoft.com> | 2023-02-16 14:08:50 -0800 |
commit | 44409ec7257cb20ff091079eb55dc7a8d4049cf9 (patch) | |
tree | b065862c46cb1a104c39c7ed6f27593137941ba5 /src | |
parent | df1ece4814c709e9f0bf6354c241a0cd7cb09507 (diff) | |
download | libbu++-44409ec7257cb20ff091079eb55dc7a8d4049cf9.tar.gz libbu++-44409ec7257cb20ff091079eb55dc7a8d4049cf9.tar.bz2 libbu++-44409ec7257cb20ff091079eb55dc7a8d4049cf9.tar.xz libbu++-44409ec7257cb20ff091079eb55dc7a8d4049cf9.zip |
We now parse \u<hex> in json strings.
How we got away with it for this long is amazing.
Diffstat (limited to 'src')
-rw-r--r-- | src/unstable/json.cpp | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/src/unstable/json.cpp b/src/unstable/json.cpp index 0903499..e737f1e 100644 --- a/src/unstable/json.cpp +++ b/src/unstable/json.cpp | |||
@@ -248,6 +248,7 @@ Bu::Json &Bu::Json::insertArray( const Bu::String &sKey ) | |||
248 | Bu::Json &Bu::Json::insertNull( const Bu::String &sKey ) | 248 | Bu::Json &Bu::Json::insertNull( const Bu::String &sKey ) |
249 | { | 249 | { |
250 | uDat.pObject->insert( sKey, new Json( Null ) ); | 250 | uDat.pObject->insert( sKey, new Json( Null ) ); |
251 | return *this; | ||
251 | } | 252 | } |
252 | 253 | ||
253 | Bu::Json &Bu::Json::append( Bu::Json *pObj ) | 254 | Bu::Json &Bu::Json::append( Bu::Json *pObj ) |
@@ -299,6 +300,7 @@ Bu::Json &Bu::Json::appendArray() | |||
299 | Bu::Json &Bu::Json::appendNull() | 300 | Bu::Json &Bu::Json::appendNull() |
300 | { | 301 | { |
301 | uDat.pArray->append( new Json( Null ) ); | 302 | uDat.pArray->append( new Json( Null ) ); |
303 | return *this; | ||
302 | } | 304 | } |
303 | 305 | ||
304 | void Bu::Json::parse( Bu::Stream &sInput ) | 306 | void Bu::Json::parse( Bu::Stream &sInput ) |
@@ -595,7 +597,28 @@ void Bu::Json::parseString( Bu::Json::ParseState &ps, Bu::UtfString &sOut ) | |||
595 | break; | 597 | break; |
596 | 598 | ||
597 | case 'u': | 599 | case 'u': |
598 | // Not implimented yet, followed by four hex diigts | 600 | { |
601 | char hex[5]; | ||
602 | for( int j = 0; j < 4; j++ ) | ||
603 | { | ||
604 | readChar( ps ); | ||
605 | if( (ps.c >= '0' && ps.c <= '9') || | ||
606 | (ps.c >= 'a' && ps.c <= 'f') || | ||
607 | (ps.c >= 'A' && ps.c <= 'F') ) | ||
608 | { | ||
609 | hex[j] = ps.c; | ||
610 | } | ||
611 | else | ||
612 | { | ||
613 | ps.error( | ||
614 | "Invalid json: Invalid \\u<hex> " | ||
615 | "escape sequence." | ||
616 | ); | ||
617 | } | ||
618 | } | ||
619 | hex[4] = '\0'; | ||
620 | sOut += (Bu::UtfChar)strtol( hex, NULL, 16 ); | ||
621 | } | ||
599 | break; | 622 | break; |
600 | 623 | ||
601 | default: | 624 | default: |