From 24d7ed6bcfdc340874f9cdf7eb5a056567668a08 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sat, 12 May 2018 20:39:23 +0200 Subject: Use fixed size stack --- src/serdi.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'src/serdi.c') diff --git a/src/serdi.c b/src/serdi.c index cdf96c69..63a0e842 100644 --- a/src/serdi.c +++ b/src/serdi.c @@ -20,9 +20,11 @@ #include "serd/serd.h" +#include #include +#include #include -#include +#include #define SERDI_ERROR(msg) fprintf(stderr, "serdi: " msg); #define SERDI_ERRORF(fmt, ...) fprintf(stderr, "serdi: " fmt, __VA_ARGS__); @@ -93,6 +95,7 @@ print_usage(const char* name, bool error) fprintf(os, " -f Keep full URIs in input (don't qualify).\n"); fprintf(os, " -h Display this help and exit.\n"); fprintf(os, " -i SYNTAX Input syntax: turtle/ntriples/trig/nquads.\n"); + fprintf(os, " -k BYTES Parser stack size.\n"); fprintf(os, " -l Lax (non-strict) parsing.\n"); fprintf(os, " -o SYNTAX Output syntax: turtle/ntriples/nquads.\n"); fprintf(os, " -p PREFIX Add PREFIX to blank node IDs.\n"); @@ -133,6 +136,7 @@ main(int argc, char** argv) bool full_uris = false; bool lax = false; bool quiet = false; + long stack_size = 4194304; const char* add_prefix = NULL; const char* chop_prefix = NULL; const char* root_uri = NULL; @@ -167,6 +171,15 @@ main(int argc, char** argv) } else if (!(input_syntax = get_syntax(argv[a]))) { return print_usage(argv[0], true); } + } else if (argv[a][1] == 'k') { + if (++a == argc) { + return missing_arg(argv[0], 'k'); + } + stack_size = strtol(argv[a], NULL, 10); + if (stack_size <= 0 || stack_size == LONG_MAX) { + SERDI_ERRORF("stack size `%ld' out of range\n", stack_size); + return 1; + } } else if (argv[a][1] == 'o') { if (++a == argc) { return missing_arg(argv[0], 'o'); @@ -250,8 +263,8 @@ main(int argc, char** argv) (SerdWriteFunc)fwrite, out_fd); - SerdReader* reader = - serd_reader_new(world, input_syntax, serd_writer_get_sink(writer)); + SerdReader* reader = serd_reader_new( + world, input_syntax, serd_writer_get_sink(writer), stack_size); serd_reader_set_strict(reader, !lax); if (quiet) { -- cgit v1.2.1