[Mesa-dev] [PATCH 10/15] mesa: Implement KHR_debug ObjectLabel functions
Timothy Arceri
t_arceri at yahoo.com.au
Wed Sep 4 17:43:11 PDT 2013
>> +/**
>> + * Helper for _mesa_ObjectLabel() and _mesa_ObjectPtrLabel().
>> + */
>> +static void
>> +set_label(struct gl_context *ctx, char **labelPtr, const char *label,
>> + int length, const char *caller)
>> +{
>> + if (*labelPtr) {
>> + /* free old label string */
>> + free(*labelPtr);
>> + }
>> +
>> + if (label) {
>> + /* set new label string */
>> +
>> + if (length >= 0) {
>
>This should be > 0. malloc(0) is not portable.
>
>Shouldn't there also be a MAX_LABEL_LENGTH test for this patch?
I think you are reviewing an old version of the patch. New version has that test.
>> + /* explicit length */
>> + *labelPtr = (char *) malloc(length);
>> + if (*labelPtr) {
>> + memcpy(*labelPtr, label, length);
>> + }
>> + }
>> + else {
>> + /* null-terminated string */
>> + int len = strlen(label);
>> + if (len >= MAX_LABEL_LENGTH) {
>The reason MAX_LABEL_LENGTH exists is so that you can have a fixed-size
>array in your structure (so you don't have to malloc a buffer. Either
>make a fixed size buffer, or make MAX_LABEL_LENGTH be the maximum size
>representable in a GLsizei (and eliminate this check).
Ok makes sense. However the check is still valid its in the spec. We shouldn't just truncate the string I know for sure that the AMD driver does the same thing. I have posted extensive tests for the objectlabel code on the piglit list.
>> + /* An INVALID_VALUE error is generated if the number of characters
>> + * in <label>, excluding the null terminator when <length> is
>> + * negative, is not less than the value of MAX_LABEL_LENGTH.
>> + */
>> + _mesa_error(ctx, GL_INVALID_VALUE,
>> + "%s(length=%d, which is not less than "
>> + "GL_MAX_LABEL_LENGTH=%d)", caller, length,
>> + MAX_LABEL_LENGTH);
>> + return;
>> + }
>> + *labelPtr = _mesa_strdup(label);
>> + }
>> + }
>> +}
>> +
>> +/**
>> + * Helper for _mesa_GetObjectLabel() and _mesa_GetObjectPtrLabel().
>> + */
>> +static void
>> +copy_label(char **labelPtr, char *label, int *length, int bufSize)
>> +{
>> + int labelLen = 0;
>> +
>> + if (*labelPtr)
>> + labelLen = strlen(*labelPtr);
>> +
>> + if (label) {
>
>There should be a spec quote here explaining why this value is returned.
>Other places in OpenGL include the NUL terminator in the length.
>
> /* The KHR_debug spec says:
> *
> * "The string representation of the message is stored in
> * <message> and its length (excluding the null-terminator)
> * is stored in <length>"
> */
ok
So are you going to revert the patchset or do I create a fixup patchset?
More information about the mesa-dev
mailing list