Merge pull request #13804 from chrysn-pull-requests/uri-test-isabsolute
uri_parser: Fix and test non-relative recognition
This commit is contained in:
commit
abd399b934
@ -219,6 +219,17 @@ bool uri_parser_is_absolute(const char *uri, size_t uri_len)
|
|||||||
/* relative */
|
/* relative */
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
for (int i = 0; &uri[i] < colon; ++i) {
|
||||||
|
if (!(((uri[i] >= 'A') && (uri[i] <= 'Z')) ||
|
||||||
|
((uri[i] >= 'a') && (uri[i] <= 'z')) ||
|
||||||
|
((uri[i] >= '0') && (uri[i] <= '9')) ||
|
||||||
|
(uri[i] == '+') ||
|
||||||
|
(uri[i] == '-') ||
|
||||||
|
(uri[i] == '.'))) {
|
||||||
|
/* relative */
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* absolute */
|
/* absolute */
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@ -13,6 +13,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <stdbool.h>
|
||||||
#include "embUnit.h"
|
#include "embUnit.h"
|
||||||
|
|
||||||
#include "uri_parser.h"
|
#include "uri_parser.h"
|
||||||
@ -20,9 +21,9 @@
|
|||||||
#include "unittests-constants.h"
|
#include "unittests-constants.h"
|
||||||
#include "tests-uri_parser.h"
|
#include "tests-uri_parser.h"
|
||||||
|
|
||||||
#define VEC(u, s, us, h, po, pa, q, e) \
|
#define VEC(u, f, s, us, h, po, pa, q, e) \
|
||||||
{ .uri = u, .scheme = s, .userinfo = us, .host = h, .port = po, \
|
{ .uri = u, .full_uri = f, .scheme = s, .userinfo = us, .host = h, \
|
||||||
.path = pa, .query = q, .expected = e}
|
.port = po, .path = pa, .query = q, .expected = e}
|
||||||
|
|
||||||
#define VEC_CHECK(comp, i, vec_msg) \
|
#define VEC_CHECK(comp, i, vec_msg) \
|
||||||
do { \
|
do { \
|
||||||
@ -51,6 +52,7 @@
|
|||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char uri[64];
|
char uri[64];
|
||||||
|
bool full_uri;
|
||||||
char scheme[8];
|
char scheme[8];
|
||||||
char userinfo[16];
|
char userinfo[16];
|
||||||
char host[16];
|
char host[16];
|
||||||
@ -65,9 +67,11 @@ typedef struct {
|
|||||||
scheme, userinfo, host, port,
|
scheme, userinfo, host, port,
|
||||||
path, query, expected return value)
|
path, query, expected return value)
|
||||||
*/
|
*/
|
||||||
static const validate_t validate_uris[26] = {
|
static const validate_t validate_uris[27] = {
|
||||||
/* uri to parse */
|
/* uri to parse */
|
||||||
VEC("coap://RIOT:test@[2001:db8::1]:5683/.well-known/core?v=1",
|
VEC("coap://RIOT:test@[2001:db8::1]:5683/.well-known/core?v=1",
|
||||||
|
/* is URI */
|
||||||
|
true,
|
||||||
/* parsed scheme */
|
/* parsed scheme */
|
||||||
"coap",
|
"coap",
|
||||||
/* parsed userinfo */
|
/* parsed userinfo */
|
||||||
@ -83,6 +87,7 @@ static const validate_t validate_uris[26] = {
|
|||||||
/* expected return value */
|
/* expected return value */
|
||||||
0),
|
0),
|
||||||
VEC("/.well-known/core?v=1",
|
VEC("/.well-known/core?v=1",
|
||||||
|
false,
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
@ -91,6 +96,7 @@ static const validate_t validate_uris[26] = {
|
|||||||
"v=1",
|
"v=1",
|
||||||
0),
|
0),
|
||||||
VEC("coap://R@[2001:db8::1]:5own/v=1",
|
VEC("coap://R@[2001:db8::1]:5own/v=1",
|
||||||
|
true,
|
||||||
"coap",
|
"coap",
|
||||||
"R",
|
"R",
|
||||||
"[2001:db8::1]",
|
"[2001:db8::1]",
|
||||||
@ -99,6 +105,7 @@ static const validate_t validate_uris[26] = {
|
|||||||
"",
|
"",
|
||||||
0),
|
0),
|
||||||
VEC("coap://R@[2001:db8::1]:5own/:v=1",
|
VEC("coap://R@[2001:db8::1]:5own/:v=1",
|
||||||
|
true,
|
||||||
"coap",
|
"coap",
|
||||||
"R",
|
"R",
|
||||||
"[2001:db8::1]",
|
"[2001:db8::1]",
|
||||||
@ -107,6 +114,7 @@ static const validate_t validate_uris[26] = {
|
|||||||
"",
|
"",
|
||||||
0),
|
0),
|
||||||
VEC("cap://R@[2001:db8::1]:5own/?v=1",
|
VEC("cap://R@[2001:db8::1]:5own/?v=1",
|
||||||
|
true,
|
||||||
"cap",
|
"cap",
|
||||||
"R",
|
"R",
|
||||||
"[2001:db8::1]",
|
"[2001:db8::1]",
|
||||||
@ -115,6 +123,7 @@ static const validate_t validate_uris[26] = {
|
|||||||
"v=1",
|
"v=1",
|
||||||
0),
|
0),
|
||||||
VEC("oap://Y2001:db8::1]:5own/av=1",
|
VEC("oap://Y2001:db8::1]:5own/av=1",
|
||||||
|
true,
|
||||||
"oap",
|
"oap",
|
||||||
"",
|
"",
|
||||||
"Y2001:db8::1]",
|
"Y2001:db8::1]",
|
||||||
@ -123,6 +132,7 @@ static const validate_t validate_uris[26] = {
|
|||||||
"",
|
"",
|
||||||
0),
|
0),
|
||||||
VEC("//Rb[ʰ00J:d/5v=0",
|
VEC("//Rb[ʰ00J:d/5v=0",
|
||||||
|
false,
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
@ -131,6 +141,7 @@ static const validate_t validate_uris[26] = {
|
|||||||
"",
|
"",
|
||||||
0),
|
0),
|
||||||
VEC("coap://oap://P@[2001:b",
|
VEC("coap://oap://P@[2001:b",
|
||||||
|
true,
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
@ -139,6 +150,7 @@ static const validate_t validate_uris[26] = {
|
|||||||
"",
|
"",
|
||||||
-1),
|
-1),
|
||||||
VEC("coap:///R@[2008::1]:5own//R@[2008::1]:5own/?v=1",
|
VEC("coap:///R@[2008::1]:5own//R@[2008::1]:5own/?v=1",
|
||||||
|
true,
|
||||||
"coap",
|
"coap",
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
@ -147,6 +159,7 @@ static const validate_t validate_uris[26] = {
|
|||||||
"v=1",
|
"v=1",
|
||||||
0),
|
0),
|
||||||
VEC("coaP://R/RZ[2001[8:01[8::1]:5o:1]:5oTMv=1",
|
VEC("coaP://R/RZ[2001[8:01[8::1]:5o:1]:5oTMv=1",
|
||||||
|
true,
|
||||||
"coaP",
|
"coaP",
|
||||||
"",
|
"",
|
||||||
"R",
|
"R",
|
||||||
@ -155,6 +168,7 @@ static const validate_t validate_uris[26] = {
|
|||||||
"",
|
"",
|
||||||
0),
|
0),
|
||||||
VEC("coap://R@////////////////7///v=1",
|
VEC("coap://R@////////////////7///v=1",
|
||||||
|
true,
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
@ -163,14 +177,16 @@ static const validate_t validate_uris[26] = {
|
|||||||
"",
|
"",
|
||||||
-1),
|
-1),
|
||||||
VEC("coa[:////[2001:db5ow:5own/Ov=1",
|
VEC("coa[:////[2001:db5ow:5own/Ov=1",
|
||||||
"coa[",
|
false,
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
"//[2001:db5ow:5own/Ov=1",
|
"",
|
||||||
|
"coa[:////[2001:db5ow:5own/Ov=1",
|
||||||
"",
|
"",
|
||||||
0),
|
0),
|
||||||
VEC("tel:+1-816-555-1212",
|
VEC("tel:+1-816-555-1212",
|
||||||
|
true,
|
||||||
"tel",
|
"tel",
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
@ -179,6 +195,7 @@ static const validate_t validate_uris[26] = {
|
|||||||
"",
|
"",
|
||||||
0),
|
0),
|
||||||
VEC("sms:+15105550101,+15105550102?body=hello%20there",
|
VEC("sms:+15105550101,+15105550102?body=hello%20there",
|
||||||
|
true,
|
||||||
"sms",
|
"sms",
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
@ -187,6 +204,7 @@ static const validate_t validate_uris[26] = {
|
|||||||
"body=hello%20there",
|
"body=hello%20there",
|
||||||
0),
|
0),
|
||||||
VEC("a",
|
VEC("a",
|
||||||
|
false,
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
@ -195,6 +213,7 @@ static const validate_t validate_uris[26] = {
|
|||||||
"",
|
"",
|
||||||
0),
|
0),
|
||||||
VEC("mailto:test@example.com",
|
VEC("mailto:test@example.com",
|
||||||
|
true,
|
||||||
"mailto",
|
"mailto",
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
@ -203,6 +222,7 @@ static const validate_t validate_uris[26] = {
|
|||||||
"",
|
"",
|
||||||
0),
|
0),
|
||||||
VEC("ftp://ftp.is.co.za/rfc/rfc1808.txt",
|
VEC("ftp://ftp.is.co.za/rfc/rfc1808.txt",
|
||||||
|
true,
|
||||||
"ftp",
|
"ftp",
|
||||||
"",
|
"",
|
||||||
"ftp.is.co.za",
|
"ftp.is.co.za",
|
||||||
@ -211,6 +231,7 @@ static const validate_t validate_uris[26] = {
|
|||||||
"",
|
"",
|
||||||
0),
|
0),
|
||||||
VEC("http://www.ietf.org/rfc/rfc2396.txt",
|
VEC("http://www.ietf.org/rfc/rfc2396.txt",
|
||||||
|
true,
|
||||||
"http",
|
"http",
|
||||||
"",
|
"",
|
||||||
"www.ietf.org",
|
"www.ietf.org",
|
||||||
@ -219,6 +240,7 @@ static const validate_t validate_uris[26] = {
|
|||||||
"",
|
"",
|
||||||
0),
|
0),
|
||||||
VEC("ldap://[2001:db8::7]/c=GB?objectClass?one",
|
VEC("ldap://[2001:db8::7]/c=GB?objectClass?one",
|
||||||
|
true,
|
||||||
"ldap",
|
"ldap",
|
||||||
"",
|
"",
|
||||||
"[2001:db8::7]",
|
"[2001:db8::7]",
|
||||||
@ -227,6 +249,7 @@ static const validate_t validate_uris[26] = {
|
|||||||
"objectClass?one",
|
"objectClass?one",
|
||||||
0),
|
0),
|
||||||
VEC("mailto:John.Doe@example.com",
|
VEC("mailto:John.Doe@example.com",
|
||||||
|
true,
|
||||||
"mailto",
|
"mailto",
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
@ -235,6 +258,7 @@ static const validate_t validate_uris[26] = {
|
|||||||
"",
|
"",
|
||||||
0),
|
0),
|
||||||
VEC("news:comp.infosystems.www.servers.unix",
|
VEC("news:comp.infosystems.www.servers.unix",
|
||||||
|
true,
|
||||||
"news",
|
"news",
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
@ -243,6 +267,7 @@ static const validate_t validate_uris[26] = {
|
|||||||
"",
|
"",
|
||||||
0),
|
0),
|
||||||
VEC("tel:+1-816-555-1212",
|
VEC("tel:+1-816-555-1212",
|
||||||
|
true,
|
||||||
"tel",
|
"tel",
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
@ -251,6 +276,7 @@ static const validate_t validate_uris[26] = {
|
|||||||
"",
|
"",
|
||||||
0),
|
0),
|
||||||
VEC("telnet://192.0.2.16:80/",
|
VEC("telnet://192.0.2.16:80/",
|
||||||
|
true,
|
||||||
"telnet",
|
"telnet",
|
||||||
"",
|
"",
|
||||||
"192.0.2.16",
|
"192.0.2.16",
|
||||||
@ -259,6 +285,7 @@ static const validate_t validate_uris[26] = {
|
|||||||
"",
|
"",
|
||||||
0),
|
0),
|
||||||
VEC("urn:oasis:names:specification:docbook:dtd:xml:4.1.2",
|
VEC("urn:oasis:names:specification:docbook:dtd:xml:4.1.2",
|
||||||
|
true,
|
||||||
"urn",
|
"urn",
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
@ -267,6 +294,7 @@ static const validate_t validate_uris[26] = {
|
|||||||
"",
|
"",
|
||||||
0),
|
0),
|
||||||
VEC("",
|
VEC("",
|
||||||
|
false,
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
@ -275,6 +303,7 @@ static const validate_t validate_uris[26] = {
|
|||||||
"",
|
"",
|
||||||
-1),
|
-1),
|
||||||
VEC("/",
|
VEC("/",
|
||||||
|
false,
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
@ -282,6 +311,15 @@ static const validate_t validate_uris[26] = {
|
|||||||
"/",
|
"/",
|
||||||
"",
|
"",
|
||||||
0),
|
0),
|
||||||
|
VEC("./this:that",
|
||||||
|
false,
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"./this:that",
|
||||||
|
"",
|
||||||
|
0),
|
||||||
};
|
};
|
||||||
|
|
||||||
static char _failure_msg[VEC_MSG_LEN];
|
static char _failure_msg[VEC_MSG_LEN];
|
||||||
@ -291,6 +329,8 @@ static void test_uri_parser__validate(void)
|
|||||||
uri_parser_result_t ures;
|
uri_parser_result_t ures;
|
||||||
for (unsigned i = 0; i < ARRAY_SIZE(validate_uris); i++) {
|
for (unsigned i = 0; i < ARRAY_SIZE(validate_uris); i++) {
|
||||||
int res = uri_parser_process_string(&ures, validate_uris[i].uri);
|
int res = uri_parser_process_string(&ures, validate_uris[i].uri);
|
||||||
|
TEST_ASSERT_EQUAL_INT(validate_uris[i].full_uri,
|
||||||
|
uri_parser_is_absolute_string(validate_uris[i].uri));
|
||||||
TEST_ASSERT_EQUAL_INT(validate_uris[i].expected, res);
|
TEST_ASSERT_EQUAL_INT(validate_uris[i].expected, res);
|
||||||
if (res == 0) {
|
if (res == 0) {
|
||||||
VEC_CHECK(scheme, i, _failure_msg);
|
VEC_CHECK(scheme, i, _failure_msg);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user