[fpc-pascal] [fcl-web] [jsonrpc] [fpjsonrpc.pp] DoCheckParamArray in TCustomJSONRPCHandler

Michael Van Canneyt michael at freepascal.org
Fri Feb 23 08:55:50 CET 2024



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.


More information about the fpc-pascal mailing list