GNU bug report logs - #1009
Carbon: posix-file-name-to-mac

Previous Next

Package: emacs22;

Reported by: David Reitter <david.reitter <at> gmail.com>

Date: Sat, 20 Sep 2008 12:40:05 UTC

Severity: normal

Done: Glenn Morris <rgm <at> gnu.org>

Bug is archived. No further changes may be made.

Full log


Message #5 received at submit <at> emacsbugs.donarmstrong.com (full text, mbox):

From: David Reitter <david.reitter <at> gmail.com>
To: emacs-pretest-bug <at> gnu.org
Subject: Carbon: posix-file-name-to-mac
Date: Sat, 20 Sep 2008 08:33:22 -0400
[Message part 1 (text/plain, inline)]
(posix-file-name-to-mac "~emacs/asd")
(posix-file-name-to-mac "/tmp/")

will crash a 22 branch Carbon Emacs.

A fix is below - it disables ~emacs and /tmp expansion when getpwnam  
or get_temp_dir_name return NULL, which they seem to do.
(OS X has /tmp, so I'm not sure if the code isn't leftover from MacOS  
and stopped working at some point.)

- D





Index: mac.c
===================================================================
RCS file: /sources/emacs/emacs/src/Attic/mac.c,v
retrieving revision 1.77.2.10
diff -c -r1.77.2.10 mac.c
*** mac.c	29 Aug 2008 08:18:07 -0000	1.77.2.10
--- mac.c	20 Sep 2008 12:29:24 -0000
***************
*** 214,237 ****
    if (strncmp (p, "~emacs/", 7) == 0)
      {
        struct passwd *pw = getpwnam ("emacs");
!       p += 7;
!       if (strlen (pw->pw_dir) + strlen (p) > MAXPATHLEN)
! 	return 0;
!       strcpy (expanded_pathname, pw->pw_dir);
!       strcat (expanded_pathname, p);
!       p = expanded_pathname;
!         /* now p points to the pathname with emacs dir prefix */
      }
    else if (strncmp (p, "/tmp/", 5) == 0)
      {
        char *t = get_temp_dir_name ();
!       p += 5;
!       if (strlen (t) + strlen (p) > MAXPATHLEN)
! 	return 0;
!       strcpy (expanded_pathname, t);
!       strcat (expanded_pathname, p);
!       p = expanded_pathname;
!         /* now p points to the pathname with emacs dir prefix */
      }
    else if (*p != '/')  /* relative pathname */
      strcat (mfn, ":");
--- 215,244 ----
    if (strncmp (p, "~emacs/", 7) == 0)
      {
        struct passwd *pw = getpwnam ("emacs");
!       if (pw != NULL)
! 	{
! 	  p += 7;
! 	  if (strlen (pw->pw_dir) + strlen (p) > MAXPATHLEN)
! 	    return 0;
! 	  strcpy (expanded_pathname, pw->pw_dir);
! 	  strcat (expanded_pathname, p);
! 	  p = expanded_pathname;
! 	  /* now p points to the pathname with emacs dir prefix */
! 	}
      }
    else if (strncmp (p, "/tmp/", 5) == 0)
      {
        char *t = get_temp_dir_name ();
!       if (t != NULL)
! 	{
! 	  p += 5;
! 	  if (strlen (t) + strlen (p) > MAXPATHLEN)
! 	    return 0;
! 	  strcpy (expanded_pathname, t);
! 	  strcat (expanded_pathname, p);
! 	  p = expanded_pathname;
! 	  /* now p points to the pathname with emacs dir prefix */
! 	}
      }
    else if (*p != '/')  /* relative pathname */
      strcat (mfn, ":");

[smime.p7s (application/pkcs7-signature, attachment)]

This bug report was last modified 14 years and 133 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.