[Serdev] [Tracker] Updated: (SER-205) Wrong typecast in module gflags

Jan Janak (JIRA) tracker at iptel.org
Sun Jan 14 17:52:39 UTC 2007


     [ http://tracker.iptel.org/browse/SER-205?page=all ]

Jan Janak updated SER-205:
--------------------------

    Fix Version/s: Ottendorf

> Wrong typecast in module gflags
> -------------------------------
>
>                 Key: SER-205
>                 URL: http://tracker.iptel.org/browse/SER-205
>             Project: SER
>          Issue Type: Bug
>          Components: Unspecified
>    Affects Versions: Ottendorf
>         Environment: 0.10.99-dev64, module/gflags/gflags.c revision 1.19, sr_module.c revision 1.49
>            Priority: Minor
>             Fix For: Ottendorf
>
>
> Functions set_gflag, reset_gflag, is_gflag treat given parameter flag_par as unisgned long int* while fixup_int_1 (i.e. fix_param, respectively) returns an fparam_t*. This results in a strange behavior as documented by Hendrik Scholz in message <459CFD83.9090704 at freenet-ag.de> ("off-by-one error").
> Proposed patch:
> ===================================================================
> RCS file: /cvsroot/ser/sip_router/modules/gflags/gflags.c,v
> retrieving revision 1.19
> diff -u -B -b -r1.19 gflags.c
> --- gflags.c    12 Dec 2006 15:31:08 -0000      1.19
> +++ gflags.c    10 Jan 2007 14:00:56 -0000
> @@ -126,7 +126,12 @@
>  {
>         unsigned long int flag;
>  
> -       flag=*((unsigned long int*)flag_par);
> +       if ( !flag_par || ((fparam_t*)flag_par)->type != FPARAM_INT ) {
> +         LOG(L_ERR, "gflags:set_gflag: Invalid parameter\n");
> +         return -1;
> +       }
> +
> +       flag=((fparam_t*)flag_par)->v.i;
>         (*gflags) |= 1 << flag;
>         return 1;
>  }
> @@ -135,7 +140,12 @@
>  {
>         unsigned long int flag;
>  
> -       flag=*((unsigned long int*)flag_par);
> +       if ( !flag_par || ((fparam_t*)flag_par)->type != FPARAM_INT ) {
> +         LOG(L_ERR, "gflags:reset_gflag: Invalid parameter\n");
> +         return -1;
> +       }
> +
> +       flag=((fparam_t*)flag_par)->v.i;
>         (*gflags) &= ~ (1 << flag);
>         return 1;
>  }
> @@ -144,7 +154,12 @@
>  {
>         unsigned long int flag;
>  
> -       flag=*((unsigned long int*)flag_par);
> +       if ( !flag_par || ((fparam_t*)flag_par)->type != FPARAM_INT ) {
> +         LOG(L_ERR, "gflags:is_gflag: Invalid parameter\n");
> +         return -1;
> +       }
> +
> +       flag=((fparam_t*)flag_par)->v.i;
>         return ( (*gflags) & (1<<flag)) ? 1 : -1;
>  }

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://tracker.iptel.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the Serdev mailing list