mirror of https://github.com/YosysHQ/yosys.git
Merge pull request #5480 from YosysHQ/emil/libparse-fix-quoted
libparse: fix parsing and memory safety of quoted values
This commit is contained in:
commit
26b51148a8
|
|
@ -123,7 +123,9 @@ int LibertyInputStream::peek_cold(size_t offset)
|
||||||
if (!extend_buffer_at_least(offset + 1))
|
if (!extend_buffer_at_least(offset + 1))
|
||||||
return EOF;
|
return EOF;
|
||||||
}
|
}
|
||||||
|
#ifdef log_assert
|
||||||
|
log_assert(buf_pos + offset < buffer.size());
|
||||||
|
#endif
|
||||||
return buffer[buf_pos + offset];
|
return buffer[buf_pos + offset];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -458,7 +460,6 @@ int LibertyParser::lexer_inner(std::string &str)
|
||||||
// if it wasn't an identifer, number of array range,
|
// if it wasn't an identifer, number of array range,
|
||||||
// maybe it's a string?
|
// maybe it's a string?
|
||||||
if (c == '"') {
|
if (c == '"') {
|
||||||
f.consume(1);
|
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
while (true) {
|
while (true) {
|
||||||
c = f.peek(i);
|
c = f.peek(i);
|
||||||
|
|
@ -469,14 +470,13 @@ int LibertyParser::lexer_inner(std::string &str)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
str.clear();
|
str.clear();
|
||||||
f.unget();
|
str.append(f.buffered_data(), f.buffered_data() + i);
|
||||||
str.append(f.buffered_data(), f.buffered_data() + i + 1);
|
|
||||||
// Usage in filterlib is expected to retain quotes
|
// Usage in filterlib is expected to retain quotes
|
||||||
// but yosys expects to get unquoted
|
// but yosys expects to get unquoted
|
||||||
#ifdef FILTERLIB
|
#ifdef FILTERLIB
|
||||||
str = "\"" + str + "\"";
|
str = "\"" + str + "\"";
|
||||||
#endif
|
#endif
|
||||||
f.consume(i + 2);
|
f.consume(i + 1);
|
||||||
return 'v';
|
return 'v';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue