From 6fcf2dce8d519b4fee2b7b891e3710061cca981c Mon Sep 17 00:00:00 2001 From: David Robillard Date: Wed, 13 Jun 2018 17:11:13 -0400 Subject: Remove escape parameter from serd_new_file_uri Since characters are escaped because they are not valid characters in a URI, any use of this function without escaping is problematic at best. --- serd/serd.h | 7 +++---- src/node.c | 4 ++-- src/serdi.c | 2 +- tests/serd_test.c | 15 ++++++--------- 4 files changed, 12 insertions(+), 16 deletions(-) diff --git a/serd/serd.h b/serd/serd.h index fc2c4522..f2468157 100644 --- a/serd/serd.h +++ b/serd/serd.h @@ -625,15 +625,14 @@ serd_node_resolve(const SerdNode* node, const SerdNode* base); /** Create a new file URI node from a file system path and optional hostname. - Backslashes in Windows paths will be converted and '%' will always be - percent encoded. If `escape` is true, all other invalid characters will be - percent encoded as well. + Backslashes in Windows paths will be converted, and other characters will be + percent encoded as necessary. If `path` is relative, `hostname` is ignored. */ SERD_API SerdNode* -serd_new_file_uri(const char* path, const char* hostname, bool escape); +serd_new_file_uri(const char* path, const char* hostname); /** Create a new URI from a string, relative to a base URI. diff --git a/src/node.c b/src/node.c index a5baa1ad..0b876646 100644 --- a/src/node.c +++ b/src/node.c @@ -453,7 +453,7 @@ is_uri_path_char(const char c) } SerdNode* -serd_new_file_uri(const char* path, const char* hostname, bool escape) +serd_new_file_uri(const char* path, const char* hostname) { const size_t path_len = strlen(path); const size_t hostname_len = hostname ? strlen(hostname) : 0; @@ -474,7 +474,7 @@ serd_new_file_uri(const char* path, const char* hostname, bool escape) serd_buffer_sink("/", 1, 1, &buffer); } else if (path[i] == '%') { serd_buffer_sink("%%", 1, 2, &buffer); - } else if (!escape || is_uri_path_char(path[i])) { + } else if (is_uri_path_char(path[i])) { serd_buffer_sink(path + i, 1, 1, &buffer); } else { char escape_str[4] = { '%', 0, 0, 0 }; diff --git a/src/serdi.c b/src/serdi.c index d8d8437f..0c304d01 100644 --- a/src/serdi.c +++ b/src/serdi.c @@ -199,7 +199,7 @@ main(int argc, char** argv) if (a < argc) { // Base URI given on command line base = serd_new_uri((const char*)argv[a]); } else if (!from_string && !from_stdin) { // Use input file URI - base = serd_new_file_uri(input, NULL, true); + base = serd_new_file_uri(input, NULL); } FILE* out_fd = stdout; diff --git a/tests/serd_test.c b/tests/serd_test.c index cc541da2..2201242c 100644 --- a/tests/serd_test.c +++ b/tests/serd_test.c @@ -82,7 +82,6 @@ test_sink(void* handle, static void test_file_uri(const char* hostname, const char* path, - bool escape, const char* expected_uri, const char* expected_path) { @@ -90,7 +89,7 @@ test_file_uri(const char* hostname, expected_path = path; } - SerdNode* node = serd_new_file_uri(path, hostname, escape); + SerdNode* node = serd_new_file_uri(path, hostname); const char* node_str = serd_node_get_string(node); char* out_hostname = NULL; char* out_path = serd_file_uri_parse(node_str, &out_hostname); @@ -332,17 +331,15 @@ test_strerror(void) static void test_uri_parsing(void) { - test_file_uri(NULL, "C:/My 100%", true, + test_file_uri(NULL, "C:/My 100%", "file:///C:/My%20100%%", NULL); - test_file_uri("ahost", "C:\\Pointless Space", true, + test_file_uri("ahost", "C:\\Pointless Space", "file://ahost/C:/Pointless%20Space", "C:/Pointless Space"); - test_file_uri(NULL, "/foo/bar", true, + test_file_uri(NULL, "/foo/bar", "file:///foo/bar", NULL); - test_file_uri("bhost", "/foo/bar", true, + test_file_uri("bhost", "/foo/bar", "file://bhost/foo/bar", NULL); - test_file_uri(NULL, "a/relative path", false, - "a/relative path", NULL); - test_file_uri(NULL, "a/relative ", true, + test_file_uri(NULL, "a/relative ", "a/relative%20%3Cpath%3E", NULL); // Test tolerance of parsing junk URI escapes -- cgit v1.2.1