sync with OpenBSD -current
This commit is contained in:
parent
7a404394cf
commit
1bc98b3538
54 changed files with 733 additions and 467 deletions
|
@ -916,7 +916,8 @@ void AArch64BtiPac::writePlt(uint8_t *buf, const Symbol &sym,
|
|||
// escape to shared objects. isInIplt indicates a non-preemptible ifunc. Its
|
||||
// address may escape if referenced by a direct relocation. The condition is
|
||||
// conservative.
|
||||
bool hasBti = btiHeader && (sym.hasFlag(NEEDS_COPY) || sym.isInIplt);
|
||||
bool hasBti = btiHeader &&
|
||||
(sym.hasFlag(NEEDS_COPY) || sym.isInIplt || sym.thunkAccessed);
|
||||
if (hasBti) {
|
||||
memcpy(buf, btiData, sizeof(btiData));
|
||||
buf += sizeof(btiData);
|
||||
|
|
|
@ -25,7 +25,7 @@ using namespace llvm::ELF;
|
|||
using namespace lld;
|
||||
using namespace lld::elf;
|
||||
|
||||
static_assert(sizeof(SymbolUnion) <= 64, "SymbolUnion too large");
|
||||
static_assert(sizeof(SymbolUnion) <= 72, "SymbolUnion too large");
|
||||
|
||||
template <typename T> struct AssertSymbol {
|
||||
static_assert(std::is_trivially_destructible<T>(),
|
||||
|
|
|
@ -295,6 +295,9 @@ public:
|
|||
// True if defined in a DSO as protected visibility.
|
||||
uint8_t dsoProtected : 1;
|
||||
|
||||
// True if targeted by a range extension thunk.
|
||||
uint8_t thunkAccessed : 1;
|
||||
|
||||
// Temporary flags used to communicate which symbol entries need PLT and GOT
|
||||
// entries during postScanRelocations();
|
||||
std::atomic<uint16_t> flags;
|
||||
|
|
|
@ -1217,7 +1217,9 @@ bool PPC64LongBranchThunk::isCompatibleWith(const InputSection &isec,
|
|||
return rel.type == R_PPC64_REL24 || rel.type == R_PPC64_REL14;
|
||||
}
|
||||
|
||||
Thunk::Thunk(Symbol &d, int64_t a) : destination(d), addend(a), offset(0) {}
|
||||
Thunk::Thunk(Symbol &d, int64_t a) : destination(d), addend(a), offset(0) {
|
||||
destination.thunkAccessed = true;
|
||||
}
|
||||
|
||||
Thunk::~Thunk() = default;
|
||||
|
||||
|
|
|
@ -24250,7 +24250,7 @@ S_parse_uniprop_string(pTHX_
|
|||
* compile perl to know about them) */
|
||||
bool is_nv_type = FALSE;
|
||||
|
||||
unsigned int i, j = 0;
|
||||
unsigned int i = 0, i_zero = 0, j = 0;
|
||||
int equals_pos = -1; /* Where the '=' is found, or negative if none */
|
||||
int slash_pos = -1; /* Where the '/' is found, or negative if none */
|
||||
int table_index = 0; /* The entry number for this property in the table
|
||||
|
@ -24384,9 +24384,13 @@ S_parse_uniprop_string(pTHX_
|
|||
* all of them are considered to be for that package. For the purposes of
|
||||
* parsing the rest of the property, strip it off */
|
||||
if (non_pkg_begin == STRLENs("utf8::") && memBEGINPs(name, name_len, "utf8::")) {
|
||||
lookup_name += STRLENs("utf8::");
|
||||
j -= STRLENs("utf8::");
|
||||
equals_pos -= STRLENs("utf8::");
|
||||
lookup_name += STRLENs("utf8::");
|
||||
j -= STRLENs("utf8::");
|
||||
equals_pos -= STRLENs("utf8::");
|
||||
i_zero = STRLENs("utf8::"); /* When resetting 'i' to reparse
|
||||
from the beginning, it has to be
|
||||
set past what we're stripping
|
||||
off */
|
||||
stripped_utf8_pkg = TRUE;
|
||||
}
|
||||
|
||||
|
@ -24800,7 +24804,8 @@ S_parse_uniprop_string(pTHX_
|
|||
|
||||
/* We set the inputs back to 0 and the code below will reparse,
|
||||
* using strict */
|
||||
i = j = 0;
|
||||
i = i_zero;
|
||||
j = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -24821,7 +24826,7 @@ S_parse_uniprop_string(pTHX_
|
|||
* separates two digits */
|
||||
if (cur == '_') {
|
||||
if ( stricter
|
||||
&& ( i == 0 || (int) i == equals_pos || i == name_len- 1
|
||||
&& ( i == i_zero || (int) i == equals_pos || i == name_len- 1
|
||||
|| ! isDIGIT_A(name[i-1]) || ! isDIGIT_A(name[i+1])))
|
||||
{
|
||||
lookup_name[j++] = '_';
|
||||
|
|
|
@ -2688,6 +2688,14 @@ EOF_DEBUG_OUT
|
|||
{}, "Related to Github Issue #19350, forward \\g{x} pattern segv under use re Debug => 'PARSE'");
|
||||
}
|
||||
|
||||
{ # perl-security#140, read/write past buffer end
|
||||
fresh_perl_like('qr/\p{utf8::perl x}/',
|
||||
qr/Illegal user-defined property name "utf8::perl x" in regex/,
|
||||
{}, "perl-security#140");
|
||||
fresh_perl_is('qr/\p{utf8::_perl_surrogate}/', "",
|
||||
{}, "perl-security#140");
|
||||
}
|
||||
|
||||
|
||||
# !!! NOTE that tests that aren't at all likely to crash perl should go
|
||||
# a ways above, above these last ones. There's a comment there that, like
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue