mantis 6738: change parsing of the HTTP_CUSTOM_HEADER parameter and ignore entries in excess of 8 on the request

httptests
UbitUmarov 2017-04-26 07:19:44 +01:00
parent 2b8cdb2a75
commit ce3af94a69
2 changed files with 14 additions and 11 deletions

View File

@ -223,20 +223,16 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest
if (parms.Length - i < 2) if (parms.Length - i < 2)
break; break;
//Have we reached the end of the list of headers?
//End is marked by a string with a single digit.
//We already know we have at least one parameter
//so it is safe to do this check at top of loop.
if (Char.IsDigit(parms[i][0]))
break;
if (htc.HttpCustomHeaders == null) if (htc.HttpCustomHeaders == null)
htc.HttpCustomHeaders = new List<string>(); htc.HttpCustomHeaders = new List<string>();
htc.HttpCustomHeaders.Add(parms[i]); htc.HttpCustomHeaders.Add(parms[i]);
htc.HttpCustomHeaders.Add(parms[i+1]); htc.HttpCustomHeaders.Add(parms[i+1]);
int nexti = i + 2;
if (nexti >= parms.Length || Char.IsDigit(parms[nexti][0]))
break;
i += 2; i = nexti;
} }
break; break;

View File

@ -13405,6 +13405,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
List<string> param = new List<string>(); List<string> param = new List<string>();
bool ok; bool ok;
Int32 flag; Int32 flag;
int nCustomHeaders = 0;
for (int i = 0; i < parameters.Data.Length; i += 2) for (int i = 0; i < parameters.Data.Length; i += 2)
{ {
@ -13431,6 +13432,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
//Second Life documentation for llHTTPRequest. //Second Life documentation for llHTTPRequest.
for (int count = 1; count <= 8; ++count) for (int count = 1; count <= 8; ++count)
{ {
if(nCustomHeaders >= 8)
{
Error("llHTTPRequest", "Max number of custom headers is 8, excess ignored");
break;
}
//Enough parameters remaining for (another) header? //Enough parameters remaining for (another) header?
if (parameters.Data.Length - i < 2) if (parameters.Data.Length - i < 2)
{ {
@ -13445,15 +13452,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
param.Add(parameters.Data[i].ToString()); param.Add(parameters.Data[i].ToString());
param.Add(parameters.Data[i+1].ToString()); param.Add(parameters.Data[i+1].ToString());
nCustomHeaders++;
//Have we reached the end of the list of headers? //Have we reached the end of the list of headers?
//End is marked by a string with a single digit. //End is marked by a string with a single digit.
if (i + 2 >= parameters.Data.Length || if (i + 2 >= parameters.Data.Length ||
Char.IsDigit(parameters.Data[i].ToString()[0])) Char.IsDigit(parameters.Data[i + 2].ToString()[0]))
{ {
break; break;
} }
i += 2; i += 2;
} }
} }