summaryrefslogtreecommitdiffstats
path: root/src/mesa/main/debug_output.c
diff options
context:
space:
mode:
authorKenneth Graunke <kenneth@whitecape.org>2016-03-23 23:35:40 -0700
committerKenneth Graunke <kenneth@whitecape.org>2016-03-24 10:47:45 -0700
commit028459a00d6faec85ea75ebbaff75fb6f1d91bff (patch)
tree328e58429ded398d064d1b52ca0b36eb494716cf /src/mesa/main/debug_output.c
parent412e686da9e64d5b56b0a9c57c2b95624c56ea05 (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 <kenneth@whitecape.org> Reviewed-by: Eduardo Lima Mitev <elima@igalia.com>
Diffstat (limited to 'src/mesa/main/debug_output.c')
-rw-r--r--src/mesa/main/debug_output.c7
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);
}
}