Commit graph

34 commits

Author SHA1 Message Date
Wim Taymans
92e2b7dd0d json: improve unicode parsing
Make sure don't overread the strings.
Don't use sscanf but use a custom hex read function.

Fixes #2340
2022-04-27 08:37:32 +02:00
Wim Taymans
5137015c33 json: convert utf16 to utf8
We work with utf8 string so convert the unicode escape sequences to
utf8.

Fixes #2337
2022-04-26 15:38:22 +02:00
Wim Taymans
f2cdb15e0c json: fix \uXXXX parsing
We need exactly 4 hex characters, everything else is refused. We
also copy those characters directly to the output string without
assuming any encoding.

See #2337
2022-04-26 11:01:33 +02:00
Wim Taymans
2b16df4e89 spa: add locale independent spa_dtoa
And use this in spa_json_format_float() where we also avoid invalid
json floats.
Use json float format in some places where we serialize json floats.
Add a unit test.

See #2223
2022-03-21 10:41:44 +01:00
Wim Taymans
5f4d031db0 spa: add locale independent spa_strtod/spa_strtod
Use those for spa_atof and spa_atod.
Use those for parsing json float.
2022-03-21 10:38:00 +01:00
Wim Taymans
93b5d440bc json: add locale independent parse and format functions
Use them in pw-dump.
Add some unit tests.

See #2223
2022-03-20 21:04:33 +01:00
Wim Taymans
947d15a60a json: empty string should not give a valid number 2022-03-20 20:37:26 +01:00
Wim Taymans
611591d0fc json: add spa_json_parse_stringn()
It also checks the destination size.
2022-01-04 12:37:00 +01:00
Pauli Virtanen
49901f2d61 doc: add brief explanations for all groups 2021-10-04 20:55:04 +03:00
Pauli Virtanen
8159797f89 doc: reorganize Doxygen groups/modules to make more sense
The Doxygen "Modules" page is not very illuminative, as different parts
of the API are mixed together and not all parts are included.

Try to address this:

Put all parts of the public API to some Doxygen group, usually one group
per header file. Use short, systematic names.

Make these groups sub-groups of a few top-level groups, roughly
corresponding to the different logical parts of the API (core, impl,
stream, filter, spa, utilities).
2021-10-03 15:39:27 +03:00
Wim Taymans
44c6ec146e filter-chain: parse config options
Remove LADSPA dependencies, only use it in ladspa_plugin.c
Parse convolver config, like filename
2021-08-11 21:33:48 +02:00
Wim Taymans
2acf29a86c Revert "json: also escape '/' as required by JSON"
This reverts commit eb8546a682.

We don't need to escape the / according to  RFC7159
2021-06-24 16:12:47 +02:00
Wim Taymans
eb8546a682 json: also escape '/' as required by JSON 2021-06-09 18:03:42 +02:00
Peter Hutterer
07533cb708 spa: group the spa headers into doxygen modules
Subdirectories buffer, control, debug, monitor, pod, support and utils, others
are still missing. Headers are grouped either per subdirectory (e.g. buffer/
gets added to group spa_buffer) or per-file (e.g. spa_json is a separate
group), whatever seemed like the most sensible approach.
2021-05-26 07:44:55 +00:00
Wim Taymans
9ee55832e9 json: also escape \
Fixes #1141
2021-05-04 09:29:27 +02:00
Wim Taymans
34800dc019 json: don't move past the end of a symbol
We can't move past the } or ] or we might miss the end of the
container. Now that we ignore \0 it is not a problem if the \0
is placed at the container boundary.
2021-03-23 18:05:44 +01:00
Wim Taymans
db85339f50 json: handle overflow better
We need at least the length of the string+1 as the length of the
target in spa_json_get_string(). Add a unit test for this.
2021-03-18 19:44:25 +01:00
Wim Taymans
cc12755c6c json: ignore '\0'
We ignore '\0' chars as we use the string length to check for the
end and the 0 chars might be inserted to parse the json in-place.
2021-03-14 10:23:40 +01:00
Wim Taymans
2d1f84fd7d json: Move past the end char of a symbol
So that we can put a \0 there and continue parsing the rest of
the string. This allows us to in-place parse_string.
2021-03-14 09:28:38 +01:00
Wim Taymans
f41de50b28 json: escape and unescape invalid unicode chars 2021-03-12 09:23:33 +01:00
Arnaud Ferraris
8b97416417 json: add integer parsing functions
While most numeric values used in pipewire are floating-point values, it 
can still be useful to be able to directly parse integer values.
2021-03-02 18:06:55 +01:00
eater
6a21909281
spa: escape double quotes 2021-02-18 14:01:28 +01:00
Wim Taymans
febe8054e4 json: revert strippinf code, this needs more work 2021-02-06 21:08:29 +01:00
Wim Taymans
78e2e2c27b json: handle comments when stripping
Or else everything becomes part of the first comment.
2021-02-06 20:45:48 +01:00
Wim Taymans
0be2959f11 json: strip spaces and special chars when copying objects
When turning an object into a string, strip out all special chars
and duplicate spaces.
2021-02-06 20:20:26 +01:00
Wim Taymans
6370d75efd json: init value to ->cur instead of NULL
Or else we end up with a return value of ->cur - NULL, which might look
lik a positive result and cause a crash later on.

Fixes #641
2021-01-29 09:18:59 +01:00
Wim Taymans
0b69b92dc8 json: init value with NULL
Fixes #641
2021-01-28 19:19:59 +01:00
Wim Taymans
d09cb1f05b json: handle incomplete strings
If we run to the end of the string and the string is not closed,
assume it closed.
2020-12-31 17:16:32 +01:00
Wim Taymans
799bc13c85 json: set state on final bare string
When we run out of chars and are inside a bare string, set our state
so that the next round will continue instead of looping forever.
2020-12-31 17:07:03 +01:00
Wim Taymans
85cb85d440 json: improve parse_string
When doing parse_string on a non-string, copy the charaters
as they are without escaping.
2020-12-31 10:09:40 +01:00
Wim Taymans
49b17bca22 json: relax the parser some more
Allow bare strings with all non-special other chars.
Add # to comment a line till \n
Allow = as separator for keys
Fix end of string handling.

Now:

 {
   "#": "this is a comment"
   "key": "value",
   "foo": 24
 }

and

  {
    # this is a comment
    key = value
    foo = 24
  }

Parse to the same thing with less clutter.
2020-12-31 10:04:18 +01:00
Wim Taymans
57a9e82f79 spa: 0 means there is nothing left from from spa_json_next() 2020-11-28 20:35:25 +01:00
Wim Taymans
6e4c138238 properties: support properties from json object sting
Make pw_properties_new_string() work with a json object string.
This makes it possible to specify property strings as more complex
objects and escape characters.
2020-11-28 20:25:39 +01:00
Wim Taymans
62cdec8448 spa: move json parser to utils
Add unit test
Add escape function
2020-11-28 15:34:01 +01:00
Renamed from src/examples/media-session/json.h (Browse further)