glcpp: Fix post-decrement underflow in loop-control variable
authorCarl Worth <cworth@cworth.org>
Mon, 3 Jun 2013 18:35:43 +0000 (11:35 -0700)
committerCarl Worth <cworth@cworth.org>
Mon, 3 Jun 2013 20:33:31 +0000 (13:33 -0700)
This loop-control condition with a post-decrement operator would lead to
an underflow of collapsed_newlines. This in turn would cause a subsequent
execution of the loop to labor inordinately trying to return the loop-control
variable to a value of 0 again.

Fix this by dis-intertwining the test and the decrement.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=65112

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/glsl/glcpp/pp.c

index 789f7f94191db40bccf16da0236604aea19cee73..7e1b6c6896647f422124b337459fb3da8d1b86f1 100644 (file)
@@ -97,8 +97,10 @@ remove_line_continuations(glcpp_parser_t *ctx, const char *shader)
                        {
                                ralloc_strncat(&clean, shader,
                                               newline - shader + 1);
-                               while (collapsed_newlines--)
+                               while (collapsed_newlines) {
                                        ralloc_strcat(&clean, "\n");
+                                       collapsed_newlines--;
+                               }
                                shader = newline + 1;
                                search_start = shader;
                        }