On 29/10/13 16:31, TheSin wrote:
> I honestly believe we need to patch tar to have a fallback when they aren't 
> set.  All this patching everywhere could easily be fixed if we fix tar 
> instead.  Sadly I'm not well enough versed in C to do so but if someone could 
> that would be super.

I think I found it. At least I have now fixed versions of dpkg and tar 
that no longer crash as before.

In fact, the crash of dpkg comes from a bug in dpkg that is independent 
of a similar bug in tar. That is, if you only fix dpkg as described 
below, it will work correctly even with the unfixed tar, but tar has its 
own crash that happens when it is run with LANG unset.

The fix is a one-line patch for dpkg that can be written as a perl pie:

   perl -pi.bak -e 's| (_\(\"failed)| N$1|' dpkg-deb/extract.c

or as a diff:

--- dpkg-deb/extract.c~ 2003-10-25 22:03:21.000000000 +0200
+++ dpkg-deb/extract.c  2013-10-31 18:00:47.000000000 +0100
@@ -247 +247 @@
-      stream_fd_copy(ar, p1[1], memberlen, _("failed to write to pipe 
in copy"));
+      stream_fd_copy(ar, p1[1], memberlen, N_("failed to write to pipe 
in copy"));

(this is for Fink's dpkg-1.10.21; I don't know if the bug is still 
present in the same form in new versions of dpkg).

For tar, the corresponding perl script fixes 4 lines (it is possible 
that only one of them is essential)

   perl -pi.bak -e 's|_\(\"tar|N$&|g' src/system.c

(Here the bug is still present in the new version 1.27).

Explanation:
The error appears when a child process (tar in the case of dpkg, gzip or 
similar in the case of tar) is spawned via 'fork' and a string of the 
form _("string") appears between 'fork' and 'exec' commands. This calls 
gettext and hence libintl and the CoreFoundation framework. Calling 
frameworks between 'fork' and 'exec' is not safe, see CAVEATS in `man 
fork`. If one replaces '_("string")' by 'N_("string")', no gettext call 
is involved. One could also just replace it by '"string"', which is the 
same thing.

-- 
Martin




------------------------------------------------------------------------------
Android is increasing in popularity, but the open development platform that
developers love is also attractive to malware creators. Download this white
paper to learn more about secure code signing practices that can help keep
Android apps secure.
http://pubads.g.doubleclick.net/gampad/clk?id=65839951&iu=/4140/ostg.clktrk
_______________________________________________
Fink-devel mailing list
Fink-devel@lists.sourceforge.net
List archive:
http://news.gmane.org/gmane.os.apple.fink.devel
Subscription management:
https://lists.sourceforge.net/lists/listinfo/fink-devel

Reply via email to