[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: ps hang



Samuel Thibault <samuel.thibault@gnu.org> wrote:

> ps -o %r
>
> hangs, could somebody have a look?

Here is a patch that should break the infinite loop.
--- hurd-0.6-old/libps/fmt.c	2015-04-19 16:24:54.000000000 +0300
+++ hurd-0.6/libps/fmt.c	2015-05-26 09:56:36.000000000 +0300
@@ -68,6 +68,8 @@
   src = new_fmt->src;
   while (*src != '\0')
     {
+      char *start = src;
+
       if (field - fields == fields_alloced)
 	/* Time to grow FIELDS to make room for more.  */
 	{
@@ -172,6 +174,19 @@
 	    /* This field spec doesn't have a name, so use its flags fields
 	       to set the global ones, and skip it.  */
 	    {
+	      /* if we didn't use any chars, don't loop indefinitely */
+	      if (src == start)
+		{
+		  if (err_string)
+		    asprintf (err_string, "%s: Unknown format spec", src);
+
+		  FREE (new_fmt->src);
+		  FREE (new_fmt);
+		  FREE (fields);
+
+		  return EINVAL;
+		}
+
 	      global_clr_flags = clr_flags;
 	      global_inv_flags = inv_flags;
 	      continue;

Reply to: