diff options
author | Kenneth Graunke <[email protected]> | 2016-03-23 23:35:40 -0700 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2016-03-24 10:47:45 -0700 |
commit | 028459a00d6faec85ea75ebbaff75fb6f1d91bff (patch) | |
tree | 328e58429ded398d064d1b52ca0b36eb494716cf | |
parent | 412e686da9e64d5b56b0a9c57c2b95624c56ea05 (diff) |
mesa: Make glDebugMessageInsert deal with negative length for all types.
From the KHR_debug spec, section 5.5.5 (Externally Generated Messages):
"If <length> is negative, it is implied that <buf> contains a null
terminated string. The error INVALID_VALUE will be generated if the
number of characters in <buf>, excluding the null terminator when
<length> is negative, is not less than the value of
MAX_DEBUG_MESSAGE_LENGTH."
This indicates that length should be set to strlen for all types, not
just GL_DEBUG_TYPE_MARKER. We want it to be after validate_length()
so we still generate appropriate errors.
Fixes crashes from uncaught std::string exceptions in many
dEQP-GLES31.functional.debug.error_filters.* tests.
Signed-off-by: Kenneth Graunke <[email protected]>
Reviewed-by: Eduardo Lima Mitev <[email protected]>
-rw-r--r-- | src/mesa/main/debug_output.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/mesa/main/debug_output.c b/src/mesa/main/debug_output.c index 74be8554c80..001f63ea94d 100644 --- a/src/mesa/main/debug_output.c +++ b/src/mesa/main/debug_output.c @@ -1009,15 +1009,16 @@ _mesa_DebugMessageInsert(GLenum source, GLenum type, GLuint id, if (!validate_length(ctx, callerstr, length, buf)) return; /* GL_INVALID_VALUE */ + /* if length not specified, string will be null terminated: */ + if (length < 0) + length = strlen(buf); + _mesa_log_msg(ctx, gl_enum_to_debug_source(source), gl_enum_to_debug_type(type), id, gl_enum_to_debug_severity(severity), length, buf); if (type == GL_DEBUG_TYPE_MARKER && ctx->Driver.EmitStringMarker) { - /* if length not specified, string will be null terminated: */ - if (length < 0) - length = strlen(buf); ctx->Driver.EmitStringMarker(ctx, buf, length); } } |