Subject: bug#12621: Emacs 24.1 crashing on Win7

From: Arunas Ruksnaitis <[email-masked]>
Date: Thu, 13 Dec 2012 18:30:20 +0000 (GMT)

Can reproduce easily. No joy with symbol values:

"print fname" or "print machine:
(gdb) down

#34 0x0102a12d in get_name_and_id ()
(gdb) print machine
No symbol "machine" in current context.
(gdb) print mp
No symbol "mp" in current context.
(gdb) print fname
No symbol "fname" in current context.
 
The "machine" part of UNC is actually not a machine but a DFS server. It does not have own shares but consolidates multiple fileservers in one view.

-Arunas

________________________________
 From: Eli Zaretskii <[email-masked]>
To: Arunas Ruksnaitis <[email-masked]> 
Cc: [email-masked] 
Sent: Thursday, 13 December 2012, 18:04
Subject: Re: bug#12621: Emacs 24.1 crashing on Win7
 
> Date: Thu, 13 Dec 2012 10:22:42 +0000 (GMT)
> From: Arunas Ruksnaitis <[email-masked]>
> 
> Just to confirm, this is a big problem for me, too.
> My observations confirm the original report.
> Stack trace, should it help, is here. I guess "lookup_account_sid" is passing an invalid lpSid?

No, I don't think the Sid can be invalid, because it is validated just
before the call that crashes, by calling IsValidSid:

  if (what == UID)
    result = get_security_descriptor_owner (psd, &sid, &dflt);
  else if (what == GID)
    result = get_security_descriptor_group (psd, &sid, &dflt);
  else
    result = 0;

  if (!result || !is_valid_sid (sid))  <<<<<<<<<<<<<<<<<<<<<<<<<<<
    use_dflt = 1;
  else if (!w32_cached_id (sid, id, nm))
    {
      /* If FNAME is a UNC, we need to lookup account on the
     specified machine.  */
      if (IS_DIRECTORY_SEP (fname[0]) && IS_DIRECTORY_SEP (fname[1])
      && fname[2] != '\0')
    {
      const char *s;
      char *p;

      for (s = fname + 2, p = machine;
           *s && !IS_DIRECTORY_SEP (*s); s++, p++)
        *p = *s;
      *p = '\0';
      mp = machine;
    }

      if (!lookup_account_sid (mp, sid, name, &name_len,
                   domain, &domain_len, &ignore)
      || name_len > UNLEN+1)

I actually suspect that the problem might be in the server name, the
first argument to lookup_account_sid.  If you can easily reproduce
this under GDB, can you show what is the value of 'fname' and of
'machine' in the above snippet?