Ignore:
Timestamp:
May 23, 2008, 6:56:41 AM (17 years ago)
Author:
Paul Smedley
Message:

Update source to 3.0.29

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/samba-3.0/source/smbd/nttrans.c

    r105 r134  
    29792979        uint32 dscnt = IVAL(inbuf,smb_nt_DataCount);
    29802980        uint32 dsoff = IVAL(inbuf,smb_nt_DataOffset);
    2981        
     2981        uint32 av_size = size-4;
     2982
    29822983        uint16 function_code = SVAL( inbuf, smb_nt_Function);
    29832984        NTSTATUS result;
     
    30503051                        return(ERROR_DOS(ERRDOS,ERRnomem));
    30513052                }
    3052                 if ((dsoff+dscnt < dsoff) || (dsoff+dscnt < dscnt))
     3053
     3054                if (dscnt > state->total_data ||
     3055                                dsoff+dscnt < dsoff) {
    30533056                        goto bad_param;
    3054                 if ((smb_base(inbuf)+dsoff+dscnt > inbuf + size) ||
    3055                     (smb_base(inbuf)+dsoff+dscnt < smb_base(inbuf)))
     3057                }
     3058
     3059                if (dsoff > av_size ||
     3060                                dscnt > av_size ||
     3061                                dsoff+dscnt > av_size) {
    30563062                        goto bad_param;
     3063                }
    30573064
    30583065                memcpy(state->data,smb_base(inbuf)+dsoff,dscnt);
     
    30703077                        return(ERROR_DOS(ERRDOS,ERRnomem));
    30713078                }
    3072                 if ((psoff+pscnt < psoff) || (psoff+pscnt < pscnt))
     3079
     3080                if (pscnt > state->total_param ||
     3081                                psoff+pscnt < psoff) {
    30733082                        goto bad_param;
    3074                 if ((smb_base(inbuf)+psoff+pscnt > inbuf + size) ||
    3075                     (smb_base(inbuf)+psoff+pscnt < smb_base(inbuf)))
     3083                }
     3084
     3085                if (psoff > av_size ||
     3086                                pscnt > av_size ||
     3087                                psoff+pscnt > av_size) {
    30763088                        goto bad_param;
     3089                }
    30773090
    30783091                memcpy(state->param,smb_base(inbuf)+psoff,pscnt);
     
    31453158{
    31463159        int outsize = 0;
    3147         unsigned int pcnt,poff,dcnt,doff,pdisp,ddisp;
     3160        uint32_t pcnt,poff,dcnt,doff,pdisp,ddisp;
     3161        uint32_t av_size = size-4;
    31483162        struct trans_state *state;
    31493163
     
    31893203
    31903204        if (pcnt) {
    3191                 if (pdisp+pcnt > state->total_param)
     3205                if (pdisp > state->total_param ||
     3206                                pcnt > state->total_param ||
     3207                                pdisp+pcnt > state->total_param ||
     3208                                pdisp+pcnt < pdisp) {
    31923209                        goto bad_param;
    3193                 if ((pdisp+pcnt < pdisp) || (pdisp+pcnt < pcnt))
     3210                }
     3211
     3212                if (poff > av_size ||
     3213                                pcnt > av_size ||
     3214                                poff+pcnt > av_size ||
     3215                                poff+pcnt < poff) {
    31943216                        goto bad_param;
    3195                 if (pdisp > state->total_param)
    3196                         goto bad_param;
    3197                 if ((smb_base(inbuf) + poff + pcnt > inbuf + size) ||
    3198                     (smb_base(inbuf) + poff + pcnt < smb_base(inbuf)))
    3199                         goto bad_param;
    3200                 if (state->param + pdisp < state->param)
    3201                         goto bad_param;
     3217                }
    32023218
    32033219                memcpy(state->param+pdisp,smb_base(inbuf)+poff,
     
    32063222
    32073223        if (dcnt) {
    3208                 if (ddisp+dcnt > state->total_data)
     3224                if (ddisp > state->total_data ||
     3225                                dcnt > state->total_data ||
     3226                                ddisp+dcnt > state->total_data ||
     3227                                ddisp+dcnt < ddisp) {
    32093228                        goto bad_param;
    3210                 if ((ddisp+dcnt < ddisp) || (ddisp+dcnt < dcnt))
     3229                }
     3230
     3231                if (ddisp > av_size ||
     3232                                dcnt > av_size ||
     3233                                ddisp+dcnt > av_size ||
     3234                                ddisp+dcnt < ddisp) {
    32113235                        goto bad_param;
    3212                 if (ddisp > state->total_data)
    3213                         goto bad_param;
    3214                 if ((smb_base(inbuf) + doff + dcnt > inbuf + size) ||
    3215                     (smb_base(inbuf) + doff + dcnt < smb_base(inbuf)))
    3216                         goto bad_param;
    3217                 if (state->data + ddisp < state->data)
    3218                         goto bad_param;
     3236                }
    32193237
    32203238                memcpy(state->data+ddisp, smb_base(inbuf)+doff,
Note: See TracChangeset for help on using the changeset viewer.