Lines Matching refs:parse

99 static void json_manifest_finalize_file(JsonManifestParseState *parse);
100 static void json_manifest_finalize_wal_range(JsonManifestParseState *parse);
101 static void verify_manifest_checksum(JsonManifestParseState *parse,
125 JsonManifestParseState parse; in json_parse_manifest() local
128 parse.context = context; in json_parse_manifest()
129 parse.state = JM_EXPECT_TOPLEVEL_START; in json_parse_manifest()
130 parse.saw_version_field = false; in json_parse_manifest()
136 sem.semstate = &parse; in json_parse_manifest()
151 if (parse.state != JM_EXPECT_EOF) in json_parse_manifest()
155 verify_manifest_checksum(&parse, buffer, size); in json_parse_manifest()
168 JsonManifestParseState *parse = state; in json_manifest_object_start() local
170 switch (parse->state) in json_manifest_object_start()
173 parse->state = JM_EXPECT_TOPLEVEL_FIELD; in json_manifest_object_start()
176 parse->state = JM_EXPECT_THIS_FILE_FIELD; in json_manifest_object_start()
177 parse->pathname = NULL; in json_manifest_object_start()
178 parse->encoded_pathname = NULL; in json_manifest_object_start()
179 parse->size = NULL; in json_manifest_object_start()
180 parse->algorithm = NULL; in json_manifest_object_start()
181 parse->checksum = NULL; in json_manifest_object_start()
184 parse->state = JM_EXPECT_THIS_WAL_RANGE_FIELD; in json_manifest_object_start()
185 parse->timeline = NULL; in json_manifest_object_start()
186 parse->start_lsn = NULL; in json_manifest_object_start()
187 parse->end_lsn = NULL; in json_manifest_object_start()
190 json_manifest_parse_failure(parse->context, in json_manifest_object_start()
207 JsonManifestParseState *parse = state; in json_manifest_object_end() local
209 switch (parse->state) in json_manifest_object_end()
212 parse->state = JM_EXPECT_EOF; in json_manifest_object_end()
215 json_manifest_finalize_file(parse); in json_manifest_object_end()
216 parse->state = JM_EXPECT_FILES_NEXT; in json_manifest_object_end()
219 json_manifest_finalize_wal_range(parse); in json_manifest_object_end()
220 parse->state = JM_EXPECT_WAL_RANGES_NEXT; in json_manifest_object_end()
223 json_manifest_parse_failure(parse->context, in json_manifest_object_end()
239 JsonManifestParseState *parse = state; in json_manifest_array_start() local
241 switch (parse->state) in json_manifest_array_start()
244 parse->state = JM_EXPECT_FILES_NEXT; in json_manifest_array_start()
247 parse->state = JM_EXPECT_WAL_RANGES_NEXT; in json_manifest_array_start()
250 json_manifest_parse_failure(parse->context, in json_manifest_array_start()
264 JsonManifestParseState *parse = state; in json_manifest_array_end() local
266 switch (parse->state) in json_manifest_array_end()
270 parse->state = JM_EXPECT_TOPLEVEL_FIELD; in json_manifest_array_end()
273 json_manifest_parse_failure(parse->context, in json_manifest_array_end()
285 JsonManifestParseState *parse = state; in json_manifest_object_field_start() local
287 switch (parse->state) in json_manifest_object_field_start()
295 if (!parse->saw_version_field) in json_manifest_object_field_start()
298 json_manifest_parse_failure(parse->context, in json_manifest_object_field_start()
300 parse->state = JM_EXPECT_VERSION_VALUE; in json_manifest_object_field_start()
301 parse->saw_version_field = true; in json_manifest_object_field_start()
308 parse->state = JM_EXPECT_FILES_START; in json_manifest_object_field_start()
315 parse->state = JM_EXPECT_WAL_RANGES_START; in json_manifest_object_field_start()
322 parse->state = JM_EXPECT_MANIFEST_CHECKSUM_VALUE; in json_manifest_object_field_start()
327 json_manifest_parse_failure(parse->context, in json_manifest_object_field_start()
334 parse->file_field = JMFF_PATH; in json_manifest_object_field_start()
336 parse->file_field = JMFF_ENCODED_PATH; in json_manifest_object_field_start()
338 parse->file_field = JMFF_SIZE; in json_manifest_object_field_start()
340 parse->file_field = JMFF_LAST_MODIFIED; in json_manifest_object_field_start()
342 parse->file_field = JMFF_CHECKSUM_ALGORITHM; in json_manifest_object_field_start()
344 parse->file_field = JMFF_CHECKSUM; in json_manifest_object_field_start()
346 json_manifest_parse_failure(parse->context, in json_manifest_object_field_start()
348 parse->state = JM_EXPECT_THIS_FILE_VALUE; in json_manifest_object_field_start()
354 parse->wal_range_field = JMWRF_TIMELINE; in json_manifest_object_field_start()
356 parse->wal_range_field = JMWRF_START_LSN; in json_manifest_object_field_start()
358 parse->wal_range_field = JMWRF_END_LSN; in json_manifest_object_field_start()
360 json_manifest_parse_failure(parse->context, in json_manifest_object_field_start()
362 parse->state = JM_EXPECT_THIS_WAL_RANGE_VALUE; in json_manifest_object_field_start()
366 json_manifest_parse_failure(parse->context, in json_manifest_object_field_start()
390 JsonManifestParseState *parse = state; in json_manifest_scalar() local
392 switch (parse->state) in json_manifest_scalar()
396 json_manifest_parse_failure(parse->context, in json_manifest_scalar()
398 parse->state = JM_EXPECT_TOPLEVEL_FIELD; in json_manifest_scalar()
402 switch (parse->file_field) in json_manifest_scalar()
405 parse->pathname = token; in json_manifest_scalar()
408 parse->encoded_pathname = token; in json_manifest_scalar()
411 parse->size = token; in json_manifest_scalar()
417 parse->algorithm = token; in json_manifest_scalar()
420 parse->checksum = token; in json_manifest_scalar()
423 parse->state = JM_EXPECT_THIS_FILE_FIELD; in json_manifest_scalar()
427 switch (parse->wal_range_field) in json_manifest_scalar()
430 parse->timeline = token; in json_manifest_scalar()
433 parse->start_lsn = token; in json_manifest_scalar()
436 parse->end_lsn = token; in json_manifest_scalar()
439 parse->state = JM_EXPECT_THIS_WAL_RANGE_FIELD; in json_manifest_scalar()
443 parse->state = JM_EXPECT_TOPLEVEL_END; in json_manifest_scalar()
444 parse->manifest_checksum = token; in json_manifest_scalar()
448 json_manifest_parse_failure(parse->context, "unexpected scalar"); in json_manifest_scalar()
460 json_manifest_finalize_file(JsonManifestParseState *parse) in json_manifest_finalize_file() argument
462 JsonManifestParseContext *context = parse->context; in json_manifest_finalize_file()
471 if (parse->pathname == NULL && parse->encoded_pathname == NULL) in json_manifest_finalize_file()
472 json_manifest_parse_failure(parse->context, "missing path name"); in json_manifest_finalize_file()
473 if (parse->pathname != NULL && parse->encoded_pathname != NULL) in json_manifest_finalize_file()
474 json_manifest_parse_failure(parse->context, in json_manifest_finalize_file()
476 if (parse->size == NULL) in json_manifest_finalize_file()
477 json_manifest_parse_failure(parse->context, "missing size"); in json_manifest_finalize_file()
478 if (parse->algorithm == NULL && parse->checksum != NULL) in json_manifest_finalize_file()
479 json_manifest_parse_failure(parse->context, in json_manifest_finalize_file()
483 if (parse->encoded_pathname != NULL) in json_manifest_finalize_file()
485 int encoded_length = strlen(parse->encoded_pathname); in json_manifest_finalize_file()
488 parse->pathname = palloc(raw_length + 1); in json_manifest_finalize_file()
490 !hexdecode_string((uint8 *) parse->pathname, in json_manifest_finalize_file()
491 parse->encoded_pathname, in json_manifest_finalize_file()
493 json_manifest_parse_failure(parse->context, in json_manifest_finalize_file()
495 parse->pathname[raw_length] = '\0'; in json_manifest_finalize_file()
496 pfree(parse->encoded_pathname); in json_manifest_finalize_file()
497 parse->encoded_pathname = NULL; in json_manifest_finalize_file()
501 size = strtoul(parse->size, &ep, 10); in json_manifest_finalize_file()
503 json_manifest_parse_failure(parse->context, in json_manifest_finalize_file()
507 if (parse->algorithm == NULL) in json_manifest_finalize_file()
509 else if (!pg_checksum_parse_type(parse->algorithm, &checksum_type)) in json_manifest_finalize_file()
511 parse->algorithm); in json_manifest_finalize_file()
514 checksum_string_length = parse->checksum == NULL ? 0 in json_manifest_finalize_file()
515 : strlen(parse->checksum); in json_manifest_finalize_file()
526 !hexdecode_string(checksum_payload, parse->checksum, in json_manifest_finalize_file()
530 parse->pathname, parse->checksum); in json_manifest_finalize_file()
534 context->perfile_cb(context, parse->pathname, size, in json_manifest_finalize_file()
538 if (parse->size != NULL) in json_manifest_finalize_file()
540 pfree(parse->size); in json_manifest_finalize_file()
541 parse->size = NULL; in json_manifest_finalize_file()
543 if (parse->algorithm != NULL) in json_manifest_finalize_file()
545 pfree(parse->algorithm); in json_manifest_finalize_file()
546 parse->algorithm = NULL; in json_manifest_finalize_file()
548 if (parse->checksum != NULL) in json_manifest_finalize_file()
550 pfree(parse->checksum); in json_manifest_finalize_file()
551 parse->checksum = NULL; in json_manifest_finalize_file()
562 json_manifest_finalize_wal_range(JsonManifestParseState *parse) in json_manifest_finalize_wal_range() argument
564 JsonManifestParseContext *context = parse->context; in json_manifest_finalize_wal_range()
571 if (parse->timeline == NULL) in json_manifest_finalize_wal_range()
572 json_manifest_parse_failure(parse->context, "missing timeline"); in json_manifest_finalize_wal_range()
573 if (parse->start_lsn == NULL) in json_manifest_finalize_wal_range()
574 json_manifest_parse_failure(parse->context, "missing start LSN"); in json_manifest_finalize_wal_range()
575 if (parse->end_lsn == NULL) in json_manifest_finalize_wal_range()
576 json_manifest_parse_failure(parse->context, "missing end LSN"); in json_manifest_finalize_wal_range()
579 tli = strtoul(parse->timeline, &ep, 10); in json_manifest_finalize_wal_range()
581 json_manifest_parse_failure(parse->context, in json_manifest_finalize_wal_range()
583 if (!parse_xlogrecptr(&start_lsn, parse->start_lsn)) in json_manifest_finalize_wal_range()
584 json_manifest_parse_failure(parse->context, in json_manifest_finalize_wal_range()
586 if (!parse_xlogrecptr(&end_lsn, parse->end_lsn)) in json_manifest_finalize_wal_range()
587 json_manifest_parse_failure(parse->context, in json_manifest_finalize_wal_range()
594 if (parse->timeline != NULL) in json_manifest_finalize_wal_range()
596 pfree(parse->timeline); in json_manifest_finalize_wal_range()
597 parse->timeline = NULL; in json_manifest_finalize_wal_range()
599 if (parse->start_lsn != NULL) in json_manifest_finalize_wal_range()
601 pfree(parse->start_lsn); in json_manifest_finalize_wal_range()
602 parse->start_lsn = NULL; in json_manifest_finalize_wal_range()
604 if (parse->end_lsn != NULL) in json_manifest_finalize_wal_range()
606 pfree(parse->end_lsn); in json_manifest_finalize_wal_range()
607 parse->end_lsn = NULL; in json_manifest_finalize_wal_range()
619 verify_manifest_checksum(JsonManifestParseState *parse, char *buffer, in verify_manifest_checksum() argument
622 JsonManifestParseContext *context = parse->context; in verify_manifest_checksum()
648 json_manifest_parse_failure(parse->context, in verify_manifest_checksum()
651 json_manifest_parse_failure(parse->context, in verify_manifest_checksum()
660 if (parse->manifest_checksum == NULL) in verify_manifest_checksum()
661 context->error_cb(parse->context, "manifest has no checksum"); in verify_manifest_checksum()
662 if (strlen(parse->manifest_checksum) != PG_SHA256_DIGEST_LENGTH * 2 || in verify_manifest_checksum()
663 !hexdecode_string(manifest_checksum_expected, parse->manifest_checksum, in verify_manifest_checksum()
666 parse->manifest_checksum); in verify_manifest_checksum()