summaryrefslogtreecommitdiffstats
path: root/0828b70df7606b599785b3de1c15248d3e463b95.patch
blob: 040983c3c05a78eebbdb37be24926a3d34a74b86 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
From 0828b70df7606b599785b3de1c15248d3e463b95 Mon Sep 17 00:00:00 2001
From: Remi Collet <remi@php.net>
Date: Thu, 28 Jun 2018 10:46:29 +0200
Subject: [PATCH] fix for PHP 7.3: fields of php_url struct change from char *
 to zend_string *

---
 oauth.c     | 20 ++++++++++----------
 php_oauth.h | 10 ++++++++++
 provider.c  |  2 +-
 3 files changed, 21 insertions(+), 11 deletions(-)

diff --git a/oauth.c b/oauth.c
index 198e2cb..27f158f 100644
--- a/oauth.c
+++ b/oauth.c
@@ -577,14 +577,14 @@ zend_string *oauth_generate_sig_base(php_so_object *soo, const char *http_method
 			php_url_free(urlparts);
 			return NULL;
 		}
-		php_strtolower(urlparts->scheme, strlen(urlparts->scheme));
-		php_strtolower(urlparts->host, strlen(urlparts->host));
-		smart_string_appends(&sbuf, urlparts->scheme);
+		php_strtolower(OAUTH_URL_STR(urlparts->scheme), OAUTH_URL_LEN(urlparts->scheme));
+		php_strtolower(OAUTH_URL_STR(urlparts->host), OAUTH_URL_LEN(urlparts->host));
+		smart_string_appends(&sbuf, OAUTH_URL_STR(urlparts->scheme));
 		smart_string_appends(&sbuf, "://");
-		smart_string_appends(&sbuf, urlparts->host);
+		smart_string_appends(&sbuf, OAUTH_URL_STR(urlparts->host));
 
-		if (urlparts->port && ((!strcmp("http", urlparts->scheme) && OAUTH_HTTP_PORT != urlparts->port)
-					|| (!strcmp("https", urlparts->scheme) && OAUTH_HTTPS_PORT != urlparts->port))) {
+		if (urlparts->port && ((!strcmp("http", OAUTH_URL_STR(urlparts->scheme)) && OAUTH_HTTP_PORT != urlparts->port)
+					|| (!strcmp("https", OAUTH_URL_STR(urlparts->scheme)) && OAUTH_HTTPS_PORT != urlparts->port))) {
 			spprintf(&s_port, 0, "%d", urlparts->port);
 			smart_string_appendc(&sbuf, ':');
 			smart_string_appends(&sbuf, s_port);
@@ -593,7 +593,7 @@ zend_string *oauth_generate_sig_base(php_so_object *soo, const char *http_method
 
 		if (urlparts->path) {
 			smart_string squery = {0};
-			smart_string_appends(&sbuf, urlparts->path);
+			smart_string_appends(&sbuf, OAUTH_URL_STR(urlparts->path));
 			smart_string_0(&sbuf);
 
 			array_init(&params);
@@ -608,7 +608,7 @@ zend_string *oauth_generate_sig_base(php_so_object *soo, const char *http_method
 			}
 
 			if (urlparts->query) {
-				query = estrdup(urlparts->query);
+				query = estrdup(OAUTH_URL_STR(urlparts->query));
 				oauth_parse_str(query, &params);
 				efree(query);
 			}
@@ -1364,11 +1364,11 @@ static void oauth_apply_url_redirect(smart_string *surl, const char *location) /
 		/* rebuild url from scratch */
 		smart_string_free(surl);
 		if (urlparts->scheme) {
-			smart_string_appends(surl, urlparts->scheme);
+			smart_string_appends(surl, OAUTH_URL_STR(urlparts->scheme));
 			smart_string_appends(surl, "://");
 		}
 		if (urlparts->host) {
-			smart_string_appends(surl, urlparts->host);
+			smart_string_appends(surl, OAUTH_URL_STR(urlparts->host));
 		}
 		if (urlparts->port) {
 			smart_string_appendc(surl, ':');
diff --git a/php_oauth.h b/php_oauth.h
index cc7da09..02d68d8 100644
--- a/php_oauth.h
+++ b/php_oauth.h
@@ -332,6 +332,16 @@ zend_string *soo_sign(php_so_object *soo, char *message, zval *cs, zval *ts, con
 oauth_sig_context *oauth_create_sig_context(const char *sigmethod);
 zend_string *oauth_url_encode(char *url, int url_len);
 
+
+// Compatibility macros
+#if PHP_VERSION_ID < 70300
+#define OAUTH_URL_STR(a) (a)
+#define OAUTH_URL_LEN(a) strlen(a)
+#else
+#define OAUTH_URL_STR(a) ZSTR_VAL(a)
+#define OAUTH_URL_LEN(a) ZSTR_LEN(a)
+#endif
+
 #endif
 
 /**
diff --git a/provider.c b/provider.c
index 0170ee1..41eb3be 100644
--- a/provider.c
+++ b/provider.c
@@ -132,7 +132,7 @@ static int oauth_provider_token_required(zval *provider_obj, char* uri)
 			if (reqtoken_path[0]=='/') {
 				/* match against relative url */
 				php_url *urlparts = php_url_parse_ex(uri, strlen(uri));
-				uri_matched = urlparts && 0==strncmp(urlparts->path, reqtoken_path, strlen(reqtoken_path));
+				uri_matched = urlparts && 0==strncmp(OAUTH_URL_STR(urlparts->path), reqtoken_path, strlen(reqtoken_path));
 				php_url_free(urlparts);
 			} else {
 				/* match against full uri */