Mercurial > hg > toybox
view tests/tac.test @ 1613:96aa7ec74936 draft
Fix yet another sed bug.
The s/// command would copy the \ of substitutions before deciding what to
do with them (generally overwriting the \ with the new data). When the
substitution was A) at the very end of the new string, B) resolved to nothing,
it could leave a trailing \ that didn't belong there and didn't get overwritten
because the "copy trailing data" part that copies the original string's null
terminator already happened before the \ overwrote it.
The ghostwheel() function restarts regexes after embedded NUL bytes, but
if the string it's passed is _longer_ than the length it's told then it
gets confused (and it means we're off the end of our allocation so segfaults
are likely).
Fix: test for \ first and move the "copy byte" logic into an else case.
author | Rob Landley <rob@landley.net> |
---|---|
date | Mon, 15 Dec 2014 03:34:55 -0600 |
parents | 8700cbe1cb29 |
children |
line wrap: on
line source
#!/bin/bash [ -f testing.sh ] && . testing.sh #testing "name" "command" "result" "infile" "stdin" echo -e "one-A\none-B" > file1 echo -e "two-A\ntwo-B" > file2 testing "tac" "tac && echo yes" "one-B\none-A\nyes\n" "" "one-A\none-B\n" testing "tac -" "tac - && echo yes" "one-B\none-A\nyes\n" "" "one-A\none-B\n" testing "tac file1 file2" "tac file1 file2" "one-B\none-A\ntwo-B\ntwo-A\n" "" "" testing "tac - file" "tac - file1" "zero-B\nzero-A\none-B\none-A\n" "" "zero-A\nzero-B\n" testing "tac file -" "tac file1 -" "one-B\none-A\nzero-B\nzero-A\n" "" "zero-A\nzero-B\n" testing "tac file1 notfound file2" \ "tac file1 notfound file2 2>stderr && echo ok ; tac stderr; rm stderr" \ "one-B\none-A\ntwo-B\ntwo-A\ntac: notfound: No such file or directory\n" "" "" testing "tac no trailing newline" "tac -" "defabc\n" "" "abc\ndef" # xputs used by tac does not propagate this error condition properly. #testing "tac > /dev/full" \ # "tac - > /dev/full 2>stderr && echo ok; cat stderr; rm stderr" \ # "tac: write: No space left on device\n" "" "zero\n" # rm file1 file2