commit 758f3000c57c6a7687e22f912907542b87311ffb
Author: Jakub Bogusz <[email protected]>
Date:   Thu Aug 21 18:14:49 2014 +0200

    - added empty-for-loop (fix "for" loops with empty arguments but existing 
"in" keyword)
    - added format patch (fixes build with -Werror=format-security)
    - release 58

 pdksh-empty-for-loop.patch |  24 ++++++
 pdksh-format.patch         | 182 +++++++++++++++++++++++++++++++++++++++++++++
 pdksh.spec                 |  10 ++-
 3 files changed, 214 insertions(+), 2 deletions(-)
---
diff --git a/pdksh.spec b/pdksh.spec
index e5ed0f0..8fcedb7 100644
--- a/pdksh.spec
+++ b/pdksh.spec
@@ -1,4 +1,6 @@
-# Note: pdksh is maintained in OpenBSD at 
http://www.openbsd.org/cgi-bin/cvsweb/src/bin/ksh/
+# Note:
+# - pdksh is maintained in OpenBSD at 
http://www.openbsd.org/cgi-bin/cvsweb/src/bin/ksh/
+# - PLD Th uses mksh instead
 #
 # Conditional build:
 %bcond_without static  # don't build static version of (pd)ksh
@@ -14,7 +16,7 @@ Summary(tr.UTF-8):    Serbest Korn kabuğu
 Summary(uk.UTF-8):     Вілбна реалізація командного процесора Korn shell (ksh)
 Name:          pdksh
 Version:       5.2.14
-Release:       57.18
+Release:       58
 License:       Mostly Public Domain with Free & GPL additions
 Group:         Applications/Shells
 Source0:       ftp://ftp.cs.mun.ca/pub/pdksh/%{name}-%{version}.tar.gz
@@ -32,6 +34,8 @@ Patch12:      %{name}-siglist-sort.patch
 Patch13:       %{name}-hex.patch
 Patch14:       %{name}-kshrc_support.patch
 Patch15:       %{name}-openbsd.patch
+Patch16:       %{name}-empty-for-loop.patch
+Patch17:       %{name}-format.patch
 URL:           http://www.cs.mun.ca/~michael/pdksh/
 %{?with_static:BuildRequires:  glibc-static}
 BuildRequires: rpmbuild(macros) >= 1.462
@@ -121,6 +125,8 @@ W tym pakiecie jest pdksh skonsolidowany statycznie.
 %patch13 -p1
 %patch14 -p1
 %patch15 -p1
+%patch16 -p1
+%patch17 -p1
 
 %build
 CFLAGS="%{rpmcflags} -D_FILE_OFFSET_BITS=64 -DDEBIAN=1"
diff --git a/pdksh-empty-for-loop.patch b/pdksh-empty-for-loop.patch
new file mode 100644
index 0000000..f0f3059
--- /dev/null
+++ b/pdksh-empty-for-loop.patch
@@ -0,0 +1,24 @@
+Don't "optimize" empty list to no list, as the latter is used to indicate
+no "in [word ...]" part and causes getting the positional args.
+
+Idea from OpenBSD list:
+http://openbsd.7691.n7.nabble.com/pdksh-bug-on-an-empty-for-loop-preceded-by-a-set-td229391.html
+
+--- pdksh-5.2.14/syn.c.orig    1999-04-16 20:28:49.000000000 +0200
++++ pdksh-5.2.14/syn.c 2014-08-21 16:12:54.026320226 +0200
+@@ -606,13 +606,8 @@
+               XPput(args, yylval.cp);
+       if (c != '\n' && c != ';')
+               syntaxerr((char *) 0);
+-      if (XPsize(args) == 0) {
+-              XPfree(args);
+-              return NULL;
+-      } else {
+-              XPput(args, NULL);
+-              return (char **) XPclose(args);
+-      }
++      XPput(args, NULL);
++      return (char **) XPclose(args);
+ }
+ 
+ /*
diff --git a/pdksh-format.patch b/pdksh-format.patch
new file mode 100644
index 0000000..614ea68
--- /dev/null
+++ b/pdksh-format.patch
@@ -0,0 +1,182 @@
+--- pdksh-5.2.14/c_ksh.c.orig  2014-08-21 16:25:18.056288998 +0200
++++ pdksh-5.2.14/c_ksh.c       2014-08-21 16:27:15.009617427 +0200
+@@ -558,7 +558,7 @@
+                       break;
+               }
+               if (vflag || !ret)
+-                      shprintf(newline);
++                      shprintf("%s", newline);
+       }
+       return ret;
+ }
+@@ -858,7 +858,7 @@
+                               else
+                                   print_value_quoted(s);
+                           }
+-                          shprintf(newline);
++                          shprintf("%s", newline);
+                       }
+                       /* Only report first `element' of an array with
+                        * no set elements.
+@@ -949,7 +949,7 @@
+                                       shf_putc('=', shl_stdout);
+                                       print_value_quoted(ap->val.s);
+                               }
+-                              shprintf(newline);
++                              shprintf("%s", newline);
+                       }
+       }
+ 
+@@ -973,7 +973,7 @@
+                                       shf_putc('=', shl_stdout);
+                                       print_value_quoted(ap->val.s);
+                               }
+-                              shprintf(newline);
++                              shprintf("%s", newline);
+                       } else {
+                               shprintf("%s alias not found\n", alias);
+                               rv = 1;
+@@ -1220,7 +1220,7 @@
+ "Usage: kill [ -s signame | -signum | -signame ] {pid|job}...\n\
+        kill -l [exit_status]\n"
+                       );
+-              bi_errorf(null);
++              bi_errorf("%s", null);
+               return 1;
+       }
+ 
+@@ -1241,7 +1241,7 @@
+                       for (i = 1; i < SIGNALS; i++, p = space)
+                               if (sigtraps[i].name)
+                                       shprintf("%s%s", p, sigtraps[i].name);
+-                      shprintf(newline);
++                      shprintf("%s", newline);
+               } else {
+                       int w, i;
+                       int mess_width;
+--- pdksh-5.2.14/exec.c.orig   2014-08-21 16:25:18.092955665 +0200
++++ pdksh-5.2.14/exec.c        2014-08-21 16:27:51.662949220 +0200
+@@ -145,7 +145,7 @@
+                                */
+                               if (tp && tp->type == CSHELL
+                                   && (tp->flag & SPEC_BI))
+-                                      errorf(null);
++                                      errorf("%s", null);
+                               /* Deal with FERREXIT, quitenv(), etc. */
+                               goto Break;
+                       }
+--- pdksh-5.2.14/expr.c.orig   2014-08-21 16:25:18.182955663 +0200
++++ pdksh-5.2.14/expr.c        2014-08-21 16:28:14.576281592 +0200
+@@ -185,7 +185,7 @@
+               if (i == LAEXPR) {
+                       if (error_ok == KSH_RETURN_ERROR)
+                               return 0;
+-                      errorf(null);
++                      errorf("%s", null);
+               }
+               unwind(i);
+               /*NOTREACHED*/
+--- pdksh-5.2.14/jobs.c.orig   2014-08-21 16:25:18.099622334 +0200
++++ pdksh-5.2.14/jobs.c        2014-08-21 16:28:38.036280605 +0200
+@@ -906,7 +906,7 @@
+               }
+               shprintf("%s%s", p->command, p->next ? "| " : null);
+       }
+-      shprintf(newline);
++      shprintf("%s", newline);
+       shf_flush(shl_stdout);
+       if (running)
+               j->state = PRUNNING;
+--- pdksh-5.2.14/lex.c.orig    2014-08-21 16:25:18.096289000 +0200
++++ pdksh-5.2.14/lex.c 2014-08-21 16:29:01.956279604 +0200
+@@ -878,7 +878,7 @@
+       SH_VA_START(va, fmt);
+       shf_vfprintf(shl_out, fmt, va);
+       va_end(va);
+-      errorf(null);
++      errorf("%s", null);
+ }
+ 
+ /*
+--- pdksh-5.2.14/main.c.orig   2014-08-21 16:25:18.176288992 +0200
++++ pdksh-5.2.14/main.c        2014-08-21 16:29:41.746277936 +0200
+@@ -569,7 +569,7 @@
+                 case LSHELL:
+                       if (interactive) {
+                               if (i == LINTR)
+-                                      shellf(newline);
++                                      shellf("%s", newline);
+                               /* Reset any eof that was read as part of a
+                                * multiline command.
+                                */
+@@ -863,6 +863,6 @@
+       const char *msg;
+ {
+       internal_errorf(1, "alloc: %s", msg);
+-      errorf(null); /* this is never executed - keeps gcc quiet */
++      errorf("%s", null); /* this is never executed - keeps gcc quiet */
+       /*NOTREACHED*/
+ }
+--- pdksh-5.2.14/misc.c.orig   2014-08-21 16:25:18.152955664 +0200
++++ pdksh-5.2.14/misc.c        2014-08-21 16:34:19.439599616 +0200
+@@ -250,7 +250,7 @@
+               for (i = 0; i < NELEM(options); i++)
+                       if (Flag(i) && options[i].name)
+                               shprintf(" -o %s", options[i].name);
+-              shprintf(newline);
++              shprintf("%s", newline);
+       }
+ }
+ 
+@@ -1016,7 +1016,7 @@
+                               (go->flags & GF_NONAME) ? "" : argv[0],
+                               (go->flags & GF_NONAME) ? "" : ": ", c);
+                       if (go->flags & GF_ERROR)
+-                              bi_errorf(null);
++                              bi_errorf("%s", null);
+               }
+               return '?';
+       }
+@@ -1042,7 +1042,7 @@
+                               (go->flags & GF_NONAME) ? "" : argv[0],
+                               (go->flags & GF_NONAME) ? "" : ": ", c);
+                       if (go->flags & GF_ERROR)
+-                              bi_errorf(null);
++                              bi_errorf("%s", null);
+                       return '?';
+               }
+               go->p = 0;
+@@ -1093,8 +1093,11 @@
+       }
+       for (p = s; *p; p++) {
+               if (*p == '\'') {
+-                      shprintf("'\\'" + 1 - inquote);
+-                      inquote = 0;
++                      if (inquote) {
++                              shprintf("'\\'");
++                              inquote = 0;
++                      } else
++                              shprintf("\\'");
+               } else {
+                       if (!inquote) {
+                               shprintf("'");
+--- pdksh-5.2.14/var.c.orig    2014-08-21 16:25:18.169622326 +0200
++++ pdksh-5.2.14/var.c 2014-08-21 16:34:57.299598027 +0200
+@@ -361,7 +361,7 @@
+       if ((vq->flag & RDONLY) && !no_ro_check) {
+               warningf(TRUE, "%s: is read only", vq->name);
+               if (!error_ok)
+-                      errorf(null);
++                      errorf("%s", null);
+               return 0;
+       }
+       if (!(vq->flag&INTEGER)) { /* string dest */
+@@ -723,7 +723,7 @@
+                       }
+               }
+               if (!ok)
+-                  errorf(null);
++                  errorf("%s", null);
+       }
+ 
+       if (val != NULL) {
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/pdksh.git/commitdiff/758f3000c57c6a7687e22f912907542b87311ffb

_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to