diff options
Diffstat (limited to 'sci-mathematics/pspp/files/pspp-1.2.0-fix-tests.patch')
-rw-r--r-- | sci-mathematics/pspp/files/pspp-1.2.0-fix-tests.patch | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/sci-mathematics/pspp/files/pspp-1.2.0-fix-tests.patch b/sci-mathematics/pspp/files/pspp-1.2.0-fix-tests.patch new file mode 100644 index 000000000000..1b92572cc820 --- /dev/null +++ b/sci-mathematics/pspp/files/pspp-1.2.0-fix-tests.patch @@ -0,0 +1,61 @@ +Upstream: https://git.savannah.gnu.org/cgit/pspp.git/commit/?id=fe94912b9c8682c4666873b84c83cda88f4c135d + +commit fe94912b9c8682c4666873b84c83cda88f4c135d +Author: Ben Pfaff <blp@cs.stanford.edu> +Date: Mon Nov 26 06:54:52 2018 -0800 + + segment: Fix behavior when #! line is not new-line terminated. + + The code here is supposed to maintain a invariant that, when it returns a + nonnegative value, it initializes *type, but it failed to do that when a + #! line did not end in a new-line. This fixes the problem. + + Bug #55101. + Thanks for Friedrich Beckmann for narrowing down the problem. + Found by the Debian buildd: https://buildd.debian.org/status/fetch.php?pkg=pspp&arch=arm64&ver=1.2.0-1&stamp=1543183214&raw=0 + +diff --git a/src/language/lexer/segment.c b/src/language/lexer/segment.c +index c0a09973c..c607c4bd1 100644 +--- a/src/language/lexer/segment.c ++++ b/src/language/lexer/segment.c +@@ -92,21 +92,26 @@ segmenter_parse_shbang__ (struct segmenter *s, const char *input, size_t n, + { + if (input[1] == '!') + { +- int ofs; +- +- for (ofs = 2; ofs < n; ofs++) +- if (input[ofs] == '\n') +- { +- if (input[ofs] == '\n' && input[ofs - 1] == '\r') +- ofs--; +- +- s->state = S_GENERAL; +- s->substate = SS_START_OF_COMMAND; +- *type = SEG_SHBANG; +- return ofs; +- } ++ for (int ofs = 2; ; ofs++) ++ { ++ if (ofs >= n) ++ { ++ if (!eof) ++ return -1; ++ } ++ else if (input[ofs] == '\n') ++ { ++ if (input[ofs - 1] == '\r') ++ ofs--; ++ } ++ else ++ continue; + +- return eof ? ofs : -1; ++ s->state = S_GENERAL; ++ s->substate = SS_START_OF_COMMAND; ++ *type = SEG_SHBANG; ++ return ofs; ++ } + } + } + else if (!eof) |