ld parser buffer leak

Alan Modra amodra@gmail.com
Thu Jan 16 22:06:34 GMT 2025


	* ldlex.l (<<EOF>>): yy_delete_buffer current.
	(yy_create_string_buffer): Use yyalloc.

diff --git a/ld/ldlex.l b/ld/ldlex.l
index ef0c5bdf425..f36362fefc1 100644
--- a/ld/ldlex.l
+++ b/ld/ldlex.l
@@ -477,6 +477,7 @@ V_IDENTIFIER [*?.$_a-zA-Z\[\]\-\!\^\\]([*?.$_a-zA-Z0-9\[\]\-\!\^\\]|::)*
 				}
 
 <<EOF>> {
+  yy_delete_buffer (YY_CURRENT_BUFFER);
   include_stack_ptr--;
   if (include_stack_ptr == 0)
     {
@@ -528,13 +529,13 @@ yy_create_string_buffer (const char *string, size_t size)
 {
   YY_BUFFER_STATE b;
 
-  b = xmalloc (sizeof (struct yy_buffer_state));
+  b = yyalloc (sizeof (struct yy_buffer_state));
   b->yy_input_file = 0;
   b->yy_buf_size = size;
 
   /* yy_ch_buf has to be 2 characters longer than the size given because
      we need to put in 2 end-of-buffer characters.  */
-  b->yy_ch_buf = xmalloc ((size_t) b->yy_buf_size + 3);
+  b->yy_ch_buf = yyalloc (b->yy_buf_size + 3);
 
   b->yy_ch_buf[0] = '\n';
   strcpy (b->yy_ch_buf+1, string);

-- 
Alan Modra


More information about the Binutils mailing list