On Thu, 22 Feb 2024, Michael Anochin via fpc-pascal wrote:

Hello,

the TCustomJSONRPCHandler.DoCheckParamArray in fpjsonrpc.pp causes an
exception with the message "List index (0) out of bounds".

This happens, for example, if ParamArray is empty and there are not
required parameter in ParamDef (required not set).  In that case
ParamArray[i] not exists, so Param:=ParamArray[i] raises "index out of
bounds" exception.

I would like to check this before assignment, may be like this

procedure TCustomJSONRPCHandler.DoCheckParamArray(const ParamArray:
TJSONArray);
var
 I : Integer;
 Param: TJSONData;
 Def : TJSONParamDef;

begin
 for I:=0 to ParamDefs.Count-1 do
   begin
   Def:=ParamDefs[i];
   if I>=ParamArray.Count then
     if ParamDefs[i].Required then
       JSONRPCParamError(SErrParamsRequiredParamNotFound,[def.Name]);
   //Check ParamArray.Count first
   if (I<ParamArray.Count) then begin //<< added
     Param:=ParamArray[i];
     // jtUnkown accepts all data types
     if (def.DataType<>jtUnknown) and not
(Param.JSONType=def.DataType) then

JSONRPCParamError(SErrParamsDataTypeMismatch,[def.Name,JSONTypeName(def.DataType),JSONTypeName(Param.JSONType)]);

As it happens, I was working on adding some things to fpjsonrpc, so I fixed this issue by putting the code in an else branch. I pushed that change.

Michael.
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to