VirtualBox

Ignore:
Timestamp:
Apr 18, 2018 4:22:34 PM (7 years ago)
Author:
vboxsync
Message:

3D: bugref:9096, Chromium code cleanup

Location:
trunk/src/VBox/HostServices/SharedOpenGL/unpacker
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_arrays.c

    r69390 r71903  
    225225    unsigned char *data;
    226226   
    227     offset = 2*sizeof(int)+12;
     227    if (first < 0 || count <= 0 || first >= INT32_MAX - count)
     228    {
     229        crError("crUnpackExtendLockArraysEXT: first(%i) count(%i), parameters out of range", first, count);
     230        return;
     231    }
     232
     233    if (numenabled <= 0 || numenabled >= CRSTATECLIENT_MAX_VERTEXARRAYS)
     234    {
     235        crError("crUnpackExtendLockArraysEXT: numenabled(%i), parameter out of range", numenabled);
     236        return;
     237    }
     238
     239    offset = 2 * sizeof(int) + 12;
    228240
    229241    /*crDebug("crUnpackExtendLockArraysEXT(%i, %i) ne=%i", first, count, numenabled);*/
    230242
    231     for (i=0; i<numenabled; ++i)
     243    for (i = 0; i < numenabled; ++i)
    232244    {
    233245        index = READ_DATA(offset, int);
    234246        offset += sizeof(int);
     247
    235248        cp = crStateGetClientPointerByIndex(index, &c->array);
     249
    236250        CRASSERT(cp && cp->enabled && (!cp->buffer || !cp->buffer->id));
    237         data = crAlloc((first+count)*cp->bytesPerIndex);
    238         crMemcpy(data+first*cp->bytesPerIndex, DATA_POINTER(offset, GLvoid), count*cp->bytesPerIndex);
    239         offset += count*cp->bytesPerIndex;
    240         /*crDebug("crUnpackExtendLockArraysEXT: old cp(%i): en/l=%i(%i) p=%p size=%i type=0x%x n=%i str=%i pp=%p pstr=%i",
    241                 index, cp->enabled, cp->locked, cp->p, cp->size, cp->type, cp->normalized, cp->stride, cp->prevPtr, cp->prevStride);*/
    242         crUnpackSetClientPointerByIndex(index, cp->size, cp->type, cp->normalized, 0, data, c);
    243         /*crDebug("crUnpackExtendLockArraysEXT: new cp(%i): en/l=%i(%i) p=%p size=%i type=0x%x n=%i str=%i pp=%p pstr=%i",
    244                 index, cp->enabled, cp->locked, cp->p, cp->size, cp->type, cp->normalized, cp->stride, cp->prevPtr, cp->prevStride);*/
    245     }
     251
     252        if (cp && cp->bytesPerIndex > 0)
     253        {
     254            if (first + count >= INT32_MAX / cp->bytesPerIndex)
     255            {
     256                crError("crUnpackExtendLockArraysEXT: first(%i) count(%i) bpi(%i), parameters out of range", first, count, cp->bytesPerIndex);
     257                return;
     258            }
     259
     260            data = crAlloc((first + count) * cp->bytesPerIndex);
     261
     262            if (data)
     263            {
     264                crMemcpy(data + first * cp->bytesPerIndex, DATA_POINTER(offset, GLvoid), count * cp->bytesPerIndex);
     265                /*crDebug("crUnpackExtendLockArraysEXT: old cp(%i): en/l=%i(%i) p=%p size=%i type=0x%x n=%i str=%i pp=%p pstr=%i",
     266                        index, cp->enabled, cp->locked, cp->p, cp->size, cp->type, cp->normalized, cp->stride, cp->prevPtr, cp->prevStride);*/
     267                crUnpackSetClientPointerByIndex(index, cp->size, cp->type, cp->normalized, 0, data, c);
     268                /*crDebug("crUnpackExtendLockArraysEXT: new cp(%i): en/l=%i(%i) p=%p size=%i type=0x%x n=%i str=%i pp=%p pstr=%i",
     269                        index, cp->enabled, cp->locked, cp->p, cp->size, cp->type, cp->normalized, cp->stride, cp->prevPtr, cp->prevStride);*/
     270            }
     271            else
     272            {
     273                crError("crUnpackExtendLockArraysEXT: crAlloc failed");
     274                return;
     275            }
     276        }
     277        else
     278        {
     279            crError("crUnpackExtendLockArraysEXT: wrong CRClientState %i", index);
     280            return;
     281        }
     282
     283        offset += count * cp->bytesPerIndex;
     284    }
     285
    246286    cr_unpackDispatch.LockArraysEXT(first, count);
    247287}
  • trunk/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_program.c

    r69390 r71903  
    4343        GLuint index = READ_DATA(12, GLuint);
    4444        GLuint num = READ_DATA(16, GLuint);
    45         GLdouble *params = (GLdouble *) crAlloc(num * 4 * sizeof(GLdouble));
     45    GLdouble *params;
     46
     47    if (num >= UINT32_MAX / (4 * sizeof(GLdouble)))
     48    {
     49        crError("crUnpackExtendProgramParameters4dvNV: parameter 'num' is out of range");
     50        return;
     51    }
     52
     53    params = (GLdouble *)crAlloc(num * 4 * sizeof(GLdouble));
     54
    4655        if (params) {
    4756                GLuint i;
    4857                for (i = 0; i < 4 * num; i++) {
    49                         params[i] = READ_DATA(20 + i * 8, GLdouble);
     58            params[i] = READ_DATA(20 + i * sizeof(GLdouble), GLdouble);
    5059                }
    5160                cr_unpackDispatch.ProgramParameters4dvNV(target, index, num, params);
     
    6069        GLuint index = READ_DATA(12, GLuint);
    6170        GLuint num = READ_DATA(16, GLuint);
    62         GLfloat *params = (GLfloat *) crAlloc(num * 4 * sizeof(GLfloat));
     71    GLfloat *params;
     72
     73    if (num >= UINT32_MAX / (4 * sizeof(GLfloat)))
     74    {
     75        crError("crUnpackExtendProgramParameters4fvNV: parameter 'num' is out of range");
     76        return;
     77    }
     78
     79    params = (GLfloat *)crAlloc(num * 4 * sizeof(GLfloat));
     80
    6381        if (params) {
    6482                GLuint i;
    6583                for (i = 0; i < 4 * num; i++) {
    66                         params[i] = READ_DATA(20 + i * 4, GLfloat);
     84            params[i] = READ_DATA(20 + i * sizeof(GLfloat), GLfloat);
    6785                }
    6886                cr_unpackDispatch.ProgramParameters4fvNV(target, index, num, params);
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette