|
6 | 6 | #include "light.h" |
7 | 7 | #include "state.h" |
8 | 8 |
|
| 9 | +static int valid_copy_range(GLsizei skip, GLsizei count) { |
| 10 | + return count > 0 && skip >= 0 && skip < count; |
| 11 | +} |
| 12 | + |
9 | 13 | GLvoid *copy_gl_array(const GLvoid *src, |
10 | 14 | GLenum from, GLsizei width, GLsizei stride, |
11 | 15 | GLenum to, GLsizei to_width, GLsizei skip, GLsizei count, void* dst) { |
12 | | - if (! src || !count) |
| 16 | + if (!src || !valid_copy_range(skip, count)) |
13 | 17 | return NULL; |
14 | 18 |
|
15 | 19 | if (! stride) |
@@ -79,7 +83,7 @@ GLvoid *copy_gl_array(const GLvoid *src, |
79 | 83 | GLvoid *copy_gl_array_texcoord(const GLvoid *src, |
80 | 84 | GLenum from, GLsizei width, GLsizei stride, |
81 | 85 | GLsizei to_width, GLsizei skip, GLsizei count, void* dst) { |
82 | | - if (! src || !count) |
| 86 | + if (!src || !valid_copy_range(skip, count)) |
83 | 87 | return NULL; |
84 | 88 |
|
85 | 89 | if (! stride) |
@@ -137,7 +141,9 @@ GLvoid *copy_gl_array_texcoord(const GLvoid *src, |
137 | 141 | GLvoid *copy_gl_array_quickconvert(const GLvoid *src, |
138 | 142 | GLenum from, GLsizei stride, |
139 | 143 | GLsizei skip, GLsizei count, void* dest) { |
140 | | - |
| 144 | + if (!src || !valid_copy_range(skip, count)) |
| 145 | + return NULL; |
| 146 | + |
141 | 147 | if (! stride) |
142 | 148 | stride = 4 * gl_sizeof(from); |
143 | 149 | const char *unknown_str = "LIBGL: copy_gl_array_quickconvert -> unknown type: %x\n"; |
@@ -168,7 +174,7 @@ GLvoid *copy_gl_array_quickconvert(const GLvoid *src, |
168 | 174 | GLvoid *copy_gl_array_convert(const GLvoid *src, |
169 | 175 | GLenum from, GLsizei width, GLsizei stride, |
170 | 176 | GLenum to, GLsizei to_width, GLsizei skip, GLsizei count, GLvoid* filler, void* dst) { |
171 | | - if (! src || !count) |
| 177 | + if (!src || !valid_copy_range(skip, count)) |
172 | 178 | return NULL; |
173 | 179 |
|
174 | 180 | if (! stride) |
@@ -460,7 +466,7 @@ void *copy_gl_array_bgra(void* dest, const void *ptr, GLint stride, GLsizei widt |
460 | 466 | // this one only convert from BGRA (unsigned byte) to RGBA FLOAT |
461 | 467 | GLubyte* src = (GLubyte*)ptr; |
462 | 468 |
|
463 | | - if (! src || !(count-skip)) |
| 469 | + if (!src || !valid_copy_range(skip, count)) |
464 | 470 | return NULL; |
465 | 471 |
|
466 | 472 | if (! stride) |
|
0 commit comments