Index: trunk/src/sh_extern.c
===================================================================
--- trunk/src/sh_extern.c	(revision 399)
+++ trunk/src/sh_extern.c	(revision 400)
@@ -414,5 +414,35 @@
               
 	      PDBGC(5);
-	      sl_snprintf(pname, sizeof(pname), _("/proc/self/fd/%d"), pfd);
+	      /* Cannot use sprintf because of deadlock in malloc/free */
+	      {
+		static char digit[] = "0123456789";
+		char str0[128];
+		char str1[128];
+		int ival = pfd;
+		int n = 0;
+		int m = 0;
+
+		if (ival < 0) ival = -ival;
+		do {
+		  str0[n] = digit[ival % 10];
+		  ++n;
+		  ival /= 10;
+		} while (ival);
+
+		if (pfd < 0)
+		  {
+		    str0[n] = '-';
+		    ++n;
+		  }
+		str0[n] = '\0';
+		str1[n] = '\0';
+		while (n > 0)
+		  {
+		    str1[m] = str0[n-1];
+		    ++m; --n;
+		  }
+		sl_strlcpy(pname, _("/proc/self/fd/"), sizeof(pname));
+		sl_strlcat(pname, str1, sizeof(pname));
+	      }
               if (access(pname, R_OK|X_OK) == 0) /* flawfinder: ignore */
 		{
