busybox: add 1.16.1 sed fix
authorPeter Korsgaard <jacmet@sunsite.dk>
Tue, 20 Apr 2010 18:15:33 +0000 (20:15 +0200)
committerPeter Korsgaard <jacmet@sunsite.dk>
Tue, 20 Apr 2010 18:15:33 +0000 (20:15 +0200)
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
package/busybox/busybox-1.16.1-sed.patch [new file with mode: 0644]

diff --git a/package/busybox/busybox-1.16.1-sed.patch b/package/busybox/busybox-1.16.1-sed.patch
new file mode 100644 (file)
index 0000000..56d2304
--- /dev/null
@@ -0,0 +1,47 @@
+diff -urpN busybox-1.16.1/editors/sed.c busybox-1.16.1-sed/editors/sed.c
+--- busybox-1.16.1/editors/sed.c       2010-03-28 13:43:35.000000000 -0400
++++ busybox-1.16.1-sed/editors/sed.c   2010-04-20 13:33:26.301975462 -0400
+@@ -936,7 +936,15 @@ static void process_files(void)
+               /* Skip blocks of commands we didn't match */
+               if (sed_cmd->cmd == '{') {
+                       if (sed_cmd->invert ? matched : !matched) {
+-                              while (sed_cmd->cmd != '}') {
++                              unsigned nest_cnt = 0;
++                              while (1) {
++                                      if (sed_cmd->cmd == '{')
++                                              nest_cnt++;
++                                      if (sed_cmd->cmd == '}') {
++                                              nest_cnt--;
++                                              if (nest_cnt == 0)
++                                                      break;
++                                      }
+                                       sed_cmd = sed_cmd->next;
+                                       if (!sed_cmd)
+                                               bb_error_msg_and_die("unterminated {");
+@@ -1031,7 +1039,7 @@ static void process_files(void)
+               case 'c':
+                       /* Only triggers on last line of a matching range. */
+                       if (!sed_cmd->in_match)
+-                              sed_puts(sed_cmd->string, NO_EOL_CHAR);
++                              sed_puts(sed_cmd->string, '\n');
+                       goto discard_line;
+               /* Read file, append contents to output */
+diff -urpN busybox-1.16.1/testsuite/sed.tests busybox-1.16.1-sed/testsuite/sed.tests
+--- busybox-1.16.1/testsuite/sed.tests 2010-03-19 22:58:07.000000000 -0400
++++ busybox-1.16.1-sed/testsuite/sed.tests     2010-04-20 13:33:26.301975462 -0400
+@@ -248,4 +248,14 @@ testing "sed beginning (^) matches only 
+       ">/usr</>lib<\n" "" \
+       "/usr/lib\n"
++testing "sed c" \
++      "sed 'crepl'" \
++      "repl\nrepl\n" "" \
++      "first\nsecond\n"
++
++testing "sed nested {}s" \
++      "sed '/asd/ { p; /s/ { s/s/c/ }; p; q }'" \
++      "qwe\nasd\nacd\nacd\n" "" \
++      "qwe\nasd\nzxc\n"
++
+ exit $FAILCOUNT