[PECL-CVS] [pecl-web_services-oauth] memory-safety-audit: memory audit fixes
[email protected] (Rasmus Lerdorf) Sun, 5 Apr 2026 00:52:13 +0000
| Newsgroups | php.pecl.cvs |
|---|---|
| Message-ID | <[email protected]> |
Author: Rasmus Lerdorf (rlerdorf)
Date: 2026-04-04T20:52:08-04:00
Commit: https://github.com/php/pecl-web_services-oauth/commit/32a0c7e22ebf935be772208cc61a52fc602be8f1
Raw diff: https://github.com/php/pecl-web_services-oauth/commit/32a0c7e22ebf935be772208cc61a52fc602be8f1.diff
memory audit fixes
Changed paths:
M oauth.c
M provider.c
Diff:
diff --git a/oauth.c b/oauth.c
index af2acfd..7b0aa98 100644
--- a/oauth.c
+++ b/oauth.c
@@ -1132,15 +1132,16 @@ long make_req_curl(php_so_object *soo, const char *url, const smart_string *payl
}
for(i=0; i < soo->multipart_files_num; i++) {
- char *type = NULL, *filename = NULL, *postval, *postval_orig;
+ char *type = NULL, *filename = NULL, *postval, *postval_orig, *param_name;
curl_mimepart *part;
/* swiped from ext/curl/interface.c to help with consistency */
postval_orig = postval = estrdup(soo->multipart_files[i]);
+ param_name = soo->multipart_params[i];
- if (postval[0] == '@' && soo->multipart_params[i][0] == '@') {
+ if (postval[0] == '@' && param_name[0] == '@') {
/* :< (chomp) @ */
- ++soo->multipart_params[i];
+ ++param_name;
++postval;
if((type = (char *) php_memnstr(postval, ";type=", sizeof(";type=") - 1, postval + strlen(soo->multipart_files[i]) - 1))) {
@@ -1166,7 +1167,7 @@ long make_req_curl(php_so_object *soo, const char *url, const smart_string *payl
efree(postval_orig);
goto cleanup;
}
- mres = curl_mime_name(part, soo->multipart_params[i]);
+ mres = curl_mime_name(part, param_name);
if (mres == CURLE_OK) mres = curl_mime_filedata(part, postval);
if (mres == CURLE_OK && filename) mres = curl_mime_filename(part, filename + sizeof(";filename=") - 1);
if (mres == CURLE_OK) mres = curl_mime_type(part, type ? type + sizeof(";type=") - 1 : "application/octet-stream");
@@ -1185,7 +1186,7 @@ long make_req_curl(php_so_object *soo, const char *url, const smart_string *payl
efree(postval_orig);
goto cleanup;
}
- mres = curl_mime_name(part, soo->multipart_params[i]);
+ mres = curl_mime_name(part, param_name);
if (mres == CURLE_OK) mres = curl_mime_data(part, postval, CURL_ZERO_TERMINATED);
if (mres != CURLE_OK) {
char *em;
@@ -1204,12 +1205,13 @@ long make_req_curl(php_so_object *soo, const char *url, const smart_string *payl
int i;
for(i=0; i < soo->multipart_files_num; i++) {
- char *type = NULL, *filename = NULL, *postval, *postval_orig;
+ char *type = NULL, *filename = NULL, *postval, *postval_orig, *param_name;
postval_orig = postval = estrdup(soo->multipart_files[i]);
+ param_name = soo->multipart_params[i];
- if (postval[0] == '@' && soo->multipart_params[i][0] == '@') {
- ++soo->multipart_params[i];
+ if (postval[0] == '@' && param_name[0] == '@') {
+ ++param_name;
++postval;
if((type = (char *) php_memnstr(postval, ";type=", sizeof(";type=") - 1, postval + strlen(soo->multipart_files[i]) - 1))) {
@@ -1230,24 +1232,24 @@ long make_req_curl(php_so_object *soo, const char *url, const smart_string *payl
if (filename) {
curl_formadd(&ff, &lf,
- CURLFORM_COPYNAME, soo->multipart_params[i],
- CURLFORM_NAMELENGTH, (long)strlen(soo->multipart_params[i]),
+ CURLFORM_COPYNAME, param_name,
+ CURLFORM_NAMELENGTH, (long)strlen(param_name),
CURLFORM_FILENAME, filename + sizeof(";filename=") - 1,
CURLFORM_CONTENTTYPE, type ? type + sizeof(";type=") - 1 : "application/octet-stream",
CURLFORM_FILE, postval,
CURLFORM_END);
} else {
curl_formadd(&ff, &lf,
- CURLFORM_COPYNAME, soo->multipart_params[i],
- CURLFORM_NAMELENGTH, (long)strlen(soo->multipart_params[i]),
+ CURLFORM_COPYNAME, param_name,
+ CURLFORM_NAMELENGTH, (long)strlen(param_name),
CURLFORM_CONTENTTYPE, type ? type + sizeof(";type=") - 1 : "application/octet-stream",
CURLFORM_FILE, postval,
CURLFORM_END);
}
} else {
curl_formadd(&ff, &lf,
- CURLFORM_COPYNAME, soo->multipart_params[i],
- CURLFORM_NAMELENGTH, (long)strlen(soo->multipart_params[i]),
+ CURLFORM_COPYNAME, param_name,
+ CURLFORM_NAMELENGTH, (long)strlen(param_name),
CURLFORM_COPYCONTENTS, postval,
CURLFORM_CONTENTSLENGTH, (long)strlen(postval),
CURLFORM_END);
diff --git a/provider.c b/provider.c
index 757f965..3f73aca 100644
--- a/provider.c
+++ b/provider.c
@@ -211,12 +211,19 @@ static int oauth_provider_parse_auth_header(php_oauth_provider *sop, char *auth_
size_t decoded_len;
if(!auth_header || strncasecmp(auth_header, "oauth", 4) || !sop) {
+#if PHP_VERSION_ID >= 70400
+ zend_string_release(s_auth_header);
+#endif
+ zend_string_release(regex);
return FAILURE;
}
/* pass "OAuth " */
auth_header += 5;
if ((pce = pcre_get_compiled_regex_cache(regex)) == NULL) {
+#if PHP_VERSION_ID >= 70400
+ zend_string_release(s_auth_header);
+#endif
zend_string_release(regex);
return FAILURE;
}
@@ -246,6 +253,9 @@ static int oauth_provider_parse_auth_header(php_oauth_provider *sop, char *auth_
);
if (0 == Z_LVAL(return_value)) {
+#if PHP_VERSION_ID >= 70400
+ zend_string_release(s_auth_header);
+#endif
return FAILURE;
}
@@ -277,6 +287,9 @@ static int oauth_provider_parse_auth_header(php_oauth_provider *sop, char *auth_
zval_ptr_dtor(&decoded_val);
zval_ptr_dtor(&return_value);
zval_ptr_dtor(&subpats);
+#if PHP_VERSION_ID >= 70400
+ zend_string_release(s_auth_header);
+#endif
return FAILURE;
}
zval_ptr_dtor(&decoded_val);
@@ -285,6 +298,9 @@ static int oauth_provider_parse_auth_header(php_oauth_provider *sop, char *auth_
zval_ptr_dtor(&return_value);
zval_ptr_dtor(&subpats);
+#if PHP_VERSION_ID >= 70400
+ zend_string_release(s_auth_header);
+#endif
return SUCCESS;
}