texlive[56230] Build/source/texk/web2c: fix \expanded memory leak of

commits+karl at tug.org commits+karl at tug.org
Tue Sep 1 00:30:33 CEST 2020


Revision: 56230
          http://tug.org/svn/texlive?view=revision&revision=56230
Author:   karl
Date:     2020-09-01 00:30:33 +0200 (Tue, 01 Sep 2020)
Log Message:
-----------
fix \expanded memory leak of def_ref

Modified Paths:
--------------
    trunk/Build/source/texk/web2c/ChangeLog
    trunk/Build/source/texk/web2c/pdftexdir/ChangeLog
    trunk/Build/source/texk/web2c/pdftexdir/pdftex.web
    trunk/Build/source/texk/web2c/xetexdir/ChangeLog
    trunk/Build/source/texk/web2c/xetexdir/xetex.web

Added Paths:
-----------
    trunk/Build/source/texk/web2c/tests/expanded-overflow.tex

Modified: trunk/Build/source/texk/web2c/ChangeLog
===================================================================
--- trunk/Build/source/texk/web2c/ChangeLog	2020-08-31 22:05:09 UTC (rev 56229)
+++ trunk/Build/source/texk/web2c/ChangeLog	2020-08-31 22:30:33 UTC (rev 56230)
@@ -1,3 +1,8 @@
+2020-08-31  Karl Berry  <karl at freefriends.org>
+
+	* tests/expanded-overflow.tex: new (unused) informational file
+	for \expanded overflow.
+
 2020-08-01  Andreas Scherer  <https://ascherer.github.io>
 
 	* dvicopy.ch,

Modified: trunk/Build/source/texk/web2c/pdftexdir/ChangeLog
===================================================================
--- trunk/Build/source/texk/web2c/pdftexdir/ChangeLog	2020-08-31 22:05:09 UTC (rev 56229)
+++ trunk/Build/source/texk/web2c/pdftexdir/ChangeLog	2020-08-31 22:30:33 UTC (rev 56230)
@@ -1,3 +1,8 @@
+2020-08-31  Marcel Fabian Krueger  <tex at 2krueger.de>
+
+	* pdftex.web (Scan the argument for command |c|) <expanded_code>:
+	free_avail(def_ref) to avoid memory exhaustion with many \expanded.
+
 2020-08-04  Andreas Scherer  <https://ascherer.github.io>
 
 	* pdftex.web: Pick a few obvious nits.
@@ -7,6 +12,7 @@
 	* pdftex.ch: Move pdfTeX variants of MLTeX code next to originals.
 
 2020-07-22  Akira Kakuto  <kakuto at w32tex.org>
+
 	* pdftex.web, writeimg.c: Show unfound file names in
 	fatal error messages.
 	https://tug.org/pipermail/pdftex/2020-July/009203.html

Modified: trunk/Build/source/texk/web2c/pdftexdir/pdftex.web
===================================================================
--- trunk/Build/source/texk/web2c/pdftexdir/pdftex.web	2020-08-31 22:05:09 UTC (rev 56229)
+++ trunk/Build/source/texk/web2c/pdftexdir/pdftex.web	2020-08-31 22:30:33 UTC (rev 56230)
@@ -10955,6 +10955,7 @@
     warning_index := save_warning_index;
     scanner_status := save_scanner_status;
     ins_list(link(def_ref));
+    free_avail(def_ref);
     def_ref := save_def_ref;
     restore_cur_string;
     return;

Added: trunk/Build/source/texk/web2c/tests/expanded-overflow.tex
===================================================================
--- trunk/Build/source/texk/web2c/tests/expanded-overflow.tex	                        (rev 0)
+++ trunk/Build/source/texk/web2c/tests/expanded-overflow.tex	2020-08-31 22:30:33 UTC (rev 56230)
@@ -0,0 +1,43 @@
+% $Id$
+% Public domain.
+\catcode`\{=1 \catcode`\}=2 \catcode`\#=6
+\def\zz#1{#1#1#1#1#1#1#1#1#1#1}% 10 times
+\def\zzz#1{\zz{\zz{\zz{\zz{\zz{\zz{\zz{#1}}}}}}}}% 10 million times
+\def\empty{}
+\zzz{\expanded{\empty}}
+\end
+
+% Date: Mon, 31 Aug 2020 01:01:17 +0200
+% From: Marcel Fabian Krueger <tex at 2krueger.de>
+% Subject: Re: [PATCH] \expanded main memory bug
+%
+% [...]
+% You might have heard that Jonathan Spratte got a bug in pdfTeX and
+% XeTeX: Using \expanded more than 5*10^6 times triggered a main memory
+% exhaustion. [that is:
+% ! TeX capacity exceeded, sorry [main memory size=8000000].
+% ]
+% 
+% This was caused by \expanded only passing link(def_ref) to the input
+% stack, leaking the reference counter pointed to by def_ref. A patch for
+% both engines is attached.
+% 
+% --- pdftexdir/pdftex.web
+% +++ pdftexdir/pdftex.web
+% @@ -10955,6 +10955,7 @@ expanded_code:
+%      ins_list(link(def_ref));
+% +    free_avail(def_ref);
+%      def_ref := save_def_ref;
+% 
+% --- xetexdir/xetex.web
+% +++ xetexdir/xetex.web
+% @@ -11094,6 +11094,7 @@ expanded_code:
+%      ins_list(link(def_ref));
+% +    free_avail(def_ref);
+%      def_ref := save_def_ref;
+
+
+
+% [Applied in r56230. Then the test document from Marcel above runs to
+% completion. We don't actually try to use this during make check or
+% anything else, just recording the information. --karl] 


Property changes on: trunk/Build/source/texk/web2c/tests/expanded-overflow.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Build/source/texk/web2c/xetexdir/ChangeLog
===================================================================
--- trunk/Build/source/texk/web2c/xetexdir/ChangeLog	2020-08-31 22:05:09 UTC (rev 56229)
+++ trunk/Build/source/texk/web2c/xetexdir/ChangeLog	2020-08-31 22:30:33 UTC (rev 56230)
@@ -1,3 +1,8 @@
+2020-08-31  Marcel Fabian Krueger  <tex at 2krueger.de>
+
+	* xetex.web (Scan the argument for command |c|) <expanded_code>:
+	free_avail(def_ref) to avoid memory exhaustion with many \expanded.
+
 2020-08-19  Andreas Scherer  <https://ascherer.github.io>
 
 	* xetex.web: Fix math operator in Pascal comment.

Modified: trunk/Build/source/texk/web2c/xetexdir/xetex.web
===================================================================
--- trunk/Build/source/texk/web2c/xetexdir/xetex.web	2020-08-31 22:05:09 UTC (rev 56229)
+++ trunk/Build/source/texk/web2c/xetexdir/xetex.web	2020-08-31 22:30:33 UTC (rev 56230)
@@ -11094,6 +11094,7 @@
     warning_index := save_warning_index;
     scanner_status := save_scanner_status;
     ins_list(link(def_ref));
+    free_avail(def_ref);
     def_ref := save_def_ref;
     restore_cur_string;
     return;



More information about the tex-live-commits mailing list.