ext/soap: Windows handles query strings differently
Personne n'a encore pris cette issue.
- Langage dominant
- C
- Étoiles
- 40.4k
- Forks
- 8.2k
- Merge moyen
- 2 j 13 h
- PR mergées (30 j)
- 96
Description
If I'm right, that would also happen on other OSs if ext/soap is built as shared library.
Nope, has nothing to do with shared libs – Windows specific issue.
The problem is that SoapServer expects "wsdl" as query string to deliver the WSDL. However, if a query string doesn't contain an equals sign, command line options are ignored on Windows. So either hack-around by making SoapServer more deliberate:
ext/soap/soap.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/ext/soap/soap.c b/ext/soap/soap.c
index 48a7fc8885..d7dfc4ecd5 100644
--- a/ext/soap/soap.c
+++ b/ext/soap/soap.c
@@ -1297,7 +1297,8 @@ PHP_METHOD(SoapServer, handle)
if (SG(request_info).request_method &&
strcmp(SG(request_info).request_method, "GET") == 0 &&
SG(request_info).query_string &&
- stricmp(SG(request_info).query_string, "wsdl") == 0) {
+ (stricmp(SG(request_info).query_string, "wsdl") == 0 ||
+ stricmp(SG(request_info).query_string, "wsdl=") == 0)) {
if (service->sdl) {
/*
or apply a proper fix for the tests, namely to spawn a php-cgi process with the command line options, and then send a CGI request and verify the response. Certainly possible, but I'm not sure it's worth the effort.
Originally posted by @cmb69 in https://github.com/php/php-src/issues/17432#issuecomment-2589593847
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez dans ext/soap/soap.c, au niveau de SoapServer::handle, et examinez l'impact du comportement de la chaîne de requête Windows CGI sur la requête "wsdl". Comparez la modification proposée pour gérer le cas dans un seul fichier avec l'approche alternative de test CGI décrite dans l'issue. Le travail est terminé lorsque Windows sert le WSDL pour la chaîne de requête concernée et que le comportement est couvert par des tests de régression appropriés.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- c, php
- Domaine
- api, backend, operating-systems, testing-qa
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100