Comments (6)
Thanks for your feedback~
I've fixed the incorrect error codes and added some test cases for them: 719b310
from yyjson.
Hi @ibireme ,
I have run into a similar issue again, this time with literals. If we read a JSON that has been cut off like this:
{"duck":tru
We get a YYJSON_READ_ERROR_LITERAL
, but it should be YYJSON_READ_ERROR_UNEXPECTED_END
. This is because the original pointer is not updated by the functions that read literals (e.g., true
, false
, inf
, etc.). For example:
static_inline bool read_true(u8 **ptr, yyjson_val *val) {
u8 *cur = *ptr;
u8 **end = ptr;
if (likely(byte_match_4(cur, "true"))) {
val->tag = YYJSON_TYPE_BOOL | YYJSON_SUBTYPE_TRUE;
*end = cur + 4;
return true;
}
return false;
}
Should increment *ptr
to where the error happens before returning false
.
from yyjson.
@lnkuiper I think I understand your need now: a valid JSON truncated at any position should return exactly YYJSON_READ_ERROR_UNEXPECTED_END
.
I just returned UNEXPECTED_END
as a fallback before and didn't take care of this usage. So there is still some work to be done, especially to handle truncated unicode strings accurately.
from yyjson.
@ibireme exactly. I have a workaround that seems to work fine, so fixing this is not that important, but I thought I would report it anyway.
from yyjson.
I've fixed it by adding a new function that can detect whether a JSON that fails to parse is invalid, or valid but truncated: 8ffa6f5
I tested it with the JSONTestSuite
dataset, and it seems to be working as expected.
from yyjson.
@ibireme This will help a lot with identifying problems when doing streaming JSON reads. Thank you so much!
from yyjson.
Related Issues (20)
- Support `yyjson_mut_obj_add_obj` & `yyjson_mut_obj_add_arr` like `yyjson_mut_arr_add_*` HOT 6
- mem leak HOT 1
- Static Code Analysis: Identical sub-expressions on both sides of operator "<<" HOT 1
- Shared libraries need to be properly versioned on Linux HOT 1
- Json files are not newline terminated when pretty printing HOT 3
- memory issue for recursive function HOT 7
- yyjson_ptr_get_sint() returns false for positive integer HOT 5
- How to change the object key in mutable object? HOT 2
- error: -Wno-implicit-int and -Wno-implicit-function-declaration detected HOT 2
- Support Schema validator HOT 1
- A character make fail the JSON (empty JSON) HOT 1
- Does yyjson have parameters to set decimal places? HOT 5
- Discussion / Feedback request: Incorporating bytearray type HOT 8
- incorrectly formatted bool fields. HOT 3
- I need to merge multiple JSON strings HOT 1
- Is there a method to store the array of primitive types? HOT 4
- Release life cycle HOT 3
- Remove static qualifiers to support wrapping in other languages HOT 5
- Report row and line number when generating errors, instead of an absolute position HOT 10
- Improve error messages HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from yyjson.