Allocate empty function name in the string pool.
authorDan Sinclair <dsinclair@chromium.org>
Wed, 20 Feb 2019 21:30:35 +0000 (16:30 -0500)
committerDan Sinclair <dsinclair@chromium.org>
Wed, 20 Feb 2019 21:32:49 +0000 (16:32 -0500)
Inside the grammar for function_identifier if the .function is null an
empty function name is allocated. This is allocated on the stack and
passed into TFunction as a pointer. TFunction just stores that pointer.

Later, when we access the name we will receive an invalid usage of a
stack allocated variable. This CL switches to using NewPoolTStringn for
the empty function name.

glslang/MachineIndependent/glslang.y
glslang/MachineIndependent/glslang_tab.cpp

index d6e5091..90be7a7 100755 (executable)
@@ -473,8 +473,8 @@ function_identifier
 
         if ($$.function == 0) {
             // error recover
-            TString empty("");
-            $$.function = new TFunction(&empty, TType(EbtVoid), EOpNull);
+            TString* empty = NewPoolTString("");
+            $$.function = new TFunction(empty, TType(EbtVoid), EOpNull);
         }
     }
     | non_uniform_qualifier {
index 1348c8b..6a2eb40 100644 (file)
@@ -4447,8 +4447,8 @@ yyreduce:
 
         if ((yyval.interm).function == 0) {
             // error recover
-            TString empty("");
-            (yyval.interm).function = new TFunction(&empty, TType(EbtVoid), EOpNull);
+            TString* empty = NewPoolTString("");
+            (yyval.interm).function = new TFunction(empty, TType(EbtVoid), EOpNull);
         }
     }
 #line 4455 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */