Skip to content

Commit 45a4edc

Browse files
authored
fix(semver): avoid one-past-end index, close #1178 (#1201)
1 parent 6fb7c12 commit 45a4edc

File tree

2 files changed

+5
-4
lines changed

2 files changed

+5
-4
lines changed

src/Semver.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ struct VersionLexer {
104104
Result<VersionToken> consumeNumOrIdent() noexcept;
105105
Result<VersionToken> next() noexcept;
106106
Result<VersionToken> peek() noexcept;
107+
constexpr char curChar() const noexcept { return isEof() ? '\0' : s[pos]; }
107108
};
108109

109110
struct VersionParser {

src/VersionReq.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,27 +107,27 @@ struct ComparatorLexer {
107107

108108
OptVersion ver;
109109
ver.major = Try(parser.parseNum());
110-
if (parser.lexer.s[parser.lexer.pos] != '.') {
110+
if (parser.lexer.curChar() != '.') {
111111
pos = parser.lexer.pos;
112112
return Ok(ComparatorToken{ ComparatorToken::Ver, std::move(ver) });
113113
}
114114

115115
Try(parser.parseDot());
116116
ver.minor = Try(parser.parseNum());
117-
if (parser.lexer.s[parser.lexer.pos] != '.') {
117+
if (parser.lexer.curChar() != '.') {
118118
pos = parser.lexer.pos;
119119
return Ok(ComparatorToken{ ComparatorToken::Ver, std::move(ver) });
120120
}
121121

122122
Try(parser.parseDot());
123123
ver.patch = Try(parser.parseNum());
124124

125-
if (parser.lexer.s[parser.lexer.pos] == '-') {
125+
if (parser.lexer.curChar() == '-') {
126126
parser.lexer.step();
127127
ver.pre = Try(parser.parsePre());
128128
}
129129

130-
if (parser.lexer.s[parser.lexer.pos] == '+') {
130+
if (parser.lexer.curChar() == '+') {
131131
parser.lexer.step();
132132
Try(parser.parseBuild()); // discard build metadata
133133
}

0 commit comments

Comments
 (0)