texlive[55865] Build/source/texk/dvipdfm-x: Fix a bug that error

commits+kakuto at tug.org commits+kakuto at tug.org
Sat Jul 18 05:02:47 CEST 2020


Revision: 55865
          http://tug.org/svn/texlive?view=revision&revision=55865
Author:   kakuto
Date:     2020-07-18 05:02:46 +0200 (Sat, 18 Jul 2020)
Log Message:
-----------
Fix a bug that error cleanup routine can be called recursively (S. Hirata).

Modified Paths:
--------------
    trunk/Build/source/texk/dvipdfm-x/ChangeLog
    trunk/Build/source/texk/dvipdfm-x/dvipdfmx.c
    trunk/Build/source/texk/dvipdfm-x/pdfximage.c
    trunk/Build/source/texk/dvipdfm-x/pdfximage.h

Modified: trunk/Build/source/texk/dvipdfm-x/ChangeLog
===================================================================
--- trunk/Build/source/texk/dvipdfm-x/ChangeLog	2020-07-17 23:53:08 UTC (rev 55864)
+++ trunk/Build/source/texk/dvipdfm-x/ChangeLog	2020-07-18 03:02:46 UTC (rev 55865)
@@ -1,3 +1,10 @@
+2020-07-18  Shunsaku Hirata  <shunsaku.hirata74 at gmail.com>
+
+	* dvipdfmx.c, pdfximage.[ch]: Don't call ordinary functions
+	such as pdf_close_images() which can call ERROR() in
+	error_cleanup(). This can result in a recursive call of
+	error_cleanup().
+
 2020-07-11  Shunsaku Hirata  <shunsaku.hirata74 at gmail.com>
 
 	* pdfdev.c, pdfdoc.c, pdfdraw.[ch], pdfobj.[ch], spc_pdfm.c:

Modified: trunk/Build/source/texk/dvipdfm-x/dvipdfmx.c
===================================================================
--- trunk/Build/source/texk/dvipdfm-x/dvipdfmx.c	2020-07-17 23:53:08 UTC (rev 55864)
+++ trunk/Build/source/texk/dvipdfm-x/dvipdfmx.c	2020-07-18 03:02:46 UTC (rev 55865)
@@ -870,7 +870,11 @@
 void
 error_cleanup (void)
 {
-  pdf_close_images();  /* delete temporary files */
+  /* Fixed a stupid bug...
+   * Please don't put an ordinay function which may call ERROR() inside it.
+   * It may result in error cleanup routine being called recursively.
+   */
+  pdf_error_cleanup_cache();  /* delete temporary files */
   pdf_error_cleanup();
   if (pdf_filename) {
     if (pdf_get_output_file()) {

Modified: trunk/Build/source/texk/dvipdfm-x/pdfximage.c
===================================================================
--- trunk/Build/source/texk/dvipdfm-x/pdfximage.c	2020-07-17 23:53:08 UTC (rev 55864)
+++ trunk/Build/source/texk/dvipdfm-x/pdfximage.c	2020-07-18 03:02:46 UTC (rev 55865)
@@ -1056,3 +1056,20 @@
 
   return ((try_count > 0) ? 1 : 0);
 }
+
+/* ERROR() can't be used here otherwise the cleanup routine is recursively called. */
+#undef ERROR
+void
+pdf_error_cleanup_cache (void)
+{
+  struct ic_ *ic = &_ic;
+  int         i;
+  pdf_ximage *I;
+
+  for (i = 0; i < ic->count; i++) {
+    I = &ic->ximages[i];
+    if (I->attr.tempfile) {
+      dpx_delete_temp_file(I->filename, false); /* temporary filename freed here */
+    }
+  }
+}

Modified: trunk/Build/source/texk/dvipdfm-x/pdfximage.h
===================================================================
--- trunk/Build/source/texk/dvipdfm-x/pdfximage.h	2020-07-17 23:53:08 UTC (rev 55864)
+++ trunk/Build/source/texk/dvipdfm-x/pdfximage.h	2020-07-18 03:02:46 UTC (rev 55865)
@@ -1,6 +1,6 @@
 /* This is dvipdfmx, an eXtended version of dvipdfm by Mark A. Wicks.
 
-    Copyright (C) 2007-2018 by Jin-Hwan Cho and Shunsaku Hirata,
+    Copyright (C) 2007-2020 by Jin-Hwan Cho and Shunsaku Hirata,
     the dvipdfmx project team.
     
     Copyright (C) 1998, 1999 by Mark A. Wicks <mwicks at kettering.edu>
@@ -102,4 +102,6 @@
 
 /* Migrated from pdfobj.h. Those are not PDF object related... */
 
+extern void pdf_error_cleanup_cache (void);
+
 #endif /* _PDFXIMAGE_H_ */



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