Greenbone Vulnerability Management Libraries 22.32.0
jsonpull.h File Reference
#include "json.h"
#include <glib.h>
#include <stdio.h>
Include dependency graph for jsonpull.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  gvm_json_path_elem
 Path element types for the JSON pull parser. More...
struct  gvm_json_pull_event_t
 Event generated by the JSON pull parser. More...
struct  gvm_json_pull_parser_t
 A json pull parser. More...

Macros

#define _GNU_SOURCE
#define GVM_JSON_PULL_PARSE_BUFFER_LIMIT   10485760
#define GVM_JSON_PULL_READ_BUFFER_SIZE   4096

Typedefs

typedef struct gvm_json_path_elem gvm_json_path_elem_t
 Path element types for the JSON pull parser.

Enumerations

enum  gvm_json_pull_container_type_t { GVM_JSON_PULL_CONTAINER_NONE = 0 , GVM_JSON_PULL_CONTAINER_ARRAY , GVM_JSON_PULL_CONTAINER_OBJECT }
 Type of container the parser is currently in. More...
enum  gvm_json_pull_event_type_t {
  GVM_JSON_PULL_EVENT_UNDEFINED = 0 , GVM_JSON_PULL_EVENT_ARRAY_START , GVM_JSON_PULL_EVENT_ARRAY_END , GVM_JSON_PULL_EVENT_OBJECT_START ,
  GVM_JSON_PULL_EVENT_OBJECT_END , GVM_JSON_PULL_EVENT_STRING , GVM_JSON_PULL_EVENT_NUMBER , GVM_JSON_PULL_EVENT_BOOLEAN ,
  GVM_JSON_PULL_EVENT_NULL , GVM_JSON_PULL_EVENT_EOF , GVM_JSON_PULL_EVENT_ERROR
}
 Event types for the JSON pull parser. More...
enum  gvm_json_pull_expect_t {
  GVM_JSON_PULL_EXPECT_UNDEFINED = 0 , GVM_JSON_PULL_EXPECT_VALUE , GVM_JSON_PULL_EXPECT_KEY , GVM_JSON_PULL_EXPECT_COMMA ,
  GVM_JSON_PULL_EXPECT_EOF
}
 Expected token state for the JSON pull parser. More...

Functions

gvm_json_path_elem_tgvm_json_pull_path_elem_new (gvm_json_pull_container_type_t, int)
 Creates a new JSON path element.
void gvm_json_pull_path_elem_free (gvm_json_path_elem_t *)
 Frees a JSON path element.
void gvm_json_pull_event_init (gvm_json_pull_event_t *)
 Initializes a JSON pull event data structure.
void gvm_json_pull_event_cleanup (gvm_json_pull_event_t *)
 Frees all data of JSON pull event data structure.
void gvm_json_pull_parser_init_full (gvm_json_pull_parser_t *, FILE *, size_t, size_t)
 Initializes a JSON pull parser.
void gvm_json_pull_parser_init (gvm_json_pull_parser_t *, FILE *)
 Initializes a JSON pull parser with default buffer sizes.
void gvm_json_pull_parser_cleanup (gvm_json_pull_parser_t *)
 Frees the data of a JSON pull parser.
void gvm_json_pull_parser_next (gvm_json_pull_parser_t *, gvm_json_pull_event_t *)
 Get the next event from a JSON pull parser.
cJSON * gvm_json_pull_expand_container (gvm_json_pull_parser_t *, gchar **)
 Expands the current array or object of a JSON pull parser.
gchar * gvm_json_path_to_string (GQueue *path)
 Converts a path as used by a JSON pull parser to a JSONPath string.

Macro Definition Documentation

◆ _GNU_SOURCE

#define _GNU_SOURCE

Definition at line 9 of file jsonpull.h.

◆ GVM_JSON_PULL_PARSE_BUFFER_LIMIT

#define GVM_JSON_PULL_PARSE_BUFFER_LIMIT   10485760

Definition at line 78 of file jsonpull.h.

Referenced by Ensure(), and gvm_json_pull_parser_init_full().

◆ GVM_JSON_PULL_READ_BUFFER_SIZE

#define GVM_JSON_PULL_READ_BUFFER_SIZE   4096

Definition at line 80 of file jsonpull.h.

Referenced by Ensure(), and gvm_json_pull_parser_init_full().

Typedef Documentation

◆ gvm_json_path_elem_t

Path element types for the JSON pull parser.

Enumeration Type Documentation

◆ gvm_json_pull_container_type_t

Type of container the parser is currently in.

Enumerator
GVM_JSON_PULL_CONTAINER_NONE 

No container / document root.

GVM_JSON_PULL_CONTAINER_ARRAY 

Array.

GVM_JSON_PULL_CONTAINER_OBJECT 

Object.

Definition at line 19 of file jsonpull.h.

20{
gvm_json_pull_container_type_t
Type of container the parser is currently in.
Definition jsonpull.h:20
@ GVM_JSON_PULL_CONTAINER_NONE
No container / document root.
Definition jsonpull.h:21
@ GVM_JSON_PULL_CONTAINER_OBJECT
Object.
Definition jsonpull.h:23
@ GVM_JSON_PULL_CONTAINER_ARRAY
Array.
Definition jsonpull.h:22

◆ gvm_json_pull_event_type_t

Event types for the JSON pull parser.

Enumerator
GVM_JSON_PULL_EVENT_UNDEFINED 
GVM_JSON_PULL_EVENT_ARRAY_START 
GVM_JSON_PULL_EVENT_ARRAY_END 
GVM_JSON_PULL_EVENT_OBJECT_START 
GVM_JSON_PULL_EVENT_OBJECT_END 
GVM_JSON_PULL_EVENT_STRING 
GVM_JSON_PULL_EVENT_NUMBER 
GVM_JSON_PULL_EVENT_BOOLEAN 
GVM_JSON_PULL_EVENT_NULL 
GVM_JSON_PULL_EVENT_EOF 
GVM_JSON_PULL_EVENT_ERROR 

Definition at line 40 of file jsonpull.h.

41{
gvm_json_pull_event_type_t
Event types for the JSON pull parser.
Definition jsonpull.h:41
@ GVM_JSON_PULL_EVENT_STRING
Definition jsonpull.h:47
@ GVM_JSON_PULL_EVENT_OBJECT_START
Definition jsonpull.h:45
@ GVM_JSON_PULL_EVENT_ERROR
Definition jsonpull.h:52
@ GVM_JSON_PULL_EVENT_NULL
Definition jsonpull.h:50
@ GVM_JSON_PULL_EVENT_EOF
Definition jsonpull.h:51
@ GVM_JSON_PULL_EVENT_NUMBER
Definition jsonpull.h:48
@ GVM_JSON_PULL_EVENT_ARRAY_END
Definition jsonpull.h:44
@ GVM_JSON_PULL_EVENT_OBJECT_END
Definition jsonpull.h:46
@ GVM_JSON_PULL_EVENT_ARRAY_START
Definition jsonpull.h:43
@ GVM_JSON_PULL_EVENT_BOOLEAN
Definition jsonpull.h:49
@ GVM_JSON_PULL_EVENT_UNDEFINED
Definition jsonpull.h:42

◆ gvm_json_pull_expect_t

Expected token state for the JSON pull parser.

Enumerator
GVM_JSON_PULL_EXPECT_UNDEFINED 

Undefined state.

GVM_JSON_PULL_EXPECT_VALUE 

Expect start of a value.

GVM_JSON_PULL_EXPECT_KEY 

Expect start of a key.

GVM_JSON_PULL_EXPECT_COMMA 

Expect comma or container end brace.

GVM_JSON_PULL_EXPECT_EOF 

Expect end of file.

Definition at line 69 of file jsonpull.h.

70{
gvm_json_pull_expect_t
Expected token state for the JSON pull parser.
Definition jsonpull.h:70
@ GVM_JSON_PULL_EXPECT_UNDEFINED
Undefined state.
Definition jsonpull.h:71
@ GVM_JSON_PULL_EXPECT_VALUE
Expect start of a value.
Definition jsonpull.h:72
@ GVM_JSON_PULL_EXPECT_KEY
Expect start of a key.
Definition jsonpull.h:73
@ GVM_JSON_PULL_EXPECT_EOF
Expect end of file.
Definition jsonpull.h:75
@ GVM_JSON_PULL_EXPECT_COMMA
Expect comma or container end brace.
Definition jsonpull.h:74

Function Documentation

◆ gvm_json_path_to_string()

gchar * gvm_json_path_to_string ( GQueue * path)

Converts a path as used by a JSON pull parser to a JSONPath string.

Parameters
[in]pathThe path to convert
Returns
Newly allocated string of the path in JSONPath bracket notation

Definition at line 910 of file jsonpull.c.

911{
912 GString *path_string = g_string_new ("$");
913 g_queue_foreach (path, (GFunc) gvm_json_path_string_add_elem, path_string);
914 return g_string_free (path_string, FALSE);
915}
static void gvm_json_path_string_add_elem(gvm_json_path_elem_t *path_elem, GString *path_string)
Appends a string path element to a JSONPath string.
Definition jsonpull.c:889

References gvm_json_path_string_add_elem().

Referenced by parse_vt_json().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ gvm_json_pull_event_cleanup()

void gvm_json_pull_event_cleanup ( gvm_json_pull_event_t * event)

Frees all data of JSON pull event data structure.

Parameters
[in]eventThe event structure to clean up

Definition at line 61 of file jsonpull.c.

62{
63 cJSON_Delete (event->value);
64 if (event->error_message)
65 g_free (event->error_message);
66 memset (event, 0, sizeof (gvm_json_pull_event_t));
67}
Event generated by the JSON pull parser.
Definition jsonpull.h:59
gchar * error_message
Error message, NULL on success.
Definition jsonpull.h:63
cJSON * value
Value for non-container value events.
Definition jsonpull.h:62

References gvm_json_pull_event_t::error_message, and gvm_json_pull_event_t::value.

Referenced by Ensure(), Ensure(), and gvm_json_pull_parser_next().

Here is the caller graph for this function:

◆ gvm_json_pull_event_init()

void gvm_json_pull_event_init ( gvm_json_pull_event_t * event)

Initializes a JSON pull event data structure.

Parameters
[in]eventThe event structure to initialize

Definition at line 50 of file jsonpull.c.

51{
52 memset (event, 0, sizeof (gvm_json_pull_event_t));
53}

Referenced by Ensure().

Here is the caller graph for this function:

◆ gvm_json_pull_expand_container()

cJSON * gvm_json_pull_expand_container ( gvm_json_pull_parser_t * parser,
gchar ** error_message )

Expands the current array or object of a JSON pull parser.

This should be called after an array or object start event.

Parameters
[in]parserParser to get the current container element from
[out]error_messageError message output
Returns
The expanded container as a cJSON object if successful, else NULL

Definition at line 746 of file jsonpull.c.

748{
749 gvm_json_path_elem_t *path_tail = NULL;
750
751 int start_depth;
752 gboolean in_string, escape_next_char, in_expanded_container;
753 cJSON *expanded;
754
755 g_string_truncate (parser->parse_buffer, 0);
756
757 if (error_message)
758 *error_message = NULL;
759
760 // require "path_add" to only allow expansion at start of container
761 if (parser->path_add)
762 {
763 path_tail = parser->path_add;
764 g_queue_push_tail (parser->path, path_tail);
765 parser->path_add = NULL;
766 }
767
768 if (path_tail && path_tail->parent_type == GVM_JSON_PULL_CONTAINER_ARRAY)
769 g_string_append_c (parser->parse_buffer, '[');
770 else if (path_tail
772 g_string_append_c (parser->parse_buffer, '{');
773 else
774 {
775 if (error_message)
776 *error_message =
777 g_strdup ("can only expand after array or object start");
778 return NULL;
779 }
780
781 start_depth = path_tail->depth;
782 in_string = escape_next_char = FALSE;
783 in_expanded_container = TRUE;
784
785 while (parser->last_read_char >= 0 && in_expanded_container)
786 {
787 if (parser->parse_buffer->len >= parser->parse_buffer_limit)
788 {
789 if (error_message)
790 *error_message =
791 g_strdup_printf ("container exceeds size limit of %zu bytes",
792 parser->parse_buffer_limit);
793 return NULL;
794 }
795
796 g_string_append_c (parser->parse_buffer, parser->last_read_char);
797
798 if (escape_next_char)
799 {
800 escape_next_char = FALSE;
801 }
802 else if (in_string)
803 {
804 escape_next_char = (parser->last_read_char == '\\');
805 in_string = (parser->last_read_char != '"');
806 }
807 else
808 {
809 switch (parser->last_read_char)
810 {
811 case '"':
812 in_string = TRUE;
813 break;
814 case '[':
815 path_tail = gvm_json_pull_path_elem_new (
816 GVM_JSON_PULL_CONTAINER_ARRAY, parser->path->length);
817 g_queue_push_tail (parser->path, path_tail);
818 break;
819 case '{':
820 path_tail = gvm_json_pull_path_elem_new (
821 GVM_JSON_PULL_CONTAINER_OBJECT, parser->path->length);
822 g_queue_push_tail (parser->path, path_tail);
823 break;
824 case ']':
825 path_tail = g_queue_pop_tail (parser->path);
827 {
828 if (error_message)
829 *error_message =
830 g_strdup ("unexpected closing square bracket");
832 return NULL;
833 }
834 if (path_tail->depth == start_depth)
835 in_expanded_container = FALSE;
836
838 break;
839 case '}':
840 path_tail = g_queue_pop_tail (parser->path);
842 {
843 if (error_message)
844 *error_message =
845 g_strdup ("unexpected closing curly brace");
847 return NULL;
848 }
849 if (path_tail->depth == start_depth)
850 in_expanded_container = FALSE;
851
853 break;
854 }
855 }
857 }
858
859 if (parser->last_read_char == GVM_JSON_CHAR_ERROR)
860 {
861 if (error_message)
862 *error_message = gvm_json_read_stream_error_str ();
863 return NULL;
864 }
865 else if (in_expanded_container && parser->last_read_char == GVM_JSON_CHAR_EOF)
866 {
867 if (error_message)
868 *error_message = g_strdup ("unexpected EOF");
869 return NULL;
870 }
871
872 expanded = cJSON_Parse (parser->parse_buffer->str);
873 g_string_truncate (parser->parse_buffer, 0);
875
876 if (expanded == NULL && error_message)
877 *error_message = g_strdup ("could not parse expanded container");
878
879 return expanded;
880}
static int gvm_json_pull_parser_next_char(gvm_json_pull_parser_t *parser)
Reads the next character in a pull parser input stream.
Definition jsonpull.c:174
#define GVM_JSON_CHAR_ERROR
Error reading file.
Definition jsonpull.c:11
static void parse_value_next_expect(gvm_json_pull_parser_t *parser)
Updates the expectation for a JSON pull parser according to the path.
Definition jsonpull.c:406
#define GVM_JSON_CHAR_EOF
End of file.
Definition jsonpull.c:10
void gvm_json_pull_path_elem_free(gvm_json_path_elem_t *elem)
Frees a JSON path element.
Definition jsonpull.c:38
gvm_json_path_elem_t * gvm_json_pull_path_elem_new(gvm_json_pull_container_type_t parent_type, int depth)
Creates a new JSON path element.
Definition jsonpull.c:23
static gchar * gvm_json_read_stream_error_str()
Generates message for an error that occurred reading the JSON stream.
Definition jsonpull.c:136
struct gvm_json_path_elem gvm_json_path_elem_t
Path element types for the JSON pull parser.
int depth
Number of ancestor elements.
Definition jsonpull.h:34
gvm_json_pull_container_type_t parent_type
parent container type
Definition jsonpull.h:31
GString * parse_buffer
Buffer for parsing values and object keys.
Definition jsonpull.h:97
size_t parse_buffer_limit
Maximum parse buffer size.
Definition jsonpull.h:98
gvm_json_path_elem_t * path_add
Path elem to add in next step.
Definition jsonpull.h:88
GQueue * path
Path to the current value.
Definition jsonpull.h:87
int last_read_char
Character last read from stream.
Definition jsonpull.h:95

References gvm_json_path_elem::depth, GVM_JSON_CHAR_EOF, GVM_JSON_CHAR_ERROR, GVM_JSON_PULL_CONTAINER_ARRAY, GVM_JSON_PULL_CONTAINER_OBJECT, gvm_json_pull_parser_next_char(), gvm_json_pull_path_elem_free(), gvm_json_pull_path_elem_new(), gvm_json_read_stream_error_str(), gvm_json_pull_parser_t::last_read_char, gvm_json_path_elem::parent_type, gvm_json_pull_parser_t::parse_buffer, gvm_json_pull_parser_t::parse_buffer_limit, parse_value_next_expect(), gvm_json_pull_parser_t::path, and gvm_json_pull_parser_t::path_add.

Referenced by Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), and parse_vt_json().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ gvm_json_pull_parser_cleanup()

void gvm_json_pull_parser_cleanup ( gvm_json_pull_parser_t * parser)

Frees the data of a JSON pull parser.

Parameters
[in]parserThe parser data structure to free the data of

Definition at line 120 of file jsonpull.c.

121{
122 assert (parser);
123 g_queue_free_full (parser->path,
124 (GDestroyNotify) gvm_json_pull_path_elem_free);
125 g_string_free (parser->parse_buffer, TRUE);
126 g_free (parser->read_buffer);
127 memset (parser, 0, sizeof (gvm_json_pull_parser_t));
128}
A json pull parser.
Definition jsonpull.h:86
char * read_buffer
Stream reading buffer.
Definition jsonpull.h:92

References gvm_json_pull_path_elem_free(), gvm_json_pull_parser_t::parse_buffer, gvm_json_pull_parser_t::path, and gvm_json_pull_parser_t::read_buffer.

Referenced by Ensure(), Ensure(), and Ensure().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ gvm_json_pull_parser_init()

void gvm_json_pull_parser_init ( gvm_json_pull_parser_t * parser,
FILE * input_stream )

Initializes a JSON pull parser with default buffer sizes.

Parameters
[in]parserThe parser data structure to initialize
[in]input_streamThe JSON input stream

Definition at line 109 of file jsonpull.c.

110{
111 gvm_json_pull_parser_init_full (parser, input_stream, 0, 0);
112}
void gvm_json_pull_parser_init_full(gvm_json_pull_parser_t *parser, FILE *input_stream, size_t parse_buffer_limit, size_t read_buffer_size)
Initializes a JSON pull parser.
Definition jsonpull.c:78

References gvm_json_pull_parser_init_full().

Referenced by Ensure(), and Ensure().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ gvm_json_pull_parser_init_full()

void gvm_json_pull_parser_init_full ( gvm_json_pull_parser_t * parser,
FILE * input_stream,
size_t parse_buffer_limit,
size_t read_buffer_size )

Initializes a JSON pull parser.

Parameters
[in]parserThe parser data structure to initialize
[in]input_streamThe JSON input stream
[in]parse_buffer_limitMaximum buffer size for parsing values
[in]read_buffer_sizeBuffer size for reading from the stream

Definition at line 78 of file jsonpull.c.

81{
82 assert (parser);
83 assert (input_stream);
84 memset (parser, 0, sizeof (gvm_json_pull_parser_t));
85
86 if (parse_buffer_limit <= 0)
87 parse_buffer_limit = GVM_JSON_PULL_PARSE_BUFFER_LIMIT;
88
89 if (read_buffer_size <= 0)
90 read_buffer_size = GVM_JSON_PULL_READ_BUFFER_SIZE;
91
92 parser->input_stream = input_stream;
93 parser->path = g_queue_new ();
95 parser->parse_buffer_limit = parse_buffer_limit;
96 parser->parse_buffer = g_string_new ("");
97 parser->read_buffer_size = read_buffer_size;
98 parser->read_buffer = g_malloc0 (read_buffer_size);
100}
#define GVM_JSON_CHAR_UNDEFINED
Undefined state.
Definition jsonpull.c:12
#define GVM_JSON_PULL_READ_BUFFER_SIZE
Definition jsonpull.h:80
#define GVM_JSON_PULL_PARSE_BUFFER_LIMIT
Definition jsonpull.h:78
size_t read_buffer_size
Size of the stream reading buffer.
Definition jsonpull.h:93
gvm_json_pull_expect_t expect
Current expected token.
Definition jsonpull.h:89
FILE * input_stream
Input stream.
Definition jsonpull.h:91

References gvm_json_pull_parser_t::expect, GVM_JSON_CHAR_UNDEFINED, GVM_JSON_PULL_EXPECT_VALUE, GVM_JSON_PULL_PARSE_BUFFER_LIMIT, GVM_JSON_PULL_READ_BUFFER_SIZE, gvm_json_pull_parser_t::input_stream, gvm_json_pull_parser_t::last_read_char, gvm_json_pull_parser_t::parse_buffer, gvm_json_pull_parser_t::parse_buffer_limit, gvm_json_pull_parser_t::path, gvm_json_pull_parser_t::read_buffer, and gvm_json_pull_parser_t::read_buffer_size.

Referenced by gvm_json_pull_parser_init().

Here is the caller graph for this function:

◆ gvm_json_pull_parser_next()

void gvm_json_pull_parser_next ( gvm_json_pull_parser_t * parser,
gvm_json_pull_event_t * event )

Get the next event from a JSON pull parser.

Note: This invalidates previous event data like the cJSON value.

Parameters
[in]parserThe JSON pull parser to process until the next event
[in]eventStructure to store event data in.

Definition at line 669 of file jsonpull.c.

671{
672 assert (parser);
673 assert (event);
674
677 {
678 // Handle first read of the stream
679 if (gvm_json_pull_parser_next_char (parser) < 0)
680 {
681 gvm_json_pull_handle_read_end (parser, event, TRUE);
682 return;
683 }
684 }
685
686 event->path = parser->path;
687
688 // Delayed addition to path after a container start element
689 if (parser->path_add)
690 {
691 g_queue_push_tail (parser->path, parser->path_add);
692 parser->path_add = NULL;
693 }
694
695 // Check for expected end of file
696 if (parser->expect == GVM_JSON_PULL_EXPECT_EOF)
697 {
698 if (gvm_json_pull_skip_space (parser, event, TRUE))
699 {
700 // EOF was reached, or an error occurred.
701 // The event type is already set, and if an error occurred, then
702 // error_message is also already set.
703 return;
704 }
705
706 // Skipping space succeeded. Check for unexpected characters at EOF.
707
708 if (parser->last_read_char == GVM_JSON_CHAR_EOF)
709 return;
710
711 event->type = GVM_JSON_PULL_EVENT_ERROR;
712 event->error_message = g_strdup_printf (
713 "unexpected character at end of file (%d)", parser->last_read_char);
714 return;
715 }
716
717 if (parser->expect == GVM_JSON_PULL_EXPECT_COMMA)
718 {
719 if (gvm_json_pull_parse_comma (parser, event))
720 return;
721 }
722
723 if (parser->expect == GVM_JSON_PULL_EXPECT_KEY)
724 {
725 if (gvm_json_pull_parse_key (parser, event))
726 return;
727 }
728
729 if (parser->expect == GVM_JSON_PULL_EXPECT_VALUE)
730 {
731 gvm_json_pull_parse_value (parser, event);
732 }
733}
static int gvm_json_pull_skip_space(gvm_json_pull_parser_t *parser, gvm_json_pull_event_t *event, gboolean allow_eof)
Skips whitespaces in the input stream of a JSON pull parser.
Definition jsonpull.c:267
static int gvm_json_pull_parse_comma(gvm_json_pull_parser_t *parser, gvm_json_pull_event_t *event)
Handles the case that a comma is expected in a JSON pull parser.
Definition jsonpull.c:497
void gvm_json_pull_event_cleanup(gvm_json_pull_event_t *event)
Frees all data of JSON pull event data structure.
Definition jsonpull.c:61
static int gvm_json_pull_parse_value(gvm_json_pull_parser_t *parser, gvm_json_pull_event_t *event)
Handles the case that a value is expected in a JSON pull parser.
Definition jsonpull.c:565
static int gvm_json_pull_parse_key(gvm_json_pull_parser_t *parser, gvm_json_pull_event_t *event)
Handles the case that an object key is expected in a JSON pull parser.
Definition jsonpull.c:426
static void gvm_json_pull_handle_read_end(gvm_json_pull_parser_t *parser, gvm_json_pull_event_t *event, gboolean allow_eof)
Handles error or EOF after reading a character in JSON pull parser.
Definition jsonpull.c:238

References gvm_json_pull_parser_t::expect, GVM_JSON_CHAR_EOF, GVM_JSON_CHAR_UNDEFINED, gvm_json_pull_event_cleanup(), GVM_JSON_PULL_EVENT_ERROR, GVM_JSON_PULL_EXPECT_COMMA, GVM_JSON_PULL_EXPECT_EOF, GVM_JSON_PULL_EXPECT_KEY, GVM_JSON_PULL_EXPECT_VALUE, gvm_json_pull_handle_read_end(), gvm_json_pull_parse_comma(), gvm_json_pull_parse_key(), gvm_json_pull_parse_value(), gvm_json_pull_parser_next_char(), gvm_json_pull_skip_space(), gvm_json_pull_parser_t::last_read_char, gvm_json_pull_parser_t::path, and gvm_json_pull_parser_t::path_add.

Referenced by Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), and parse_vt_json().

Here is the call graph for this function:

◆ gvm_json_pull_path_elem_free()

void gvm_json_pull_path_elem_free ( gvm_json_path_elem_t * elem)

Frees a JSON path element.

Parameters
[in]elemThe element to free

Definition at line 38 of file jsonpull.c.

39{
40 g_free (elem->key);
41 g_free (elem);
42}
char * key
Key if element is in an object.
Definition jsonpull.h:33

References gvm_json_path_elem::key.

Referenced by gvm_json_pull_expand_container(), gvm_json_pull_parse_comma(), gvm_json_pull_parse_key(), gvm_json_pull_parse_value(), and gvm_json_pull_parser_cleanup().

Here is the caller graph for this function:

◆ gvm_json_pull_path_elem_new()

gvm_json_path_elem_t * gvm_json_pull_path_elem_new ( gvm_json_pull_container_type_t parent_type,
int depth )

Creates a new JSON path element.

Parameters
[in]parent_typeType of the parent (array, object, none/root)
[in]depthThe depth in the document tree
Returns
The newly allocated path element

Definition at line 23 of file jsonpull.c.

25{
26 gvm_json_path_elem_t *new_elem = g_malloc0 (sizeof (gvm_json_path_elem_t));
27 new_elem->parent_type = parent_type;
28 new_elem->depth = depth;
29 return new_elem;
30}

References gvm_json_path_elem::depth, and gvm_json_path_elem::parent_type.

Referenced by gvm_json_pull_expand_container(), and gvm_json_pull_parse_value().

Here is the caller graph for this function: