2017-05-31 2:39 GMT+03:00 Ian Romanick <[email protected]>:
> On 05/30/2017 03:45 PM, Vlad Golovkin wrote:
>> ---
>> src/compiler/glsl/standalone.cpp | 17 ++++++++++-------
>> 1 file changed, 10 insertions(+), 7 deletions(-)
>>
>> diff --git a/src/compiler/glsl/standalone.cpp
>> b/src/compiler/glsl/standalone.cpp
>> index 52554bb92a..b9cee23642 100644
>> --- a/src/compiler/glsl/standalone.cpp
>> +++ b/src/compiler/glsl/standalone.cpp
>> @@ -459,19 +459,22 @@ standalone_compile_shader(const struct
>> standalone_options *_options,
>> if (len < 6)
>> goto fail;
>>
>> - const char *const ext = & files[i][len - 5];
>> + const char *ext = & files[i][len - 5];
>> /* TODO add support to read a .shader_test */
>> - if (strncmp(".vert", ext, 5) == 0 || strncmp(".glsl", ext, 5) == 0)
>> + if (*ext != '.')
>> + goto fail;
>> + ++ext;
>> + if (memcmp("vert", ext, 4) == 0 || memcmp("glsl", ext, 4) == 0)
>
> This is not the same. If ext points at a NUL character that is, say, at
> the end of page, you don't get to look at the next 3 bytes, and memcmp
> may well do that. There is no guarantee that memcmp will not access
> beyond the first mismatched byte.
Maybe I am missing something but I think that check above ensures that
files[i] is at least 6 chars long, so there are always 4 non-NUL bytes
to compare.
>
>> shader->Type = GL_VERTEX_SHADER;
>> - else if (strncmp(".tesc", ext, 5) == 0)
>> + else if (memcmp("tesc", ext, 4) == 0)
>> shader->Type = GL_TESS_CONTROL_SHADER;
>> - else if (strncmp(".tese", ext, 5) == 0)
>> + else if (memcmp("tese", ext, 4) == 0)
>> shader->Type = GL_TESS_EVALUATION_SHADER;
>> - else if (strncmp(".geom", ext, 5) == 0)
>> + else if (memcmp("geom", ext, 4) == 0)
>> shader->Type = GL_GEOMETRY_SHADER;
>> - else if (strncmp(".frag", ext, 5) == 0)
>> + else if (memcmp("frag", ext, 4) == 0)
>> shader->Type = GL_FRAGMENT_SHADER;
>> - else if (strncmp(".comp", ext, 5) == 0)
>> + else if (memcmp("comp", ext, 4) == 0)
>> shader->Type = GL_COMPUTE_SHADER;
>> else
>> goto fail;
>>
>
_______________________________________________
mesa-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-dev