Subject: bug#70415: 30.0.50; [Cygwin] `lock-file' creates a symlink with funny name

From: Ken Brown <[email-masked]>
Date: Sun, 5 May 2024 12:21:03 -0400

On 5/5/2024 1:40 AM, Eli Zaretskii wrote:
> Right.  Does the below look like the right change to support such
> weird cases?
> 
> diff --git a/src/filelock.c b/src/filelock.c
> index 01d35c4..86c6eeb 100644
> --- a/src/filelock.c
> +++ b/src/filelock.c
> @@ -419,7 +419,9 @@ current_lock_owner (lock_info_type *owner, Lisp_Object lfname)
>         boot += 2;
>         FALLTHROUGH;
>       case ':':
> -      if (! c_isdigit (boot[0]))
> +      if (! c_isdigit (boot[0])
> +	  /* A negative number.  */
> +	  || (boot[0] == '-' && c_isdigit (boot[1])))
>   	return EINVAL;
>         boot_time = strtoimax (boot, &lfinfo_end, 10);
>         break;

Not quite.  I think it should be

diff --git a/src/filelock.c b/src/filelock.c
index 01d35c46726a..faa85a56628b 100644
--- a/src/filelock.c
+++ b/src/filelock.c
@@ -419,7 +419,9 @@ current_lock_owner (lock_info_type *owner, 
Lisp_Object lfname)
        boot += 2;
        FALLTHROUGH;
      case ':':
-      if (! c_isdigit (boot[0]))
+      if (! (c_isdigit (boot[0])
+             /* A negative number.  */
+             || (boot[0] == '-' && c_isdigit (boot[1]))))
         return EINVAL;
        boot_time = strtoimax (boot, &lfinfo_end, 10);
        break;